2 Commits

Author SHA1 Message Date
a8bcc17822 fix(debug 04-06): decouple welcome-hero mark stroke via --mks-mark-stroke
Operator-empirical Task 4 checkpoint flagged the dark-mode mark stroke
as muddy ink-on-madder. Root cause: .welcome-hero__mark used
`color: var(--mks-fg-inverse)`, which is a SEMANTIC text-foreground-on-
inverse-surface token that flips to ink-900 in the dark theme
(tokens.css line 244). The mark sits on a theme-independent madder-600
circle, so the stroke must be theme-independent too.

Fix: introduce a dedicated BRAND-COMPONENT token --mks-mark-stroke =
var(--mks-linen-50) in the universal :root block. CRUCIALLY NOT
overridden in the .dark/[data-theme="dark"] block — stays linen-50 on
every surface. Rewire .welcome-hero__mark to point at the new token.

SVG (mokosh-mark.svg) unchanged — `stroke="currentColor"` cascade
plumbing identical; only the wrapper's color source changed.

A35 strengthened: extracted live-DOM probe into a helper, now probes
BOTH light + dark themes (data-theme="dark" toggle on documentElement),
and added A35.5 — the decouple proof that light.computedStroke ===
dark.computedStroke === "rgb(250, 247, 241)" (linen-50). No new
__MOKOSH_UAT__ symbol; FORBIDDEN_HOOK_STRINGS stays at 12.

Scope expansion note: src/welcome/welcome.css was not in Plan 04-06
re-plan iter-2 files_modified. The edit is authorized by the operator's
TWEAK verdict on Task 4 checkpoint.

Verification:
- /tmp/04-06-welcome-hero-{light,dark}.png re-shot — both show identical
  crisp linen-on-madder grid icon.
- A35.5 LIVE-DOM probe (UAT): light="rgb(250, 247, 241)", dark=same.
- UAT 36/36 GREEN; vitest 187 + 1 tolerated webm-remux flake.
- 6/6 pre-checkpoint bundle gates PASS; FORBIDDEN_HOOK_STRINGS = 12.

Debug session: .planning/debug/04-06-dark-mode-mark-decouple.md

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 12:54:54 +02:00
f0b88d4d17 test(04-06): Wave 0 — inline-SVG source-contract RED + cursor-visibility regression pin
- tests/welcome/inline-svg.test.ts (NEW; 3 tests, node-env source-contract):
  - Test A: mokosh-mark.svg carries stroke="currentColor" + viewBox="0 0 32 32"
    (currently RED — SVG still has stroke="#181b2a").
  - Test B: welcome.ts uses ?raw import + DOMParser + replaceChildren and
    does NOT use innerHTML (MV3 CSP discipline / T-04-06-01).
    Currently RED — welcome.ts still ?url + <img>.
  - Test C: globals.d.ts declares the *.svg?raw ambient module.
    Currently RED — only *.svg?url + *.webm?url declared.
- tests/build/cursor-visibility.test.ts (NEW; 1 test, node-env file-grep):
  - GREEN-on-arrival regression pin for the cursor: 'always' literal at
    src/offscreen/recorder.ts:285 (shipped opportunistically Plan 01-09).
- Mirrors the canonical tests/i18n/manifest-i18n.test.ts scaffold
  (readFileSync + expect(text).toContain(...)) — vitest is environment:'node'
  and the project ships no DOM-emulation library, so the inline-svg test
  pins source TEXT only; the live-DOM injection + currentColor cascade is
  verified by the host-side harness assertion A35 (Task 3).
2026-05-26 07:52:41 +02:00