docs: tighten F6 dashboard render budget to 350ms
1s was too soft; reads already return in ~20ms at 2k rows. Set the target to 350ms across DESIGN and the checkpoints.
This commit is contained in:
@@ -31,7 +31,7 @@ Strength weights used in matrices: **9** strong, **3** medium, **1** weak, blank
|
||||
| F3 | Suggest existing projects (creatable, deduped) | ↑ | 0 retypes for known projects; new ones persisted |
|
||||
| F4 | Render the red-dot defect map legibly | → | Readable to a cap (~8–12 visible dots/section, then "+N more") |
|
||||
| F5 | Show verbatim detail without leaving the board | → | Modal open/close; board stays visible |
|
||||
| F6 | Render the dashboard quickly at expected volume | ↓ | ≤ ~1s for up to ~2,000 defects |
|
||||
| F6 | Render the dashboard quickly at expected volume | ↓ | ≤350ms for up to ~2,000 defects |
|
||||
| F7 | Deliver a push promptly after a defect is filed | ↓ | ≤ ~10s to subscribed devices |
|
||||
| F8 | Enroll & maintain push subscriptions | → | Multiple devices; survives re-subscribe |
|
||||
| F9 | Gate every request behind Google SSO + server-side domain check | → | 100% of routes; `hd` never trusted alone |
|
||||
@@ -56,7 +56,7 @@ Strength weights used in matrices: **9** strong, **3** medium, **1** weak, blank
|
||||
- **F5** Show verbatim without leaving the board _→ modal_
|
||||
- **How**: click a section/dot → modal lists that section's defects (date, project, reporter, verbatim); a reverse-chronological feed sits alongside
|
||||
- **Component**: C6 VerbatimModal + Feed
|
||||
- **F6** Dashboard renders quickly _↓ ≤1s @2k defects_
|
||||
- **F6** Dashboard renders quickly _↓ ≤350ms @2k defects_
|
||||
- **How**: server returns per-section counts + a bounded recent slice; full section history fetched lazily on modal open
|
||||
- **Component**: C7 server API, C8 schema
|
||||
- **G3** Owner notified promptly on phone _W:7_
|
||||
@@ -150,7 +150,7 @@ Cells: link strength (9/3/1/blank). Importance = `Σ(goal weight × strength)`.
|
||||
| 3 | F9 auth coverage | 100% of routes gated | Integration test hitting routes unauthenticated | Default-deny middleware; block deploy if a route leaks |
|
||||
| 4 | F4 dot legibility | Readable to the cap | Seed N defects on one section, eyeball | Lower the visible-dot cap / tighten "+N more" threshold |
|
||||
| 5 | F7 push latency | ≤10s to device | File a defect, time the phone | Accept the delay; show an in-app unread badge as fallback (no retry queue) |
|
||||
| 6 | F6 dashboard render | ≤1s @ ~2k defects | Seed 2k rows, measure render | Add index on (section_id, created_at); precompute section counts |
|
||||
| 6 | F6 dashboard render | ≤350ms @ ~2k defects | Seed 2k rows, measure render | Add index on (section_id, created_at); precompute section counts |
|
||||
| 7 | F10 durability | 0 data loss on redeploy | Redeploy on Coolify, verify data present | Restore from Coolify's automatic Postgres backup; block launch until verified |
|
||||
|
||||
## 8. Tradeoffs — Got / Paid / ADR
|
||||
|
||||
@@ -19,7 +19,7 @@ review.
|
||||
- [x] **T6** Defects read API: feed + per-section counts (C7) — F6 (M) — _deps: T3_
|
||||
- [ ] **T7** Dashboard DotMap (C5) — F4 (M) — _deps: T2, T6_
|
||||
- [ ] **T8** VerbatimModal + Feed (C6) — F5 (M) — _deps: T6, T7_
|
||||
- [ ] ⛳ **Checkpoint:** dashboard dot map + feed + modal work, ≤1s @2k, human review
|
||||
- [ ] ⛳ **Checkpoint:** dashboard dot map + feed + modal work, ≤350ms @2k, human review
|
||||
|
||||
## Phase 4 — Authentication (G4)
|
||||
- [ ] **T9** Google OAuth + session + domain-check middleware (C9) — F9 (M) — _deps: T1, retrofits T5_
|
||||
|
||||
Reference in New Issue
Block a user