diff --git a/.planning/PROJECT.md b/.planning/PROJECT.md index 87de8e2..0aed306 100644 --- a/.planning/PROJECT.md +++ b/.planning/PROJECT.md @@ -94,12 +94,13 @@ nothing is validated until SPEC §10 acceptance passes.) - **Sensitive data**: `input[type=password]` and `[data-sensitive="true"]` MUST be masked in rrweb (via v2 `maskInputFn`) AND the event logger MUST drop password field values (CON-sensitive-data-masking). -- **Service Worker lifecycle**: MV3 SW unloads after ~30 s idle; a - `chrome.alarms` alarm fires every 20 s to keep it alive - (CON-service-worker-keepalive). -- **Tab capture binding**: `chrome.tabCapture` is tied to the active tab, - requires a user gesture on first invocation, and MUST re-attach on tab - activation/update events (CON-tab-capture-binding). +- **Service Worker lifecycle**: MV3 SW unloads after ~30 s idle; a long-lived + `chrome.runtime.connect` port from offscreen to SW emits a PING every 25 s + to keep the SW alive (CON-display-capture-binding, AMENDED from + CON-service-worker-keepalive). +- **Tab capture binding**: REMOVED (CON-tab-capture-binding RETIRED). The new + `getDisplayMedia` binding (CON-display-capture-binding) is screen/window- + scoped, not tab-scoped, and survives tab switches without re-attach. - **Manifest permissions**: `tabCapture`, `activeTab`, `downloads`, `scripting`, `storage`; `host_permissions: [""]` — exactly this set, no more, no less (CON-manifest-permissions). @@ -121,14 +122,14 @@ nothing is validated until SPEC §10 acceptance passes.) |----------|-----------|---------|--------| | **DEC-001**: Chrome Extension Manifest V3 | SPEC §2, §7 — required for `chrome.tabCapture`, `chrome.downloads`, `chrome.alarms`. | — Pending | locked (Phase 1) | | **DEC-002**: Service Worker as background coordinator | SPEC §2, §3, §8 — MV3 has no persistent background page; SW coordinates video buffer + archive packaging. | — Pending | locked (Phase 1) | -| **DEC-003**: Tab video via `chrome.tabCapture` (vp9 / 400 kbps / 2000 ms) | SPEC §2, §4.1, §7 — only API that captures active-tab video; codec/bitrate/timeslice locked. | — Pending | locked (Phase 1) | +| **DEC-003**: Active video via `getDisplayMedia()` (vp9 / 400 kbps / 2000 ms) | AMENDED by Phase 01: SPEC §2/§4.1/§7 originally specified `chrome.tabCapture`; Phase 01 swaps to `getDisplayMedia` invoked in the offscreen document with `chrome.offscreen.Reason.DISPLAY_MEDIA`. Codec/bitrate/timeslice binding unchanged. See `.planning/intel/decisions.md` DEC-003 Amendment. | — Pending | locked (Phase 1, post-Amendment) | | **DEC-004**: DOM capture via rrweb with `maskInputSelector` + 5 000-event cap | SPEC §2, §4.2 — rrweb is the only mature DOM-recording option; masking + cap are part of the privacy/memory contract. | — Pending | locked (Phase 1) | | **DEC-005**: Archive packaging via JSZip | SPEC §2, §3, §6 — only ZIP library bundled per SPEC. | — Pending | locked (Phase 1) | | **DEC-006**: File download via `chrome.downloads` | SPEC §2, §5, §7 — no server upload in Phase 1 (SPEC §9). | — Pending | locked (Phase 1) | | **DEC-007**: In-memory buffers only (no Phase 1 persistence) | SPEC §2, §4.1–§4.3 — rolling buffers in SW (video) and Content Script (rrweb + log). | — Pending | locked (Phase 1) | | **DEC-008**: Screenshot via `chrome.tabs.captureVisibleTab` | SPEC §4.4, §5 — captured at export time, not continuously. | — Pending | locked (Phase 1) | | **DEC-009**: WebM header chunk retained indefinitely | SPEC §4.1, §8 — WebM without its header is not playable. | — Pending | locked (Phase 1) | -| **DEC-010**: Service Worker keepalive via `chrome.alarms` (20 s) | SPEC §8 — MV3 SW unloads at ~30 s idle; 20 s alarm cadence keeps it alive. | — Pending | locked (Phase 1) | +| **DEC-010**: Service Worker keepalive via long-lived port | AMENDED by Phase 01: SPEC §8 originally specified `chrome.alarms` at 20 s; Phase 01 swaps to a `chrome.runtime.connect` port between offscreen and SW with 25 s ping cadence and 290 s pre-emptive reconnect. See `.planning/intel/decisions.md` DEC-010 Amendment. | — Pending | locked (Phase 1, post-Amendment) | | **DEC-011**: Manifest permissions set | SPEC §7 — `tabCapture`, `activeTab`, `downloads`, `scripting`, `storage` + `host_permissions: [""]`. | — Pending | locked (Phase 1) | | **DEC-012**: Vite + crxjs + TypeScript build toolchain | README §"Технический стек" — DOC-level only; SPEC does not prescribe. | — Pending | locked (Phase 1) — auto-overridable by future ADR |