docs(04-06): complete visual polish + dark-logo decoupling — D-P4-03 closed (UAT 36/36 GREEN; 188/188 vitest with #9/#10 flake tolerated; operator re-confirmed 2026-05-26)

Plan 04-06 closure — the most ceremony-heavy plan in Phase 4: 3 planner
passes + 2 plan-checker passes + 4 task commits + 1 /gsd-debug fix cycle
+ this closure commit. D-P4-03 (locked, 04-CONTEXT.md) CLOSED — both
visual polish items: (a) cursor visibility verification + (b) dark-surface
logo contrast.

Closure trail:
  6a989e8 mis-diagnosed strict-meta-json deferred-items entry
  b59bd24 re-plan iter-1 — correct false jsdom premise + back-patch lines
  deb68df re-plan-checker iter-1 — ITERATE-NEEDED (2 BLOCKER)
  f3baa3a re-plan iter-2 — real A35 + corrected 184/184 baseline
  48c7053 re-plan-checker iter-2 — PASSED (0B + 0W + 3 cosmetic-advisories)
  f0b88d4 Task 1 — Wave 0 RED inline-SVG source-contract + cursor pin
  c416143 Task 2 — Wave 1 GREEN SVG+welcome.ts+globals.d.ts
  3f8e31a Task 3 — A35 driver + A17.8 narrowed + back-patch + correction
  d66cbf6 Task 4 artifact — operator-empirical screenshot harness
  (Task 4 first operator empirical: TWEAK verdict 2026-05-26)
  a8bcc17 debug-fix — decouple via --mks-mark-stroke + A35.5 sub-check
  (Task 4 re-empirical: CONFIRMED FIXED 2026-05-26)
  THIS    closure (SUMMARY + STATE.md + ROADMAP.md + debug archive)

Key deliverables:
- mokosh-mark.svg stroke="#181b2a" -> stroke="currentColor"
- welcome.ts ?url/<img> -> ?raw/DOMParser/replaceChildren inline-<svg>
- globals.d.ts *.svg?raw ambient decl
- src/shared/tokens.css NEW --mks-mark-stroke = var(--mks-linen-50) in :root
  (NOT overridden in .dark — theme-independent brand-component token)
- src/welcome/welcome.css .welcome-hero__mark rewired to --mks-mark-stroke
- NEW A35 host-side harness (5 sub-checks incl. A35.5 light+dark equality
  decouple-proof) at tests/uat/lib/harness-page-driver.ts
- A17.8 honestly narrowed to SOURCE-BUNDLING only; points to A35
- tests/welcome/inline-svg.test.ts (3 source-contract tests)
- tests/build/cursor-visibility.test.ts (1 regression pin)
- scripts/04-06-welcome-hero-screenshots.mjs (reproducible artifact)
- 01-07-SUMMARY back-patch (5 stale lines flipped; 4 historical left)
- deferred-items.md mis-diagnosis correction

Baselines preserved:
- vitest 188/188 GREEN (most recent 187/188 with 04-CONTEXT #9/#10
  webm-remux flake; passes in isolation; tolerated per Task 2 gate)
- UAT 36/36 GREEN; FORBIDDEN_HOOK_STRINGS unchanged at 12
- Pre-checkpoint bundle gates 6/6 PASS at both checkpoint + re-checkpoint
- All 4 ROADMAP SC CLOSED; D-P4-03 CLOSED

Phase 4 progress: 6/8 -> 7/8 (Plan 04-07 NEXT).

SUMMARY: .planning/phases/04-harden-clean-up-optional/04-06-SUMMARY.md
Debug session archived: .planning/debug/resolved/04-06-dark-mode-mark-decouple.md
This commit is contained in:
2026-05-26 13:14:41 +02:00
parent a8bcc17822
commit c790c6a8b3
4 changed files with 407 additions and 14 deletions

View File

@@ -300,7 +300,7 @@ finalized at plan time):
- [x] 04-04-PLAN.md — A33 SW state persistence: **spike-first Wave 0 SPIKE FAILED 2026-05-21** (videoSize=8505 bytes vs 100KB floor; offscreen RAM-only `segments: Blob[]` at src/offscreen/recorder.ts:91 does NOT survive 5-min SW idle + Puppeteer CDP `worker.close()`; corrupt WebM per ffprobe). **REFUTED-architecture 2026-05-22 via debug session-2 (commit `4ea1bbb`):** root cause is canvas.captureStream invisible-canvas throttling (Chrome bug 653548), NOT architectural; segments survived SW kill structurally (POST-KILL probe count=3). Plan 04-04 SUMMARY amended at `c1501e7` with the REFUTED-architecture verdict + Plan 04-08 insertion authorization. ROADMAP SC #1 reframed as test-methodology issue (NOT architectural); IndexedDB persistence plan-fix REJECTED (would not have closed SC #1 because segments are not the problem, frames are).
- [x] 04-08-PLAN.md — A33 methodology reframe + harness assertion: **CLOSED 2026-05-22** via debug session-2 verdict (canvas-captureStream invisible-source throttling root cause); HTMLVideoElement.captureStream replaces canvas.captureStream in installFakeDisplayMedia() with SYNC install + LAZY first-frame contract; spike re-run produces videoSize=1_797_178 bytes (1.8 MB; vs 8505 baseline); A33 lands per original Plan 04-04 Wave 1 spec under SKIP_LONG_UAT env-gate; UAT 33 -> 34 GREEN. **ROADMAP SC #1 CLOSED.**
- [x] 04-05-PLAN.md — A34 fetch + XHR network_error empirical: **CLOSED 2026-05-22.** assertA34 + driveA34 + 3-site orchestrator wiring; cs-injection-world `fetch(404)` + `XMLHttpRequest(404)` from a probe tab; host-side asserts 2 `network_error` entries with `meta.status === 404`. Skip-mode UAT 34 -> 35/35 GREEN (A34 real; all 6 checks PASS). Plan 04-01 P1 #11 Request-narrow fix validated end-to-end (fetch `target` = real URL, not `[object Request]`). **ROADMAP SC #2 CLOSED.** Full-mode 35/35 gate observed a pre-existing Plan 04-08 A33 SAVE-ack flake (A33.1 false; video buffer survived at 1.56 MB) — A34 SKIPPED-not-reached in that run but unaffected; A33 flake routed to /gsd-debug.
- [ ] 04-06-PLAN.md — Dark-logo currentColor + cursor visibility verification + 01-07-SUMMARY back-patch (UI-SPEC; operator empirical ack)
- [x] 04-06-PLAN.md — Dark-logo currentColor + cursor visibility verification + 01-07-SUMMARY back-patch (UI-SPEC; operator empirical ack): **CLOSED 2026-05-26** via operator re-empirical confirmation "Confirmed fixed — close Plan 04-06". D-P4-03 (both visual polish items) CLOSED. Multi-iteration ceremony: 3 planner passes + 2 checker passes + 1 /gsd-debug fix cycle. Key deliverables: (1) SVG stroke recolor (`stroke="currentColor"`) + welcome.ts `?raw`/DOMParser/replaceChildren inline-SVG injection (no `<img>`, no innerHTML) + globals.d.ts `*.svg?raw` ambient decl; (2) NEW brand-component token `--mks-mark-stroke = var(--mks-linen-50)` in :root (NOT overridden in `.dark`) — decoupled the welcome-hero mark from the theme-flipping semantic `--mks-fg-inverse` token (abstraction error surfaced via Task 4 operator empirical TWEAK; routed via /gsd-debug per `feedback-gsd-ceremony-for-fixes.md`; fix at `a8bcc17`); (3) NEW A35 host-side harness with 5 sub-checks including A35.5 light+dark equality decouple-proof (UAT 35 → 36 GREEN); (4) tests/welcome/inline-svg.test.ts (3 tests) + tests/build/cursor-visibility.test.ts (1 test) — vitest 184 → 188 GREEN; (5) 01-07-SUMMARY back-patch (5 stale 'deferred to Phase 5' framing lines flipped, 4 historical commit-description lines left); (6) deferred-items.md mis-diagnosis correction (04-CONTEXT #9/#10 parallel-vitest flake, NOT strict-meta-json). FORBIDDEN_HOOK_STRINGS unchanged at 12; 6/6 bundle gates PASS. SUMMARY: .planning/phases/04-harden-clean-up-optional/04-06-SUMMARY.md.
- [ ] 04-07-PLAN.md — Phase 4 closure aggregator + ROADMAP backfill (D-P4-05) + v1 milestone close prep
## Progress
@@ -313,4 +313,4 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5.
| 1. Stabilize video pipeline | 14/14 | **CLOSED 2026-05-20** via gsd-verifier audit GREEN (17/17 must-haves; commit 586836f); all markers flipped | Functional contract closed 2026-05-19 via Plan 01-13 harness PASS; design/brand contract closed 2026-05-20 via Plan 01-12 brand-fit ack; welcome-tab contract closed 2026-05-20 via Plan 01-10 cycle-2 operator ack "All good" + 5 inter-cycle debug fixes |
| 2. Stabilize export pipeline | 0/4 | Plans landed 2026-05-20 (4 plans: Wave 0 RED → Wave 1 Blob URL + meta.urls parallel → Wave 2 harness + operator checkpoint); execution pending | - |
| 3. SPEC §10 smoke + DOM/event-log verification | 0/TBD | Not started (absorbed Phase-2 DOM verification per 2026-05-20 re-phasing; ~2-3 plans) | - |
| 4. Harden + clean up (optional) | 5/8 | In Progress| |
| 4. Harden + clean up (optional) | 7/8 | In Progress (Plan 04-06 closed D-P4-03 — both visual polish items: cursor visibility verification + dark-surface logo contrast via --mks-mark-stroke brand-component token decoupling; operator re-empirical confirmed 2026-05-26) | |