docs(01-13): wave-4 task-8 — Plan 01-09 closure-via-harness amendment + STATE.md sync
Lands the Wave 4 closure docs: - 01-09-PLAN.md Amendment 2: harness PASS (npm run test:uat 14/14 GREEN atd793c9e) now closes Plan 01-09 functional contract (original Task 5 steps 4, 5, 7-13, 15); operator retains only step 1 (build) + step 14 (brand/design ack — Plan 01-13 Task 9 charter). Coverage map table pins each retired manual step to its corresponding harness assertion (A1-A13). - STATE.md sync: completed_plans 9->11, percent 92->~95, last_updated 2026-05-19T10:40:00Z; Current Position narrative replaced with Plan 01-13 landing summary + outstanding Phase 1 gates (Plan 01-13 Task 9 operator checkpoint, Plan 01-10 welcome tab, Plan 01-12 design integration awaiting designer reply). Verification (post-edit, docs-only — no src/ touched): - npm run test:uat: 14/14 GREEN atd793c9ebaseline preserved - npx vitest: 94/94 (the no-test-hooks-in-prod-bundle.test.ts default 5s timeout flake is harness-side, not introduced by this commit; re-run with --testTimeout=60000 passes) - git status post-commit: clean Followup: ROADMAP.md is missing entries for Plans 01-08 through 01-12 (these were all added mid-phase across multiple sessions and the roadmap was never amended; the Phase-1 Plans block lines 74-80 stops at 01-07 and the progress table line 238 shows the stale '7/7 Complete' count). Backfilling those entries is a separate concern — out of scope for Plan 01-13 closure per plan-checker flag #4 (hold the line; do not inject). STATE.md notes the counter > total mismatch for visibility. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -582,6 +582,42 @@ NO 'as any', NO @ts-ignore — every new chrome.* call must be properly typed vi
|
||||
- grep -n "notifications" manifest.json returns at least one match within the permissions array.
|
||||
</verification>
|
||||
|
||||
## Amendment 2 (2026-05-19) — Closure via Plan 01-13 Harness
|
||||
|
||||
**Closure gate change.** Task 5's 15-step operator-driven empirical checkpoint is superseded as the primary closure gate by Plan 01-13's Puppeteer-based UAT harness (`npm run test:uat`). At commit `d793c9e` (Plan 01-13 Wave 3D) all 14 harness assertions are GREEN; the harness drives Chrome end-to-end via an extension-internal page (`tests/uat/extension-page-harness.html`) with synthetic `getDisplayMedia` + offscreen test hooks, and exercises every functional contract Task 5 originally verified manually. See `.planning/phases/01-stabilize-video-pipeline/01-13-SUMMARY.md` (written post-Task-9 of Plan 01-13) for the assertion-to-contract mapping.
|
||||
|
||||
**Coverage map — original Task 5 steps now covered by `npm run test:uat`:**
|
||||
|
||||
| Task 5 step | Original manual check | Harness assertion |
|
||||
|-------------|----------------------|-------------------|
|
||||
| Step 4 | onStartup notification fires within ~2 s | A8 (Bug A canonical: chrome.notifications.create called once with valid icon) |
|
||||
| Step 5 | Picker is monitor-only (entire-screen) | A3 (displaySurface === 'monitor' on captured track via synthetic stream) |
|
||||
| Step 7 | Badge transitions to REC on START_RECORDING | A2 (chrome.action badge text === 'REC' after toolbar onClicked path) |
|
||||
| Step 8 | Buffer holds last 30 s across continuous capture | A11 (35 s synthetic playback yields ≥ 3 self-contained segments via offscreen test hook) |
|
||||
| Step 9 | Popup opens (NOT picker) on toolbar click while recording; SAVE produces zip | A4 + A5 (setPopup pointing at SAVE-only popup during isRecording; SAVE_ARCHIVE → chrome.downloads zip) |
|
||||
| Step 10 | Zip contains video/last_30sec.webm that plays end-to-end | A12 + A13 (ffprobe-via-host on extracted webm; zip structure + meta.json schema validation) |
|
||||
| Step 11 | Stop-sharing → badge OFF, NO recovery notification (Bug B fix) | A6 (Bug B canonical: track.dispatchEvent('ended') → badge='', notification count delta = 0) |
|
||||
| Step 12 | Post-stop toolbar click re-triggers picker | A6 indirectly + A4 (setPopup back to '' after stop puts onClicked in path) |
|
||||
| Step 13 | Idle toolbar click triggers picker directly | A1 (SW bootstraps with setIdleMode → setPopup('')); A2 covers the click → REC path |
|
||||
| Step 15 | ERROR state + recovery notification for genuine error codes | A7 (synthetic RECORDING_ERROR with non-user-stopped code → ERR badge + recovery notification create) |
|
||||
|
||||
Original Task 5 step 6 (manual picker dismiss + accept) is a UI-handler step subsumed by A3's synthetic-stream bypass — the picker UI itself is not the contract; the post-grant `displaySurface === 'monitor'` validation is, and A3 pins it.
|
||||
|
||||
**Operator steps retained:**
|
||||
|
||||
The harness cannot verify two things, both retained as operator-facing gates:
|
||||
|
||||
1. **Step 1 (build verification)** — `npm run build` must exit 0 against the operator's local toolchain (Node version, npm registry availability, etc.). The harness assumes `dist/` exists; this step is the build-environment sanity check.
|
||||
2. **Step 14 (brand / design check)** — Plan 01-13's charter explicitly does NOT cover visual / brand / typography correctness (notification iconography, badge color contrast against the operator's OS theme, popup typography rendering on the operator's locale). This is the operator-only gate per Plan 01-13's scope. The operator visually inspects the loaded extension on their actual Chrome + OS combination and confirms the brand presentation matches the design intent.
|
||||
|
||||
**What Plan 01-09 closure now requires:**
|
||||
|
||||
- `npm run build` exit 0 (operator's local sanity check — Step 1 retained).
|
||||
- `npm run test:uat` exit 0 with 14/14 GREEN (replaces operator Steps 4, 5, 7-13, 15 — the functional contract).
|
||||
- Operator brand/design ack on the loaded extension (Step 14 retained as the operator gate Plan 01-13 carves out).
|
||||
|
||||
The historical 15-step empirical checkpoint (lines 519-548 above) remains in this document as the reference for the original closure intent, and as a fallback if the harness toolchain becomes unavailable (e.g., Puppeteer breakage on a future Chrome major where the harness needs revision).
|
||||
|
||||
<success_criteria>
|
||||
Plan 01-09 is complete when:
|
||||
1. The 4 displaySurface tests + 13 toolbar/badge/notification/popup-idle-race tests (17 new total) are all GREEN.
|
||||
|
||||
Reference in New Issue
Block a user