Repository navigation
v0.2.35.0 feat: a test replay's recorded-source tab with the debugger at the same moment, the slider's unrecorded span and Play's bounded wait (Cycle 0049, PR-B2 of 3) - #117
Merged
ryota-murakami merged 14 commits intoOct 22, 2026
Conversation
…browser replay's selection order (Cycle 0049, PR-B2, Design 4) - A test replay's verified stop shows its sealed source in one Codebook-owned slot document named after the stop's file (Captured-<basename>); the replay debugger's frames open that slot, so no tab per stop is left. - An output, the result and an unverified stop show the 4A placeholder in the same slot; the debugger thread reads 'Not recorded at this moment' and starts on it when a replay opens on such a moment. - Each selection leaves the earlier moment first, confirms the slot's bytes before the debugger is presented, then commits the slot's line and label, the Study position and the Application view together; the reader position is written after the commit. - A stop in another file renames the slot and closes the earlier tab; leaving the replay closes the slot. - A slot that cannot open is told in the Study pane (String catalog) with Retry and one Output › Codebook entry; Retry re-shows the selected moment instead of rendering a saved study's source (EN9). - The debugger thread reads 'Recorded test stop <n> · <path>:<line>' (DS14). - Existing node-history tests count recorded-stop presentations and invalidation deltas, as the debugger now also starts on the 'Not recorded' thread.
…bound for test replays (Cycle 0049, PR-B2 timeline part)
…source views and the recorded-source slot (dupes)
…text are line comments, so the editor reports no problems for them (source-slot spike, VS Code)
…st replay (extension README); the owner's Stage-1-only pre-gate (AGENTS.md)
…wser transport's golden slider fixture
… slot's group before that tab closes, so a group the slot alone filled is never removed (OCR review); removal tests wait for the open's own publish
…e that a newer selection overtook or whose slot could not open, or a retire during a rename, leaves no orphan slot tab /ship Step 9 pass 1 (state-machines review, critical): showNodeSourceSlot overwrote the slot with the renamed URI before it closed the earlier tab, so a rename overtaken before its open, a rename whose open failed, and a retire while a rename still opened left the earlier file's slot tab open with no replay behind it. The slot now closes every unpinned, unchanged slot tab of this workspace but the current one after it shows, and a retire closes them all; the renamed slot opens in a group that shows a leftover slot tab, so closing that tab empties no group. Tests: three studyWorkspaceTestReplaySource cases fail on the earlier code (2, 2 and 1 slot tabs) and pass now; isNodeSourceSlotPath's unit test. Also Step 7's coverage tests: awaitDocumentSettled.test.ts and the slot's bound case.
…es (EN20, F115) test:shard --record on 3ed3a39 recorded 5,695 tests (the whole suite passed under the record's concurrency of 4).
…are drawn by helpers within the CRAP limit /ship Step 9 pass 1 QA (pnpm health, a CI gate): the shared renderTimelineCoverage (cyclomatic 11, CRAP 37.1) and renderTestReplayTransport (10, 31.6) added two crap_moderate findings to src/ui/studyHtml.ts beyond the measured baseline (the webview client has no Node coverage, so Fallow's estimate applies). The strip's accessible name and its drawing move into describeCoverageMarks and drawCoverageMarks, and the test replay's marks into renderTestReplayTimeline; the file's findings equal main's (10). Reader DOM study-bootstrap (205, the transport's golden DOM included), study-reading-pose and understanding-focus pass.
…slot's row with it /ship Step 9 pass 2 (Step 7 pass 2's red test; F164): after a slot that could not open, a return to Live closed the slot tab but kept the Study pane's history-source row and its Retry, which named the replay the learner had left. retireNodeHistorySelection now deletes that row. Tests (Step 7 pass 2, committed with the fix): returning to Live after a failed slot open leaves no failure row (fails on the earlier code with one row left), a slot tab of another replay closes when the open replay shows its slot, and returning to Live from a placeholder moment closes its slot.
…ebugger, and Retry during a browser replay keeps that replay's own path /ship Step 11 (Codex adversarial P1 with the Claude adversarial review and the Codex structured review): returning to the committed moment without a stop while a newer selection was still presenting a stop skipped the leave, and the non-stop branch presented nothing to a running debugger, so the overtaken stop's stack and values stayed beside a moment that recorded none (4A). That branch now invalidates a running debugger. Codex structured P2: Retry while a browser replay held the reader re-selected the test replay chosen before it and put its stop on the shared debugger; Retry re-selects a test replay's moment only when no browser replay is active. Tests: "returning to the shown output while a stop still presents leaves the debugger on no stop" (1 invalidation instead of 2 before the fix) and "Retry during a browser replay presents no stop of the test replay selected before it" (a second stop presentation before the fix).
…s before the harness removes its folders pnpm health's coverage run (pass 4 QA) failed this PR-B2 test with ENOTEMPTY: the held reader-position write was released at the end of the test body and never awaited, so harness.close() removed the history folder while the write still landed in it. The write is now released in finally and every held write settles before close; the test's assertions are unchanged.
Cycle 0049 PR-B2: the recorded-source tab, the debugger at the selected moment, moves that never show two moments, the slider's unrecorded span and Play's bounded wait. The README states the delivered version and the third pull request; the extension README narrows the tab's rename and close to what the slot does (a file with another name; Live or another saved study) and names the package:check file of 0.2.35. Co-Authored-By: Claude <noreply@anthropic.com>
28 of 126 tasks
ryota-murakami
deleted the
codex/cycle-0049-pr-b2-recorded-source-and-transitions
branch
October 22, 2026 17:01
125 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Cycle 0049's third and last pull request (Refs #107; PR-A #113 and PR-B1 #116 merged before it). A test replay now shows the source that executed at the selected moment, with the native debugger at that same moment, and no move ever puts two moments on the screen.
Captured-<file name>, holds a verified stop's sealed source with the stopped line highlighted and labelledRecorded: <path>:<line> · <t> s. The replay debugger's thread readsRecorded test stop <n> · <path>:<line>and its frames open the tab. At an output, at the result and at an unverified stop the tab holds the 4A placeholder, written as comments so the editor reports no problem for it. A stop in a file with another name renames the tab; every other slot tab closes after a slot shows, and returning to Live or opening another saved study closes it. A tab that cannot open shows a Study row with Retry and writes an Output entry.pnpm healthfindings in the Study client (F177), the slot's failure row after Live (F164), the stale debugger stack after a quick reversal (F193), Retry during a browser replay (F194), and a test's teardown race (F195).Screenshots
From the source-slot spike in the macOS Space (candidate
c66e3f6, before the later review fixes; saved test replays recorded through Codebook's tools without a chat). Motion and the region-2 comparison are N49's, after this merge.Test Coverage
Tests: 5,700 suite tests at the final head (
pnpm test; the base's count was not measured in this invocation).Coverage: 90% value-weighted (90% including 0 weakly covered paths).
Test value: 8 tests written, 1 rejected by the authoring gate, 0 existing tests extended, 0 paths weakly covered.
Regression proof — fails at HEAD · passes after fix: F163 (3 tests), F164, F193, F194 (each shown red before its fix).
Tests ran: tests count unavailable (runner summary: 5,700 tests, 5,694 passed, 0 failed, 6 skipped)
Tests ran: package count unavailable (runner summary: 1,069 tests, 1,059 passed, 0 failed, 10 skipped)
Pre-Landing Review
/shipran three fixing cycles and stopped withconverged:false(the owner's order: the open Critical and Major defects are recorded in Issue #107's comment, the last review's critical findings are fixed, and the pull request merges after required CI).pnpm health)Gate edits: none detected (38 listed, 26 read; patterns: RH-1,RH-3,RH-4,RH-12,RH-13,RH-14,RH-15,RH-16; unlisted idioms: none)
Outside review: Codex adversarial (gpt-6-astra) completed with one High (the stale debugger stack, fixed as F193) and three Medium (carried F196 to F198); Codex structured review completed, GATE: PASS (two P2, fixed as F193 and F194); Claude adversarial completed (nine findings, its recommendation F193). Step 11.5's binding is mismatched by design: the tree changed after Step 11 with these fixes, and Step 16 and required CI verify the final tree.
Exploratory QA
Functional surface (the workspace and utilities through Node's runner; Reader DOM through its CLI), smoke 5 probes plus the plan checks, in each pass:
pnpm healthfailed with two findings beyond its baseline (F177), fixed and rerun green.wiki-reader-dom720 px case failed once (F135, a known flake; this pull request changes no Wiki file) and passed on replay.pnpm test, Reader DOM pass;pnpm health's coverage run failed one PR-B2 test's teardown (F195), fixed;pnpm healthexit 0.No native editor surface here: native slot placement passed in the spike (Issue comment 6343288678); motion and the chat-driven round are N49's.
Design Review
No frontend files changed by the design lens's scope — design review skipped (the Study webview's coverage-strip drawing moved into shared helpers with its golden DOM identical; Reader DOM checks cover it).
Eval Results
No prompt-related files changed — evals skipped.
Scope Drift
Scope Check: CLEAN
Plan Completion
Plan version 7, PR-B2 items (re-audited after the fixes): 21 items, 14 done, 1 changed (the placeholder and loading text are line comments after the spike), 3 partial, 0 not done, 3 unverifiable.
Verification Results
Step 8.1 obligations executed in Step 9 and Step 16:
format:check,typecheck,lint,health:static,dupes,dead-codePASS;pnpm testPASS (5,700 tests, 0 failed);pnpm test:packagePASS (1,069 tests, 0 failed);pnpm healthalone PASS (exit 0, score 85 A); Reader DOM five checks PASS; build, package andcheck-packagePASS (VSIX 1,924,738 bytes, SHA-2564848bda85ebc9c4587db784d69106b888c154229ed462e1e74a0630b6fb7dc1a); pre-gate Stage 1 PASS with one warning (a 10-digit process id in a test title read as a phone number). NOT RUN: N49 (after the merge); Windows and Linux.Documentation
Scope: reviewed committed, unstaged and selected docs for Cycle 0049 PR B2 (base 60aff4b, head cae9b10), plus the release-metadata edits in the working tree. The kept documents are AGENTS.md, CHANGELOG.md, PRODUCT_GOAL.md, README.md, extension/README.md and the bundled SKILL.md. I also read docs/agents/*.
Result: the 0.2.35.0 CHANGELOG entry covers the recorded-source tab, the native debugger at the selected moment, one moment at a time, the slider's unrecorded span and ticks, and Play's 1.5 s bounded wait. Every user-visible behavior it names has a matching sentence in extension/README.md. Those sentences were already updated, including the numbered walkthrough. The root README.md implementation status already carries 0.2.35.0 and describes the third pull request. AGENTS.md gained the owner's pre-gate rule and has no stale content. The bundled SKILL.md (1.0.46) and the API (1.8) are unchanged, and nothing in the diff affects them. I corrected one stale line, the package:check example filename in extension/README.md (0.2.34 to 0.2.35).
Debt: none found. The CHANGELOG's Not observed section already records what remains unverified: a chat-driven run of this version, motion between moments, and Windows and Linux.
Test plan
pnpm test(fromextension/): 5,700 tests, 5,694 passed, 0 failed, 6 skippedpnpm test:package: 1,069 tests, 1,059 passed, 0 failed, 10 skippedpnpm healthalone: exit 0, score 85 Aformat:check,typecheck,lint,health:static,dupes,dead-code: exit 0study-bootstrap,wiki-reader-dom,study-reading-pose,understanding-focus,repository-returnpassnode extension/scripts/package.mjsandcheck-package.mjs: pass🤖 Generated with Claude Code