450f43ebf0
docs(phase-03): update tracking after wave 3 — 03-03 GREEN (A31 §10 #8 PARTIAL; UAT 32/32) .planning/ROADMAP.md
2026-05-20 20:49:25 +02:00
de398347e0
docs(phase-03): update tracking after wave 2 — 03-02 GREEN (A30 event-log; UAT 31/31) .planning/ROADMAP.md
2026-05-20 20:00:37 +02:00
72bbb8044b
docs(phase-03): update tracking after wave 1 — 03-01 GREEN (A29 rrweb DOM verification; UAT 30/30) .planning/ROADMAP.md
2026-05-20 19:21:42 +02:00
b3bfbf4a8d
feat(03): plans 01-05 — Phase 3 SPEC §10 smoke + DOM/event-log verification
...
5 plans across 5 waves (Wave 2 sequential per RESEARCH Pitfall 6 file overlap):
- 03-01 Wave 1: rrweb DOM verification harness extension (A29; REQ-rrweb-dom-buffer; §10 #4 )
- 03-02 Wave 2: event-log verification harness extension (A30; REQ-user-event-log; §10 #5 )
- 03-03 Wave 3: §10 #8 password-filter PARTIAL verification (A31; D-P3-02 charter)
- 03-04 Wave 4: §10 #9 RAM ceiling best-effort + Page.metrics scaffolding (A32; D-P3-04)
- 03-05 Wave 5: §10 sweep VERIFICATION.md + REQUIREMENTS/ROADMAP/STATE marker flips
(REQ-install-clean + REQ-rrweb-dom-buffer + REQ-user-event-log)
Each plan has:
- frontmatter (wave + depends_on + files_modified + autonomous + requirements + tags + must_haves)
- tasks with mandatory <read_first> + <acceptance_criteria> + concrete <action>
- <threat_model> block per security gate
- Validation map row(s) added to 03-VALIDATION.md (10 tasks total)
Expected UAT growth: 29/29 → 33/33 GREEN (A29-A32 + 03-05 docs).
Expected vitest baseline preserved: 171/171.
Expected Tier-1 FORBIDDEN_HOOK_STRINGS: 12 (A29+ ride production surfaces only).
ROADMAP.md Phase 3 entry replaces "Plans: TBD" with full 5-plan list.
VALIDATION.md status: planner_filled (nyquist_compliant: true; wave_0_complete: true).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 19:01:21 +02:00
df692b2d70
docs(phase-02): update tracking after wave 3 — 02-04 GREEN (UAT 29/29 + bundle gates PASS; checkpoint closed via harness coverage) .planning/ROADMAP.md
2026-05-20 17:33:03 +02:00
3821e5c402
docs(phase-02): update tracking after wave 2 part 2 — 02-03 GREEN (D-P2-02 + D-P2-03 close P1 #10 ) .planning/ROADMAP.md
2026-05-20 16:14:06 +02:00
d3aa567a54
docs(phase-02): update tracking after wave 2 part 1 — 02-02 GREEN (D-P2-01 closes P0-6) .planning/ROADMAP.md
2026-05-20 15:58:54 +02:00
ed64d872be
docs(phase-02): update tracking after wave 1 — 02-01 RED gate complete .planning/ROADMAP.md
2026-05-20 15:39:02 +02:00
0608b22427
feat(02): plans 01-04 — Phase 2 export pipeline closure (Blob URL + meta.urls + schema + harness)
...
Wave structure (4 plans, 3 waves):
- 02-01 (Wave 1 RED): 15 RED tests pinning D-P2-01 (blob: URL contract), D-P2-02
(meta.urls schema + dedup + filter), D-P2-03 (strict 8-field validation +
schemaVersion '2' cutover marker).
- 02-02 (Wave 2): Offscreen-minted Blob URL pipeline — extends PortMessageType
with CREATE/REVOKE messages; SW downloadArchive rewrite (data: → blob: via
base64-on-wire to offscreen + URL.createObjectURL + chrome.downloads.onChanged
revoke lifecycle). Closes audit P0-6; unblocks >2 MB archives.
- 02-03 (Wave 2): meta.urls schema migration + tab-url-tracker module
(chrome.tabs.onActivated + onUpdated → deduplicated, filtered, first-seen-
ordered string[]); SessionMetadata 7→8 fields with schemaVersion + urls;
REQUIREMENTS.md REQ-meta-json-schema amendment. Closes P1 #10 .
- 02-04 (Wave 3): UAT harness A24+A25+A26+A27 — blob: URL prefix, <5s SAVE→zip
latency, meta.json 8-field shape, multi-tab dedup; pre-checkpoint bundle gates
per saved memory + operator empirical UAT cycle 1. Tier-1 FORBIDDEN_HOOK_STRINGS
inventory stays at 12 (no new hook symbols — chrome.* monkey-patches + JSZip
+ production APIs only).
Locked decisions honored (per 02-CONTEXT.md):
- D-P2-01: offscreen-minted Blob URL via existing keepalivePort + base64 wire
format (reuses D-12 precedent at src/shared/binary.ts).
- D-P2-02: meta.json url:string → urls:string[]; URL filter per CONTEXT.md
<specifics> (include https://, chrome-extension://; exclude chrome://, about:,
devtools://, file://); dedup + first-seen ordering.
- D-P2-03: full scope; 8-field strict schema validation with schemaVersion='2'
as the 8th field (planner-resolved tentative pick; revisable by plan-checker).
Architectural constraints preserved:
- Always-on charter (Plan 01-09 Amendment 3): no finally-block in saveArchive;
no clearTabUrlsSeen on SAVE.
- Tier-1 FORBIDDEN_HOOK_STRINGS = 12 (no new test-hook symbols).
- Never await import(...) in src/background/index.ts (Plan 01-11 SUMMARY).
- Pre-checkpoint bundle gates per feedback-pre-checkpoint-bundle-gates.md (run
in 02-04 Task 4 before operator surface).
Plan validation: gsd-sdk frontmatter.validate + verify.plan-structure GREEN
for all 4 plans.
ROADMAP updated: Phase 2 Plans list + Goal/Success Criteria block annotated
with D-P2-02/D-P2-03 amendments + 5th success criterion (Blob URL + revoke
lifecycle for >2 MB archives); Progress table 0/TBD → 0/4.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 14:03:14 +02:00
6dbed91efd
docs(roadmap): re-phase milestone — remove Phase 2 (DOM/event-capture privacy)
...
Per operator charter shift 2026-05-20: "we don't care about privacy hardening.
At least here." Archive flow is internal-only (no external transmission),
which reframes the password-masking P0-5 defect from privacy-regulation
gravity to operator-hygiene polish.
Re-phasing applied across 4 planning artifacts:
ROADMAP.md:
- Original Phase 2 ("Stabilize DOM + event-capture privacy") REMOVED entirely
(summary list + Phase Details section + Progress table row).
- DOM + event-log VERIFICATION (REQ-rrweb-dom-buffer + REQ-user-event-log)
ABSORBED by new Phase 3 (SPEC §10 smoke verification).
- Phase numbering: old 3 → new 2 (export), old 4 → new 3 (smoke), old 5 → new 4
(optional harden). Dependency chains updated accordingly.
- Overview blurb + journey narrative + success criteria refreshed.
- Phase 3 (smoke) explicitly NOT-in-scope: P0-5 password masking dropped.
REQUIREMENTS.md traceability:
- REQ-rrweb-dom-buffer: Phase 2 → Phase 3 (verification scope; UAT harness
A24+ extension planned).
- REQ-user-event-log: Phase 2 → Phase 3 (same context).
- REQ-password-confidentiality: Phase 2 → Out of Scope (v1) — DEFERRED per
charter shift.
- REQ-popup-ui, REQ-screenshot-on-export, REQ-archive-layout,
REQ-meta-json-schema, REQ-archive-export-latency: Phase 3 → Phase 2
(renumbered; substantively shipped via Plans 01-08 + 01-09 + 01-12;
residual gaps in Phase 2).
- Coverage: 10 mapped + 1 out-of-scope (was 11 mapped).
PROJECT.md:
- CON-sensitive-data-masking: DEFERRED 2026-05-20 (preserves audit trail
via strikethrough; rationale documented).
- DEC-004 amendment: rrweb 5000-event cap retained; masking deferred. Cites
rrweb 2.0.0-alpha.4 maskInputSelector→maskInputFn API change.
STATE.md:
- frontmatter total_phases: 5 → 4.
- stopped_at narrative captures the re-phasing event.
CLI bug note: this re-phasing was attempted via `gsd-sdk query phase.remove 2`
+ canonical `/gsd-remove-phase 2` Skill invocation, but BOTH paths produced
corrupted output (cascading rename via reverse-iteration loop at
phase.cjs:670-679 collapsed all subsequent phases to "Phase 2", plus a
mysterious "2026"→"2002" date corruption). Recovery applied as manual edits
in this commit. CLI bug logged as upstream GSD-framework concern; not a
Mokosh-side issue.
Plan: next is `/gsd-discuss-phase 2` (new Phase 2 = export pipeline; narrowed
scope per re-phasing — ~2-3 plans expected since Plans 01-08 + 01-09 + 01-10
+ 01-12 already shipped most surface).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 13:25:11 +02:00
586836f8a0
docs(01): VERIFICATION + Phase 1 closure markers — goal-backward audit GREEN
...
gsd-verifier goal-backward audit (2026-05-20) returned GREEN verdict on
Phase 1 (Stabilize Video Pipeline + whole-desktop capture + as-automatic-
as-platform-allows recording start):
- 17/17 must-haves verified: 11 REQs/charters + 6 cross-cutting gates
- 14/14 plans complete (01-01..01-09 + 01-11 spike-pivot + 01-12 + 01-13
+ 01-14 + 01-10)
- 5 operator empirical acks: Plan 01-07 (Chrome playback 2026-05-15) +
Plan 01-13 (harness 2026-05-19) + Plan 01-12 (brand-fit 2026-05-20) +
Plan 01-10 cycle-2 ("All good" 2026-05-20) + Plan 01-10 brand-rename
follow-up (2026-05-20)
- Test gates: vitest 153/153 GREEN; UAT harness 24/24 GREEN; Tier-1 grep
gate 12 FORBIDDEN_HOOK_STRINGS; pre-checkpoint bundle gates PASS
- 7 P0 audit defects: 6 closed in-Phase-1-scope; P0 #6 (data-sensitive
masking) properly deferred to Phase 2
Marker flips landed:
- STATE.md status reflects Phase 1 COMPLETE; completed_phases 0 → 1
- ROADMAP.md Phase 1 row [ ] → [x] with closure-arc summary
- REQUIREMENTS.md REQ-video-ring-buffer In-progress → Complete 2026-05-20
- VERIFICATION.md committed (orchestrator-bundle pattern per verifier
protocol)
Forward-looking deferred (NOT gaps):
- Phase 2: REQ-rrweb-dom-buffer + REQ-user-event-log +
REQ-password-confidentiality (audit P0 #6 )
- Phase 5 hardening: getDisplayMedia cursor visibility; setimmediate
polyfill new Function pre-existing; tabs permission gap; dark-surface
logo contrast; 2 ffprobe/ffmpeg test flakes
Phase 2 (Stabilize DOM + event-capture privacy) kickoff pending.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 12:31:36 +02:00
d1ef77a7d1
docs(01-10): state + roadmap + requirements — Plan 01-10 closure
...
State markers sync after Plan 01-10 closure:
STATE.md:
- progress.completed_plans: 13 → 14
- progress.percent: 93 → 100 (all 14 Phase 1 functional plans complete)
- status: executing (Phase 1 final-closure marker flip pending)
- stopped_at + Last session timestamps refreshed
- Current Position bumped to 14/14 plans complete
- Outstanding Phase 1 gates: Plan 01-10 row marked CLOSED;
Phase 1 final-closure marker flip listed as remaining work
- Plan 01-10 closure section added mirroring existing 01-12/01-13/01-14
patterns: 4 wave commits + 5 inter-cycle debug commits + cycle-2 ack
- Performance Metrics: Phase 01 P10 row added (5h, 5 tasks, 14 files)
- Decisions: 3 Plan 01-10 architectural decisions added
(first-install activation; D-16-toolbar charter preservation;
three-pipeline DOM population pattern; startVideoCapture D-01
cleanup gap closure)
ROADMAP.md:
- Plan 01-10 row flipped to [x] with full closure annotations
(commit chain + harness counts + operator ack date)
- Plan 01-09 row annotated with closure-cycle follow-up debug
commits (a2dfc8c startVideoCapture no-tab + 4bba679 notifStartup
text split — both landed during Plan 01-10 closure cycle)
- Phase 1 plans-count narrative updated: "all 14 functional plans
complete; Phase 1 final-closure marker flip pending"
- Progress table: Phase 1 plans complete 13/14 → 14/14;
status row updated to "Final-closure marker flip pending"
REQUIREMENTS.md:
- Footer timestamp + closure note updated: Plan 01-10 introduced
no new functional REQs (it consumed REQ-video-ring-buffer
already-Complete via Plan 01-07) by adding the first-install
operator-facing activation surface that complements the always-on
capture pipeline.
- Phase 1 final functional plan delivered; final-closure marker
flip pending (REQUIREMENTS / ROADMAP / STATE markers + optional
/gsd-verify-work 1).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 12:10:56 +02:00
66e6f503a4
docs(01-12): state + roadmap + requirements — Plan 01-12 closure
...
Plan 01-12 closure documentation sync per the plan's Wave 7 Task 1
spec. Three docs land together as one atomic closure commit per the
Plan 01-13 + 01-14 closure cadence convention.
STATE.md changes:
- status: verifying → executing (Plan 01-10 welcome tab still pending)
- stopped_at: Plan 01-14 → Plan 01-12 closed via Wave 7 brand-fit
ack 2026-05-20 'all good'; Plan 01-10 remains as final Phase 1
functional plan
- last_updated + last_activity: 2026-05-19 → 2026-05-20
- progress.completed_plans: 12 → 13 (13 plans: 01-01..01-09 + 01-11
spike + 01-12 + 01-13 + 01-14; Plan 01-10 pending)
- progress.percent: 86 → 93
- "Plan 01-13 closure" header annotated: brand/design ack subsequently
closed via Plan 01-12 Wave 7 2026-05-20
- New "Plan 01-12 closure (2026-05-20)" section: 7-wave execution arc
with all 10 commit hashes (3fe018b plan-baseline-revision → 34a9ce1
Wave 0 → f86fd60 + abab6e1 Wave 1 → 7732a30 Wave 2 → 110cebc Wave 3
→ 468f16d Wave 4 → e8d2881 Wave 5 → b909c37 Wave 6 + 865d394
pre-checkpoint + f319c7d SUMMARY); R2 Lora substitution; 16 i18n
keys; branded icons; BADGE_REC_COLOR #b2543d; chrome.i18n fallback;
A18-A22 harness; pre-checkpoint bundle gates per
feedback-pre-checkpoint-bundle-gates.md; setimmediate polyfill
discovery logged to deferred-items.md (Phase 5 hardening); operator
brand-fit ack; Plan 01-13 Task 9 functional closure
- "Outstanding Phase 1 gates" updated: Plan 01-13 Task 9 + Plan 01-12
CLOSED; only Plan 01-10 remains
- Performance Metrics table: Plan 01-12 entry appended (~10h
cumulative; 10 tasks; ~50+ files)
- Decisions section: 2 new entries for Plan 01-12 design integration
+ Plan 01-13 Task 9 closure linkage
- Session Continuity: last/prior session updated to 2026-05-20 /
2026-05-19
ROADMAP.md changes:
- Phase 1 Plans list: 01-12-PLAN.md entry flipped from [ ] to [x]
with full closure annotation (R2 Lora self-host, tokens.css
canonical, 16 i18n keys across en+ru, branded Loom icons, manifest
i18n, BADGE_REC_COLOR madder #b2543d, chrome.i18n fallback,
harness A18-A22, operator brand-fit ack 2026-05-20 'all good')
- Phase 1 plan count: 13 → 14 plans (01-01 through 01-14)
- Progress table Phase 1 row: 7/7 Complete → 13/14 Executing with
closure-status disambiguation (functional via Plan 01-13;
design/brand via Plan 01-12; Plan 01-10 welcome tab remains)
REQUIREMENTS.md changes:
- REQ-install-clean: [ ] Pending → [x] Complete (2026-05-20)
with annotation: fresh build clean; zero remote-font CSP errors;
branded icons; en+ru manifest:name resolution; operator brand-fit
ack
- REQ-manifest-permissions: [ ] Pending → [x] Complete (2026-05-20)
with annotation: manifest:name + :description +
:action.default_title migrated to __MSG_*__ + default_locale='en';
manifest validation PASS; en↔ru parity; permissions DEC-011
baseline UNCHANGED
- Traceability table: both requirements moved from Phase 3/4 Pending
to "Phase 1 closure via Plan 01-12" Complete
- Footer: last-updated 2026-05-15 → 2026-05-20 with annotation
noting the requirements flipped at Plan 01-12 closure
No code changes; pure documentation closure sync.
Closure commit hashes:
- SUMMARY: f319c7d (.planning/phases/01-stabilize-video-pipeline/01-12-SUMMARY.md)
- State sync: this commit (.planning/STATE.md + .planning/ROADMAP.md
+ .planning/REQUIREMENTS.md)
Phase 1 status post-closure:
- Functional contract: CLOSED via Plan 01-13 harness PASS (2026-05-19)
- Design/brand contract: CLOSED via Plan 01-12 brand-fit ack
(2026-05-20)
- Remaining: Plan 01-10 (welcome tab) — operator-facing onboarding
surface; canonical src/shared/tokens.css from Plan 01-12 now
available for swap-in
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 08:33:52 +02:00
9792c0f6c3
docs(01-14): state + roadmap + requirements — Plan 01-14 closure
...
- STATE.md: advance plan counter, update progress (12/14 = 86%), record
metric (Plan 01-14: 49m, 1 task, 7 files), add decision, record session.
- ROADMAP.md: update phase-01 progress table (plan_count=14, summary_count=12).
- REQUIREMENTS.md: mark REQ-video-ring-buffer complete (final closure for
the Phase-01 video-pipeline charter).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-19 21:41:26 +02:00
41c1f7e82f
feat(01-14): plan — monitorTypeSurfaces picker enhancement (canonical post-closure scope)
...
Plan 01-14 ships W3C Screen Capture monitorTypeSurfaces: 'include' (Chrome
119+) on the offscreen getDisplayMedia call, plus an A23 harness regression
assertion that verifies the constraint reaches the call site via the
existing offscreen-hooks bridge.
Scope: 1 source line + A23 wiring + Tier-1 grep gate inventory update
(lockstep extension of unit-gate + UAT A0 FORBIDDEN_HOOK_STRINGS).
Autonomous, single executor; no operator empirical checkpoint (UAT 16/16
harness coverage suffices per feedback-pre-checkpoint-bundle-gates.md).
Canonical sources:
- Plan 01-10 RESEARCH section 5 ('monitorTypeSurfaces: include' recommendation)
- Plan 01-10 RESEARCH section Pitfall-5 ('Misinterpreting displaySurface
as a hard constraint' — monitorTypeSurfaces is the picker-UI complement
to D-15's post-grant validation)
- W3C Screen Capture spec section 6.1 DisplayMediaStreamOptions
- developer.chrome.com/docs/web-platform/screen-sharing-controls
Decisions honored:
- D-01 (whole-desktop only via getDisplayMedia; reject window/tab) — the
new constraint is the picker-UI realization of D-01's intent.
- D-15 (post-grant displaySurface validation) — UNCHANGED; remains the
enforcement (this plan is belt-and-suspenders at the picker UI level).
Ceremony note: this plan replaces the prior AMENDMENT-A.md improvisation
path retired per 01-11-SUMMARY Architectural Notes. Canonical GSD ceremony
(plan -> checker -> executor -> SUMMARY).
Validations:
- gsd-sdk frontmatter.validate -> valid: true (8/8 required fields).
- gsd-sdk verify.plan-structure -> valid: true (1 task; hasFiles/hasAction
/hasVerify/hasDone all true).
- ROADMAP.md Phase 1 plans list extended with 01-14 entry.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-19 20:34:17 +02:00
8d1c8fb0cc
docs(01-12): create Plan 01-12 (Design Integration; R2 Lora unblocks; 7 waves)
...
Final designer reply received 2026-05-19 unblocks Plan 01-12: R2
substitution — replace Newsreader with Lora (OFL, Cyreal foundry, full
Cyrillic-Latin parity, variable wght 400-700). All 9 brand decisions
now resolved; R2 displaces Newsreader from `--mks-font-display`.
Plan structure: 7 waves, 10 tasks.
- Wave 0 (TDD scaffolds): 6 RED unit tests — tokens-adopted,
fonts-present, icons-present, no-remote-fonts, manifest-i18n,
locale-parity. Each RED until its corresponding artifact wave lands.
- Wave 1: Self-host OFL font bundle (Lora variable normal + italic,
Plex Sans ×4, Plex Mono ×2) at src/shared/fonts/ via pyftsubset
(Latin + Cyrillic basic subset); land src/shared/tokens.css canonical
(Google Fonts @import → 7 local @font-face rules; Newsreader → Lora
per R2; .mks-word class added per RESEARCH §8 + lockup SVG line 21).
- Wave 2: Rasterize Loom mark to icons/icon{16,48,128}.png via
rsvg-convert; overwrite Bug A placeholders; 8-bit RGBA at all sizes.
- Wave 3: Land _locales/{en,ru}/messages.json (12 keys: 8 Brief §02
operator strings + 4 supporting keys); manifest.json → __MSG_extName__
+ __MSG_extDesc__ + default_locale 'en' + action.default_title.
extName='Mokosh — Session Capture' per D-07 user override; extDesc per
D-08 brand-decisions-v1.md wording.
- Wave 4: src/popup/ + src/background/ adopt tokens.css (loom palette)
+ chrome.i18n.getMessage at every operator-facing copy site; replace
hex literals with var(--mks-*) references; BADGE_REC_COLOR madder
'#b2543d' (= --mks-madder-600 per D-04 + RESEARCH §10 Open Q A7).
- Wave 5: Welcome page conditional migration (if 01-10 landed, swap
welcome-tokens.css → @import canonical tokens.css; migrate copy.ts
shim to chrome.i18n.getMessage fallback); add __VITE_DEV__ define
per RESEARCH §12 D-09 spirit; scripts/README.md smoke-isolation note.
- Wave 6: UAT harness A18-A22 (font reachability via document.styleSheets
walk + fetch + byteLength; icon-not-placeholder via fingerprint diff;
manifest:name === 'Mokosh — Session Capture'; --mks-font-display
resolves to Lora via getComputedStyle; welcome tokens loaded
conditional on 01-10). Tier-1 forbidden-strings UNCHANGED at 10.
- Wave 7: Operator empirical brand-fit checkpoint (last Phase 1 gate);
SUMMARY + STATE.md + ROADMAP.md sync.
ROADMAP.md Phase 1 plan list extended from 7 → 13 entries (gap noted in
01-13 SUMMARY's known-limitations now closed).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-19 14:59:59 +02:00
bc310d98cf
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 >
2026-05-16 19:47:47 +02:00
7df72aaa60
feat(01-07): close Phase 1 — REQ-video-ring-buffer complete, SPEC §10 #7 satisfied
...
Phase 1 closure 2026-05-15 — both acceptance gates green:
- D-12 ffprobe structural gate: `ffprobe -v error -f matroska -i
tests/fixtures/last_30sec.webm` exit 0 (cd61cbc )
- A3 empirical-playback gate: operator confirmed clean end-to-end Chrome
playback (no ~1 s freeze); ffmpeg `-v warning -i fixture -f null -`
exit 0 with zero decoder errors (only expected muxer DTS-monotonicity
warnings at segment join boundaries — documented D-13 trade-off for
multi-EBML-header WebM concat; Chrome's MSE pipeline handles this
natively, satisfying SPEC §10 #7 )
Changes:
- .planning/REQUIREMENTS.md
* REQ-video-ring-buffer checkbox [ ] -> [x]; description AMENDED to
document the D-13 restart-segments lifecycle replacing D-09..D-11;
SPEC §10 #2 , #3 , #7 noted as green 2026-05-15
* Traceability table row: REQ-video-ring-buffer | Phase 1 | Complete
(was Pending)
- .planning/ROADMAP.md
* Phase 1 list-item flipped [ ] -> [x] with closure date + summary
* Phase 1 Success Criteria 1, 2, 3 individually checked off; criterion 2
re-worded to reflect D-13 segment-cycling (replacing the original
single-continuous-recorder wording from D-09..D-11)
* Plan list: 01-07-PLAN.md flipped [ ] -> [x] with closure note
* Progress table row: 7/7 Complete 2026-05-15 (was 6/7 In Progress)
* Phase 5 P1/P2 list: appended `getDisplayMedia` cursor visibility
constraint (`video: { cursor: 'always' }`) — surfaced as user
observation during Phase 1 smoke 2026-05-15
- .planning/STATE.md
* Frontmatter: status -> phase_complete, completed_phases 0 -> 1,
completed_plans 6 -> 7, percent 86 -> 100; stopped_at + last_activity
rewritten for closure narrative
* Current Position: Phase 1 COMPLETE, next Phase 2 of 5, Plan 7/7
complete, progress bar [██████████] 100% Phase 1
* Performance Metrics: Phase 1 row populated (7 plans, ~50 min); added
Plan 07 row with closure narrative incl. the two debug sessions
* Decisions log: appended [Phase 01-07-closure] decision and
[Phase 01-07-deferred-to-5] note for the cursor-visibility refinement
* Session Continuity: rewritten for closure; resume file points to the
Plan 07 SUMMARY (commit 3)
* Added "Phase 1 Closure Notes" block with ffprobe + ffmpeg gates,
fixture metadata, test counts, criteria green-status, and a process
retro candidate (auto-injection of empirical-acceptance gates when
RESEARCH.md flags HIGH-risk assumptions)
Refs: .planning/debug/resolved/d12-blob-port-transfer-fails.md,
.planning/debug/resolved/webm-playback-freeze.md
2026-05-15 21:58:38 +02:00
1ebfb42b30
docs(01-06): complete vite.config.ts collapse plan
...
- 01-06-SUMMARY.md: detailed write-up — 226 → 21 lines, Outcome A
reconciliation (dist/src/offscreen/index.html), full dist layout
for Plan 07's smoke test, T-1-NEW-06-01 / T-1-NEW-06-02 grep gates
- STATE.md: completed_plans 5 → 6, percent 71 → 86, current plan
advanced 6 → 7, two new decisions logged, session stopped_at updated
- ROADMAP.md: Phase 1 plan progress row 4/7 → 6/7; 01-06-PLAN.md
checked off
REQ-video-ring-buffer remains unchecked — Plan 07 owns the ffprobe gate.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 18:17:43 +02:00
9e236cbc7b
docs(01-05): complete SW shrink + port host plan
...
Plan 05 closes: src/background/index.ts is now a pure coordinator with
zero video-buffer state, T-1-04 mitigations on both onConnect and
onMessage, OFFSCREEN_READY handshake, port-based buffer fetch via
'video-keepalive' port, IDB orphan cleanup on install, and chrome.offscreen.hasDocument()
re-sync on SW respawn (audit P1 #8 ). 9/9 vitest tests still green;
tsc clean; no as any / @ts-ignore.
REQ-video-ring-buffer stays pending — Plan 07's ffprobe gate owns the
final completion marker.
2026-05-15 18:07:07 +02:00
05d00509bf
docs(01-04): complete offscreen port keepalive + OFFSCREEN_READY handshake plan
...
- Add 01-04-SUMMARY.md with TDD RED/GREEN/REFACTOR gate records,
acceptance grep gates, threat mitigations (T-1-04, T-1-NEW-04-01),
Plan 05 SW-side handoff (REQUIRED sender.id === chrome.runtime.id
check), and 1 Rule 1 deviation documented
- Advance STATE.md Plan counter 4 → 5, progress 43% → 57%
- Append 3 decisions to STATE.md Accumulated Context
- Update ROADMAP.md: 01-04-PLAN checkbox → [x], phase progress row 3/7 → 4/7
REQ-video-ring-buffer NOT marked complete — still pending Plan 07
ffprobe D-12 gate per the requirement's traceability.
2026-05-15 17:54:04 +02:00
30e5efd364
docs(01-03): complete offscreen recorder TDD plan
...
- Add 01-03-SUMMARY.md documenting RED -> GREEN gate (Plan 02 tests now
pass), 3 Rule-3 auto-fixes (OffscreenLogger inline, defensive
bootstrap, SW dead-code removal), and Plan 04 / 05 handoff notes.
- Update STATE.md: advance plan counter to 4 of 7 (43%), append
metrics + 3 execution decisions, record session.
- Update ROADMAP.md: mark Plan 01-03 [x] complete.
REQ-video-ring-buffer remains NOT complete — still pending Plans 04
(port keepalive) and 07 (ffprobe acceptance gate).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 17:42:21 +02:00
edc605d475
docs(01-02): complete wave-0 test infrastructure plan
...
- 01-02-SUMMARY.md created (Vitest 4.1.6 installed; 4 RED test files
pinning Plans 03+04 contracts; tests/fixtures/.gitkeep marker)
- STATE.md advanced: plan 2/7 -> 3/7; progress 14% -> 29%; metric row
added; 3 decisions logged; session continuity updated
- ROADMAP.md progress row updated: Phase 1 = 2/7 In Progress
- REQUIREMENTS.md: REVERTED premature [x] + "Complete" marking of
REQ-video-ring-buffer (Plan 01-01 mistakenly marked it; the requirement
is satisfied by Plans 03+04+07's implementation + ffprobe gate, not by
RED test scaffolding). Now reads "[ ]" + "In Progress" — honest state.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 17:28:49 +02:00
13b67f5136
docs(01-01): complete doc-cascade plan
...
Plan 01-01 (Wave-0 doc cascade) complete. Six tasks landed atomically
in commits 125c032 , fb88830 , b1ed2cb , 597d967 , 32bc996 , 4a5194e . Every
code-touching plan in Phase 1 (01-02..01-07) now reads a consistent
baseline: getDisplayMedia replaces tabCapture in DEC-003; long-lived
port replaces alarms in DEC-010; manifest.json carries the final
Phase-1 permissions set (desktopCapture, activeTab, downloads,
scripting, storage, offscreen).
SUMMARY: .planning/phases/01-stabilize-video-pipeline/01-01-SUMMARY.md
2026-05-15 17:19:48 +02:00
32bc99642e
docs(01-01): amend Phase 1 description + Success Criterion #2 per D-A5
...
Rewrite the Phase 1 one-liner in the Phases list to call out the
chrome.tabCapture -> getDisplayMedia swap, and rewrite Success
Criterion #2 to describe the new operator-selected screen/window
capture and the absence of tab-reattach logic. Phases 2-5 sections are
untouched. The verbatim phrase 'no tab re-attach logic' is preserved
as written in the plan to document the amendment in-place; the
original 'recorder re-attaches to the new active tab' wording is gone.
2026-05-15 17:16:07 +02:00
178fdd5b77
docs(01): create phase 1 plans for video pipeline stabilization .planning/phases/01-stabilize-video-pipeline/01-01-PLAN.md .planning/phases/01-stabilize-video-pipeline/01-02-PLAN.md .planning/phases/01-stabilize-video-pipeline/01-03-PLAN.md .planning/phases/01-stabilize-video-pipeline/01-04-PLAN.md .planning/phases/01-stabilize-video-pipeline/01-05-PLAN.md .planning/phases/01-stabilize-video-pipeline/01-06-PLAN.md .planning/phases/01-stabilize-video-pipeline/01-07-PLAN.md .planning/ROADMAP.md
2026-05-15 16:37:45 +02:00
89ca09ccec
docs: bootstrap .planning/ via /gsd-ingest-docs (2 docs) /home/parf/projects/work/repremium/.planning/PROJECT.md /home/parf/projects/work/repremium/.planning/REQUIREMENTS.md /home/parf/projects/work/repremium/.planning/ROADMAP.md /home/parf/projects/work/repremium/.planning/STATE.md /home/parf/projects/work/repremium/.planning/intel /home/parf/projects/work/repremium/.planning/INGEST-CONFLICTS.md /home/parf/projects/work/repremium/.ingest-manifest.yaml
2026-05-15 15:16:30 +02:00