revert(01): reopen Phase 1 — D-13 multi-EBML-concat is unplayable

REQ-video-ring-buffer flipped from [x] back to [ ]. ROADMAP.md Phase 1
row reverted from [x] Closed 2026-05-15 to [ ] reopened 2026-05-16.
STATE.md status flipped phase_complete → phase_reopened with full
historical narrative preserved.

Root cause (confirmed at byte level by gsd-debugger 2026-05-16):
D-13's concat-of-self-contained-WebM-segments architecture produces a
3-EBML-header WebM that standards-compliant Matroska parsers
(mpv, ffmpeg, Chrome HTMLMediaElement) play only as the first segment
(~9.94 s) and silently drop the remaining 2 segments. Confirmed via
operator mpv drag-drop test of BOTH the canonical 2026-05-15 closure
fixture and the 2026-05-16 UAT-produced fixture — both exhibit the
same broken playback.

The 2026-05-15 "operator-confirmed clean Chrome playback" assessment
was insufficient: it verified the file plays without freezing but did
not measure total duration. Phase 1's primary deliverable
(REQ-video-ring-buffer / SPEC §10 #7) is therefore NOT satisfied.

Fix path chosen by user: ts-ebml (parse) + webm-muxer (write) to
replace mergeVideoSegments file-concat with real single-EBML remux.
Will land as Plan 01-08 via fresh /gsd-plan-phase ceremony.

RED test landed in tests/offscreen/webm-playback.test.ts (2 new
assertions on container-format-duration + ffmpeg-full-decode-duration).
2 failures, 53 baseline tests still GREEN.

Option C port-lifecycle refactor (debug session
empty-archive-port-race, commits 674c415..f0871c0) DID land cleanly
and is retained — that fix was orthogonal and correctly resolved the
silent-empty-archive symptom that previously masked this deeper bug.

Debug session: .planning/debug/d13-multi-ebml-concat-unplayable.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-16 19:47:47 +02:00
parent f1026954fc
commit bc310d98cf
5 changed files with 479 additions and 55 deletions

View File

@@ -16,7 +16,7 @@ Requirements for the Phase 1 SPEC. Each maps to one phase in ROADMAP.md.
### Video
- [x] **REQ-video-ring-buffer**: The extension maintains an in-memory ring
- [ ] **REQ-video-ring-buffer**: The extension maintains an in-memory ring
buffer containing the most recent 30 seconds of captured video. AMENDED in
Phase 01: video is acquired via `navigator.mediaDevices.getDisplayMedia()`
invoked from the offscreen document (with `chrome.offscreen.Reason.DISPLAY_MEDIA`),
@@ -35,9 +35,19 @@ Requirements for the Phase 1 SPEC. Each maps to one phase in ROADMAP.md.
CON-video-window, CON-video-codec, CON-display-capture-binding (replaces
RETIRED CON-tab-capture-binding). CON-webm-header-retention RETIRED in
favor of D-13 per-segment header isolation.
- SPEC §10 acceptance criteria: #2, #3, #7 — all green 2026-05-15
(D-12 ffprobe gate + operator-confirmed Chrome playback + ffmpeg dry-run
exit 0 with zero decoder errors against `tests/fixtures/last_30sec.webm`).
- SPEC §10 acceptance criteria: #2, #3 green 2026-05-15 (D-12 ffprobe
gate). #7 (last_30sec.webm plays back in a browser) — **REOPENED
2026-05-16**: D-13's concat-of-self-contained-segments architecture
produces a multi-EBML-header file that standards-compliant Matroska
parsers (mpv, ffmpeg, Chrome's HTMLMediaElement) play only as the
first segment (~9.94 s) and silently drop segments 2 and 3. The
2026-05-15 "operator-confirmed clean Chrome playback" assessment was
insufficient — it checked playback ran without freezing but did not
measure total duration. Plan 01-08 (WebM remux via ts-ebml +
webm-muxer) will replace `mergeVideoSegments`'s file-concat with a
real single-EBML-headered remux, restoring SPEC §10 #7. See
`.planning/debug/d13-multi-ebml-concat-unplayable.md` for the
byte-level root-cause evidence.
### DOM Capture
@@ -193,7 +203,7 @@ Which phase covers which requirement. See ROADMAP.md for phase details.
| Requirement | Phase | Status |
|-------------|-------|--------|
| REQ-video-ring-buffer | Phase 1 | Complete |
| REQ-video-ring-buffer | Phase 1 | In progress (reopened 2026-05-16: SPEC §10 #7 fails; Plan 01-08 WebM remux pending) |
| REQ-rrweb-dom-buffer | Phase 2 | Pending |
| REQ-user-event-log | Phase 2 | Pending |
| REQ-password-confidentiality | Phase 2 | Pending |