Files
mokosh/.planning/phases/04-harden-clean-up-optional/.plan-phase-preferences.md
Mark 74ac8ac342 docs(04): preserve plan-phase preferences captured pre-UI-SPEC exit
User invoked /gsd-plan-phase 4 and answered both gate questions before the
workflow correctly exited at the UI Design Contract gate (per workflow rule
that manual invocations cannot nested-Skill-spawn /gsd-ui-phase due to
AskUserQuestion-in-subcontext issue #1009).

Preferences saved at .plan-phase-preferences.md for the next plan-phase
invocation (after /gsd-ui-phase 4 produces UI-SPEC.md):
- UI gate: generate UI-SPEC.md first — unlike Phase 3 (false positive),
  Phase 4 has genuine dark-logo work; UI-SPEC should be thin-but-real
  (dark-logo design only; cursor visibility listed as inherited behavioral
  change, not a design surface)
- Research gate: research first (light, ~10-20 min) — scope-limited to:
  setimmediate polyfill replacement strategy + SW state persistence 5min
  idle test patterns + chrome.scripting.executeScript world:'ISOLATED'
  best practices for A29 cs-injection-world fix. Researcher NOT to
  investigate already-deferred items (rrweb v2, SW-RAM, masking).

File auto-deletes when /gsd-plan-phase 4 honors these preferences.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 22:42:13 +02:00

3.3 KiB

context, captured, expires_when
context captured expires_when
phase-4-plan-preferences 2026-05-20 /gsd-plan-phase 4 completes

Phase 4 plan-phase preferences (captured pre-UI-SPEC exit)

User invoked /gsd-plan-phase 4 2026-05-20 and answered both initial gate questions before workflow exited at UI-SPEC gate. These preferences should be re-honored on next /gsd-plan-phase 4 invocation (after /gsd-ui-phase 4 completes):

UI Design Contract gate

Decision: Generate UI-SPEC.md first → run /gsd-ui-phase 4 before re-running plan-phase.

Caveat to revisit: Unlike Phase 3 (false-positive null-spec), Phase 4 has genuine UI work — specifically the dark-surface logo contrast fix (Plan 01-10 obs 2026-05-20). The cursor visibility constraint is purely behavioral (getDisplayMedia video: {cursor: 'always'} — 1 line in src/offscreen/recorder.ts) and does not need designer iteration. /gsd-ui-phase 4 should produce a thin-but-real UI-SPEC covering ONLY:

  • dark-surface logo contrast strategy (media query + alt-color SVG vs wrapper background vs neutral palette swap — designer picks)
  • (informational only) cursor visibility constraint — list as inherited behavioral change, not a design surface

If /gsd-ui-phase 4 surfaces the "is this a UI phase?" question, answer "yes — but narrow scope (dark-logo design only; cursor is behavioral)".

Research gate

Decision: Research first (light) → spawn gsd-phase-researcher before planning.

Scope for researcher (~10-20 min):

  1. setimmediate polyfill replacement strategy — current source is vite-plugin-node-polyfills (per Plan 01-12 disclosure). Options: (a) inline manual polyfill globalThis.setImmediate ||= (fn, ...args) => queueMicrotask(() => fn(...args)) — bypasses plugin entirely (b) configure vite-plugin-node-polyfills to disable setimmediate inclusion (c) document acceptance with explicit CSP-allow rationale (already-done Phase 1 acceptance log path) Recommend best path for v1 close.

  2. SW state persistence 5-min idle test patterns under MV3 — ROADMAP SC #1 requires "extension idle for >5 minutes, then exporting, the archive still contains a non-empty video buffer". Best practices for:

    • Forcing SW unload in Puppeteer (chrome.runtime.reload()? or just wait for natural idle eviction at 30s?)
    • Verifying buffer survives across reload (IndexedDB? chrome.storage.local? existing keepalivePort architecture from Plan 01-05?)
    • 5min Puppeteer timeout considerations (CI lane vs default)
  3. chrome.scripting.executeScript world:'ISOLATED' best practices for the A29 cs-injection-world fix (per Plan 03-02 introduced pattern). Confirm: re-targeting the rrweb probe to a fresh probe tab (instead of reading iana.org leftover) is the canonical fix; identify any pitfalls.

Researcher should NOT investigate:

  • rrweb v2 upgrade implementation path (deferred to v1.1/v2 per D-P3-03 + D-P4-01)
  • Full rrweb maskInputFn or data-sensitive masking (out of scope v1 per charter shift)
  • Programmatic SW-RAM measurement via chrome.devtools Memory API (deferred to v1.1/v2 per D-P3-04 + D-P4-01)
  • Any audit P1 #11/#14/#15 deep-dive (already-understood fixes; planner works directly from CONTEXT.md <specifics>)

Auto-cleanup

Delete this file when /gsd-plan-phase 4 successfully completes planner spawn (after honoring these preferences).