Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .superpowers/sdd/progress.md
Original file line number Diff line number Diff line change
Expand Up @@ -848,3 +848,18 @@ Carry-forwards: attendees gate TEMPORARY until P6.3 search list; monitor stack I
=== P6.1 FINAL WHOLE-BRANCH REVIEW (fable, 094d447..bb84eb5) — READY TO MERGE: YES, 0 Critical / 0 Important / 6 new Minor (all follow-up) ===
Reviewer independently re-ran all new + adjacent suites (25/25 panel-new, 5/5 ui-new, 37/37 adjacent) and re-checked route-guard interplay (checkin beforeLoad → launch gate: one coherent gate, no loop). All 8 parked per-task minors triaged FINE-AS-FOLLOW-UP; highest-priority follow-up for P6.2 first commit: DesktopOnlyGate clipboard .catch (on-prem plain-http serves navigator.clipboard=undefined → silent no-op yet "copied" announced) + ReadinessStrip MinusCircle; when first TabBar badge consumer lands (P6.2), add sr-only badge label — dot must not ship sighted-only. New minors also noted: MoreSheet survives phone→desktop crossing while open; gate h2-without-h1 on org-level routes (P6.4 a11y sweep); `sm` disclosure in AppShell version tag is space-driven, not a second cutover (clarify in AGENTS.md some day).
P6.1 PR #106 bot review round 1: CodeRabbit 7 actionable + 2 nitpicks. 8 fixed in 382a69e (clipboard tri-state w/ copyFailedLabel prop + gateCopyFailed EN/RU, 44px bottom-sheet close, badge→sr-only string, md version-tag cutoff, aria-expanded, MinusCircle skipped, isError&&!data retain-last-known-good, typed test fixture); 1 declined w/ reason (STEP_LABEL_KEYS→shared move = standalone refactor, pre-existing pattern); badge visible-indicator part declined per board 8r. Gates green (ui 335, panel 1526, typecheck, lint). All 7 threads replied, single push.
P6.2 Task 1: complete (d5c6963..4a95ed3 incl. fix round 1, review Spec ✅ + Approved after fix; fix round 1 corrected implementer's false pristine-test claim — never ran typecheck, left dead ReadinessStep type alias failing noUnusedLocals; re-review independently ran typecheck clean)
P6.2 Task 2: complete (4a95ed3..4079db6 incl. fix round 1, review Spec ✅ + Approved after fix; fix round 1 corrected a real bug inherited from the plan's own sketch code — announcer conflated the transient 'connecting' status with genuine 'error', now silent during connecting per the pre-existing header precedent; re-review confirmed the new test reaches real connecting state via the established harness, no regression to dimming/counter/reconnecting assertions)
P6.2 Task 3: complete (4079db6..9527855, review Spec ✅ + Approved, zero findings; clean integration with Task 2's header/announcer changes independently verified; minor: TotalsCard key={part} uses formatted text as React key, safe today, noted for follow-up if a future locale collides)
P6.2 Task 4: complete (9527855..f5e3a11, review Spec ✅ + Approved, zero blocking findings; reviewer independently verified enabled:false suppresses fetch via openapi-react-query source + staff/hooks.ts precedent [implementer's proof test was deleted before commit], and confirmed MonitorStationRow really keys by 'id' not 'station_id' via schema.d.ts directly; minor: no regression test guards enabled:false itself, last_seen_at null-guard is redundant per non-nullable schema)

=== PANEL P6.2 — LIVE OPS (plan docs/superpowers/plans/2026-07-23-panel-p6.2-live-ops.md, branch feature/panel-p6.2-live-ops) ===
Task 5 code: LiveStrip phone polish (board 8d) — headline text-3xl/tracking-tight md:text-2xl/tracking-normal, Progress w-full md:w-56. Reviewed Spec ✅ + Approved, zero findings (commit 6d408f3).
Task 5 full gates (post all 5 tasks): panel 126 files/1536 tests pass, packages/ui 35 files/335 tests pass, typecheck clean, lint clean (via rtk proxy), build clean (only pre-existing >500kB chunk-size warning, not new).
LIVE DEGRADED-STREAM WALK (real stack: docker compose db + Go backend from worktree + vite dev server, admin@test.com seed, event 96296679-8432-4fea-97b1-1d1a3bf550b6 whose E2E Station is permanently stale from seed data — ideal fixture): confirmed board 8f (compact truncating header, no Exit button below md, XXL "1/1" totals, right-aligned percent, spread rate row) in BOTH light and dark theme; confirmed the Monitor tab bar attention dot lights REAL end-to-end (T4) — cached snapshot's stale E2E Station genuinely drives the sr-only-labelled dot, no manual seeding needed, it was already stale from P6.1's fixture data. Killed the backend process: Reconnecting badge appeared, monitor-body opacity genuinely computed 0.6 (not just class-present), updated-ago counter genuinely turned text-warning with clock icon and kept counting up, aria-live announcer genuinely read "Reconnecting" — all verified via getComputedStyle/textContent, not just visual screenshot. Restarted backend: full recovery confirmed — opacity back to 1, announcer "LIVE", counter back to muted tone, badge gone. Zero horizontal overflow at 390px throughout (scrollWidth===clientWidth===390 verified via JS).
One test-methodology artifact, NOT a P6.2 regression: after a second rapid kill/restart cycle, MonitorPage's pre-existing `!eventQuery.data` early-return (P4.2-era code, untouched by any P6.2 task) surfaced "Couldn't load this event" — this is the EVENT query's own error branch, distinct from the monitorSnapshot's retain-last-known-good gate that P6.2 Task 2 explicitly preserved and verified working correctly. A single reload recovered it cleanly. Worth a note for a future phase (eventQuery could use the same retain-last-known-good treatment MonitorPage.tsx already gives snapshotQuery), not a P6.2 blocker.
Environment notes for next phase: worktree backend/.env recipe (DATABASE_URL port 5438, JWT_SECRET, CORS_ALLOWED_ORIGINS including the dev port used) + a temporary launch.json entry (removed after the walk, following P6.1's precedent) is the fastest path to a live walk.
=== P6.2 FINAL WHOLE-BRANCH REVIEW (fable, 1e62b86..b361066) — READY TO MERGE: YES, 0 Critical / 0 Important / 3 new Minor (all follow-up) ===
Reviewer independently re-verified both mid-task fixes hold at HEAD (ReadinessCell typecheck clean w/ components import genuinely still used; MonitorPage announcer genuinely 4-branch), confirmed the tab-bar dot's cache key is byte-identical to MONITOR_SNAPSHOT_KEY, confirmed opacity-60 scoping and header/tab-bar coexistence, and independently re-ran typecheck/lint/all 6 touched suites green. New minors (queued for P6.3 first commit): (1) opacity-60 also dims the !snapshot error card — plan-conformant, park for P6.4 AA sweep; (2) dot conflates cache age with real staleness after leaving the monitor page (Date.now() vs dataUpdatedAt) — self-correcting, worth a comment or dataUpdatedAt clamp; (3) "never fetches" test only asserts no-dot, not no-fetch — add a fetch-spy assertion to genuinely guard enabled:false (highest priority since it's the safety-critical constraint with zero regression coverage). Triage #4 promoted from ledger note to queued ticket: eventQuery lacks snapshotQuery's retain-last-known-good/SSE-revival — deliberate P6.3/P6.4 follow-up, not a P6.2 blocker.
PANEL P6.2 LIVE OPS INITIATIVE COMPLETE — 9 commits 1e62b86..b361066 on branch feature/panel-p6.2-live-ops (STEP_LABEL_KEYS→shared, staleness vocabulary, monitor phone header/typography, tab-bar attention dot, LiveStrip polish; 2 embedded fix rounds [T1 dead type alias, T2 connecting/error conflation], live degraded-stream walk with real kill/restart of the backend, both themes, zero horizontal overflow). Next: push + PR.
P6.2 PR #108 bot review round 1: CodeRabbit 1 actionable finding — the cache-only tab-bar attention dot (Task 4) only recomputed Date.now() at render time, so a station could cross STATION_STALE_MS with zero cache update AND zero unrelated re-render, leaving the dot off indefinitely on a page like Overview. Verified against the real code (confirmed no ticker existed). Fixed in 16c28ab: 10s local setInterval recheck tick (well under the 45s threshold), enabled:false left untouched (no network added), regression test advances fake timers past staleness with the cache held fixed. Gates green (panel 1537/1537, typecheck, lint via rtk proxy). Thread replied, single push.
Loading
Loading