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:
@@ -14,13 +14,14 @@ requirements_addressed:
|
||||
|
||||
must_haves:
|
||||
truths:
|
||||
- "`src/background/index.ts` no longer contains `addVideoChunkFromBlob`, `cleanupVideoBuffer`, `setupKeepalive`, `loadChunkFromIndexedDB`, `openIndexedDB`, or any `chrome.alarms` reference (buffer ownership moves to offscreen per D-16/D-19)"
|
||||
- "`src/background/index.ts` no longer calls `chrome.tabCapture.getMediaStreamId` (D-01 amendment)"
|
||||
- "`src/background/index.ts` no longer contains `addVideoChunkFromBlob`, `cleanupVideoBuffer`, `setupKeepalive`, `loadChunkFromIndexedDB`, `openIndexedDB`, or any `chrome.alarms` reference — buffer ownership moves to offscreen per D-16/D-19, and the alarms-driven keepalive is DELETED per D-18 (it never actually reset the SW idle timer; the long-lived port does)"
|
||||
- "`src/background/index.ts` no longer calls `chrome.tabCapture.getMediaStreamId` (D-01 amendment); video acquisition is now `getDisplayMedia` invoked from the offscreen module"
|
||||
- "`src/background/index.ts` no longer handles `VIDEO_CHUNK` or `VIDEO_CHUNK_SAVED` (deleted Message types in Plan 03)"
|
||||
- "SW has an `onConnect` listener that filters `port.name === 'video-keepalive'` and validates `port.sender?.id === chrome.runtime.id` (T-1-04 mitigation)"
|
||||
- "`src/background/index.ts` no longer contains any `chrome.tabs.onActivated` handler tied to the recording lifecycle (D-14: tab-switch re-attach is non-applicable under `getDisplayMedia`; D-15: operator tab-switching no longer interrupts recording, the buffer keeps filling regardless of active tab)"
|
||||
- "SW has an `onConnect` listener that filters `port.name === 'video-keepalive'` and validates `port.sender?.id === chrome.runtime.id` (T-1-04 mitigation; this is the SW-side counterparty of the long-lived port keepalive per D-17)"
|
||||
- "SW has an `onMessage` `OFFSCREEN_READY` case that resolves a pending readiness Promise (Pattern 4 SW side)"
|
||||
- "SW's `SAVE_ARCHIVE` and `GET_VIDEO_BUFFER` handlers fetch the buffer via the port (`REQUEST_BUFFER` → wait for `BUFFER`) instead of holding their own `videoBuffer` array"
|
||||
- "SW's `ensureOffscreen` uses `chrome.offscreen.Reason.DISPLAY_MEDIA` (not `USER_MEDIA`)"
|
||||
- "SW's `ensureOffscreen` uses `chrome.offscreen.Reason.DISPLAY_MEDIA` (not `USER_MEDIA`) per D-02"
|
||||
- "SW's `onInstalled` listener calls `indexedDB.deleteDatabase('VideoRecorderDB')` once as a cleanup pass (RESEARCH.md Runtime State Inventory)"
|
||||
- "`npx tsc --noEmit` exits 0"
|
||||
artifacts:
|
||||
@@ -49,9 +50,11 @@ ring-buffer state and helpers (now owned by offscreen per D-16), DELETE the
|
||||
chrome.alarms keepalive (D-18), DELETE the IndexedDB code path (D-19),
|
||||
DELETE the `chrome.tabCapture.getMediaStreamId` call (D-01 amendment),
|
||||
DELETE the `VIDEO_CHUNK` / `VIDEO_CHUNK_SAVED` message handlers (their
|
||||
message types were removed in Plan 03), and WIRE the SW-side `onConnect`
|
||||
handler against the `'video-keepalive'` port that Plan 04 opens from the
|
||||
offscreen.
|
||||
message types were removed in Plan 03), DELETE any `chrome.tabs.onActivated`
|
||||
re-attach plumbing (D-14: not applicable under the new capture API; D-15:
|
||||
operator tab switches no longer interrupt the recording), and WIRE the
|
||||
SW-side `onConnect` handler against the `'video-keepalive'` port that
|
||||
Plan 04 opens from the offscreen.
|
||||
|
||||
Purpose: REQ-video-ring-buffer's data flow on export is `popup →
|
||||
SAVE_ARCHIVE → SW → REQUEST_BUFFER (via port) → offscreen → BUFFER (via
|
||||
@@ -200,10 +203,12 @@ If `chrome.offscreen.Reason.DISPLAY_MEDIA` is NOT in the current `@types/chrome`
|
||||
|
||||
(13) Delete `openIndexedDB` function — currently lines 507-520.
|
||||
|
||||
(14) Verify no `chrome.tabs.onActivated` listener exists in the file (D-14 / D-15: tab-switch handling is non-applicable under the new capture API). Run `grep -n "chrome.tabs.onActivated" src/background/index.ts`. If the grep returns any hits, DELETE those lines (the entire listener callback block). If the grep returns nothing, log "D-14/D-15 satisfied: no tab-switch handler found in SW" in the task summary.
|
||||
|
||||
After ALL these deletions, run `npx tsc --noEmit`. It MUST exit 0. If `VideoChunk` is reported as unused after the deletes, that indicates a function that needs it was inadvertently lost; STOP and audit.
|
||||
</action>
|
||||
<verify>
|
||||
<automated>npx tsc --noEmit && [ $(grep -cE "addVideoChunkFromBlob|cleanupVideoBuffer|setupKeepalive|loadChunkFromIndexedDB|openIndexedDB|getMediaStreamId|chrome\.alarms" src/background/index.ts) -eq 0 ]</automated>
|
||||
<automated>npx tsc --noEmit && [ $(grep -cE "addVideoChunkFromBlob|cleanupVideoBuffer|setupKeepalive|loadChunkFromIndexedDB|openIndexedDB|getMediaStreamId|chrome\.alarms|chrome\.tabs\.onActivated" src/background/index.ts) -eq 0 ]</automated>
|
||||
</verify>
|
||||
<acceptance_criteria>
|
||||
- `npx tsc --noEmit` exits 0
|
||||
@@ -215,6 +220,7 @@ After ALL these deletions, run `npx tsc --noEmit`. It MUST exit 0. If `VideoChun
|
||||
- `grep -v '^#' src/background/index.ts | grep -c "getMediaStreamId"` returns 0
|
||||
- `grep -v '^#' src/background/index.ts | grep -c "VIDEO_CHUNK_SAVED"` returns 0
|
||||
- `grep -v '^#' src/background/index.ts | grep -c "chrome.alarms"` returns 0
|
||||
- `grep -v '^#' src/background/index.ts | grep -c "chrome.tabs.onActivated"` returns 0 (D-14/D-15 mitigation)
|
||||
- `grep -c "DISPLAY_MEDIA" src/background/index.ts` returns 1
|
||||
- `grep -c "as any" src/background/index.ts` returns 0 (CLAUDE.md rule)
|
||||
- File line count reduced from 536 to roughly 380-400 lines (allow ±40)
|
||||
@@ -435,7 +441,7 @@ Commit cadence: TWO commits.
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- `src/background/index.ts` carries no buffer state, no alarms, no IndexedDB plumbing, no `tabCapture` calls
|
||||
- `src/background/index.ts` carries no buffer state, no alarms, no IndexedDB plumbing, no `tabCapture` calls, no `chrome.tabs.onActivated` re-attach plumbing
|
||||
- SW has `onConnect` handler matching the offscreen's port (Plan 04 counterparty)
|
||||
- SW has `OFFSCREEN_READY` handshake handler resolving a readiness Promise
|
||||
- T-1-04 mitigations in place on BOTH onConnect (sender + port name) and onMessage (sender)
|
||||
|
||||
Reference in New Issue
Block a user