From 74ac8ac342d6e3724ae951e4b0f6412841c808c7 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 20 May 2026 22:42:13 +0200 Subject: [PATCH] docs(04): preserve plan-phase preferences captured pre-UI-SPEC exit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- .../.plan-phase-preferences.md | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .planning/phases/04-harden-clean-up-optional/.plan-phase-preferences.md diff --git a/.planning/phases/04-harden-clean-up-optional/.plan-phase-preferences.md b/.planning/phases/04-harden-clean-up-optional/.plan-phase-preferences.md new file mode 100644 index 0000000..e281b50 --- /dev/null +++ b/.planning/phases/04-harden-clean-up-optional/.plan-phase-preferences.md @@ -0,0 +1,75 @@ +--- +context: phase-4-plan-preferences +captured: 2026-05-20 +expires_when: /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 ``) + +## Auto-cleanup + +Delete this file when /gsd-plan-phase 4 successfully completes planner +spawn (after honoring these preferences).