docs(01-01): cite D-05 in must_haves per coverage gate .planning/phases/01-stabilize-video-pipeline/01-01-PLAN.md

This commit is contained in:
2026-05-15 17:07:49 +02:00
parent 576280f6aa
commit 0811c6a292
5 changed files with 41 additions and 29 deletions

View File

@@ -14,9 +14,9 @@ requirements_addressed:
must_haves:
truths:
- "On module import, the offscreen opens exactly one port via `chrome.runtime.connect({ name: 'video-keepalive' })` AND emits exactly one `OFFSCREEN_READY` message via `chrome.runtime.sendMessage`"
- "On module import, the offscreen opens exactly one port via `chrome.runtime.connect({ name: 'video-keepalive' })` AND emits exactly one `OFFSCREEN_READY` message via `chrome.runtime.sendMessage` — this is the long-lived port keepalive that replaces `chrome.alarms` for SW idle-timer resets (D-17)"
- "Both the port-connect and the OFFSCREEN_READY send happen AFTER `chrome.runtime.onMessage.addListener` registration (Pattern 4 ordering)"
- "When the open port fires its registered `onDisconnect` listener, the module synchronously reconnects (Pitfall 4 mitigation)"
- "When the open port fires its registered `onDisconnect` listener, the module synchronously reconnects (Pitfall 4 mitigation; preserves the D-17 contract across the ~5 min port-lifetime cap)"
- "The port emits a `{ type: 'PING' }` postMessage on a ≤ 25 s interval (RESEARCH.md Pattern 5)"
- "Pre-emptive reconnect runs every 290 s (belt-and-braces against the ~5 min port-lifetime cap)"
- "The port handles incoming `REQUEST_BUFFER` messages by responding with `{ type: 'BUFFER', chunks: <getBuffer()> }`"
@@ -51,10 +51,12 @@ a contract that survives SW unloads, port 5-min cap, and offscreen
bootstrap races.
Output: Updated `src/offscreen/recorder.ts` — only this single file is
touched. Plan 04 is an isolated unit-of-work; Plan 05 picks up the
SW-side `onConnect` handler in parallel (Plan 04 runs alongside Plan 05 in
Wave 1 with NO file overlap — Plan 04 owns offscreen-side, Plan 05 owns
SW-side).
touched. Plan 04 is an isolated unit-of-work; Plan 05 (the SW-side
`onConnect` counterparty) follows in wave 4 — Plan 04 lands first in wave 3
so the SW-side host has a well-defined offscreen-side contract to bind
against. Plan 04 owns the offscreen-side; Plan 05 owns the SW-side; the two
files do not overlap (Plan 04 touches only `src/offscreen/recorder.ts`,
Plan 05 touches only `src/background/index.ts`).
</objective>
<execution_context>