Cycle 0056: every defect Cycle 0055 carried is fixed (Wiki runs, the LLM Wiki view, the reader, test replays in Cursor) #135
Description
Outcome
Every defect Cycle 0055 carried is closed, in the scenarios each task names: the Wiki run lifecycle (generate and update) says what happens on a joined, stopped or bounded start and releases what it claimed; the LLM Wiki view and the browser reader say what is true in the states the tasks list; a saved test replay opens in Cursor in N56 step 1's repeated opens; and the tests that guard them prove what they claim. The tasks' scenarios are the complete acceptance contract.
This is a bug-fix cycle (AGENTS.md Cycle rule). It follows feature Cycle 0055 (#132: PR #133 v0.2.45.0, PR #134 v0.2.46.0, 298e90bd), whose closing comment (the last comment of #132) carried 25 defects. Each is one task below, with its source, its fix or evidence, and the test that fails without the fix. Nothing is ranked, selected, dropped or reduced; no increment is added.
- Learner. A press that joins a running start says so; an end sentence never shows a raw cause id; a stop and its notice use one verb; the reader says the editor may be asking for permission; the view's message and rows change together; Reveal Wiki Folder on a missing or remote folder says why nothing opened; a saved test replay opens in Cursor without a reload.
- Agent. No change to the skill's procedure; the renderer's flow diagrams no longer overlap two edge labels (skill version moves).
- Engineering. A failed marker release is retried, a taken-over reservation survives a skill conflict, the Cursor skill step is bounded, fact reads run in parallel where independent, the view does no background work while hidden, and flaky or timing-bound tests wait on observable signals.
Gap audit (all 13 rows, baseline 298e90bd)
#132 audited all rows at 601f3827 and its closing comment updated the six rows Cycle 0055 touched. Since then only Cycle 0055's own commits landed (293ded81, 298e90bd); they change the Wiki run lifecycle, the LLM Wiki view, the reader's freshness label and the learning icon, and no live, capture, replay or skill-procedure path. So the rows below carry #132's audit with those updates; native evidence is development evidence on nextjs-dashboard 1936e41 in the Space local:codebook-qa and fills no final row.
| Row | (a) Implementation | (b) Proof | (c) Next action |
|---|---|---|---|
| AC-LIVE | Match, narrow (repository-browser, node-test). |
N54 both hosts. | Later: Node server form (O2 of #132). |
| AC-SAVE | Match. | N54 both hosts. | Regression check only. |
| AC-REPLAY | Mismatch in Cursor: N55-F4 (a saved test replay refused twice, then selections did nothing until a reload). | N52, N54; N55 step 7 reopened N54's replays (Cursor only after a reload). | This cycle: task 17 (root cause, fix, native recheck N56). |
| AC-GAPS | Match. | N50 both hosts. | Regression only. |
| AC-LEARNING | Minor mismatch: per-step I understand this step absent (E8). | N49, N50. | Later candidate (not a carried defect). |
| AC-WIKI | Match; E1-F1 (renderer label overlap) and N55-F2 (reader Q&A gives no hint of the editor's consent modal). | N55 both hosts. | This cycle: tasks 1, 15. |
| AC-WIKI-UPDATE | Match; lifecycle defects carried (tasks 2–14). | N55 both hosts (generate, update, freshness both ways, interruption). | This cycle: tasks 2–14. |
| AC-SOURCE-LINKS | Match. | N55 both hosts. | Regression only. |
| AC-ENTRY | Match (LLM Wiki view, distinct icons); view defects carried (tasks 16, 18–25). | N55 both hosts, four themes. | This cycle: tasks 16, 18–25; N56 re-observes the changed rows. |
| AC-DESKTOP | Match at D034 on macOS. | macOS only. | The per-system cycle goal v10 owes. |
| AC-SHORTCUTS | Partial: no contributes.keybindings. |
N55 (Wiki ? list). | Later candidate. |
| AC-SKILL | Match; Wiki-route identity recorded per host (N55). | N55. | Task 1 moves the skill version; N56 records the loaded identity again. |
| AC-REAL-PROJECTS | Large mismatch (no Node server, Chrome MV3, Vite, Pages Router, Node Example forms). | Development target only. | Next feature cycle: Node server profile. |
Tasks
Each task closes by a fix plus a test that fails without it (red result recorded), or by recorded evidence that it is no defect or no longer applies. Source: Cycle 0055 (#132) task number and finding label. Each new or changed test states protects=…; fails_when=…; no_claim=….
Part A — the Wiki run lifecycle (pt1).
- E1-F1 renderer label overlap (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 7). Two conditional edges between the same pair of nodes in one column draw their labels over each other (
extension/skills/codebook/render-wiki-diagrams.mjs:3laneGap: 34,:146the lane offset, against ~22-character labels). Fix: the vertical lane offset grows with the label box so twobranchedges A→B with B below A give non-overlapping label boxes. Test: a renderer test with two such edges asserts disjoint label boxes. The skill version moves (1.0.49 → 1.0.50) because the skill folder changed. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. - A coalesced press says nothing (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 9, pt1 OCR finding 7). A Generate pressed while an Update's start checks run (or the reverse), and the browser reader's Update during a generation's modal confirmation, join the running attempt silently (
runWikiAttempt,extension/src/extension.ts:2091). Fix: the joined press showsCodebook is already starting an LLM Wiki <generation|update> in this window; this press joins it.(information). Host test: press Update during a held Generate start check; the sentence shows once. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. - One utility per file (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 10).
startWikiRun.ts:12also holdsdescribeMissingWiki;wikiRunBoundMs.ts:50,61also holdlongestWikiRunMsandLONGEST_WIKI_RUN_MS;wikiRunRecord.ts:25also holdsagentExitOf;An LLM Wiki already exists in <folder>. Update it instead?is inline atextension.ts:2439. Fix: each into its ownutils/file (the constant intoconstants.ts), the sentence asdescribeExistingWikibesidedescribeMissingWiki. Evidence: behaviour-neutral (existing tests stay green);health:staticanddupesstay clean. Closed: done in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136); behaviour-neutral, existing tests green,health:staticanddupesclean. - Commands never executed by a test (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 11).
codebook.showWikiOutputand the "nothing running" branch ofcodebook.cancelWikiRun. Fix: host tests (the harness'screateOutputChannelstub recordsshow); the nothing-running branch showsNo LLM Wiki run is going on in this window.. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. - Cursor generation's stop and bound have no host test (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 12). Fix: two host tests: Cancel during a Cursor generation ends the agent's process group and removes the marker; the 55-minute bound (injected clock) ends it with the bound sentence. Closed: fixed in
086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. - A test races a 200 ms timer (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 13).
wikiGenerateFlow.test.ts:665reads the refusal after a fixed race. Fix: await the refusal notice through the harness. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. -
wikiRunRecordrows (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 14). No row foralready-current, a failed end withsite: 'replaced', or an output folder equal to the home folder. Fix: those three rows in the record's table test. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. - Stale "press Cancel" (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 15).
describeWikiUpdate.ts:31,62,164doc comments and its@examplesay Cancel for the VS Code watch, which is Stop watching (D4). Fix: the docs say Stop watching where the VS Code watch is meant; the Cursor Cancel stays. Evidence: a doc-only change, checked by reading. Closed: doc-only, done in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136), checked by reading. - "cancelled" and "stopped" for one stop (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 16).
wikiGenerateNotice.tssayscancelledin one notice andstoppedin its sibling for the same act. Fix: one verb per host: VS Codestopped watching, Cursorcancelled, in every notice, row 3 cause and Output summary. Wording test over every generate end per host. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. - A raw cause id in a sentence (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 17).
describeWikiGenerateBlock.ts:33-34's fallback shows(<cause>: <path>). Fix: the fallback readsThe folder <output> cannot take a new LLM Wiki: <first path> is in the way. Press Update LLM Wiki to see what it is.; the cause id goes to the Output record only. Unit test with an unmapped cause. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. - A failed release is not retried (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 18). A release of a generation's claimed marker that fails (
startWikiRun.ts:99,105,119claim.release().catch(() => false), and the closing-window path inextension.ts) is not retried, so the marker can stand until its bound. Fix: route it through the marker change's retry (the same bounded retry a marker change uses). Host test: the first release throwsEBUSY, the retry removes the marker. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. - A taken-over reservation is lost after a skill conflict (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 19). After Update anyway or Generate anyway took over a stopped watch's reservation, a Cursor skill conflict releases the marker, so the reservation's protection is gone. Fix: on that refusal the taken-over reservation is written back (same
watchEndedAtMs). Host test. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. - The skill step has no bound (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 20). The managed Cursor skill's verify and deploy (
extension.ts:760-805) run with the marker claimed and no bound; Stop LLM Wiki Run says the run is starting but cannot stop it. Fix: the step runs under anAbortSignalthat Stop LLM Wiki Run and a 30-second bound (WIKI_SKILL_STEP_TIMEOUT_MS = 30_000) abort. On Stop the start ends withThe LLM Wiki <generation|update> was stopped while Codebook readied the Cursor skill; no agent was started.; at the bound withCodebook stopped readying the Cursor skill after 30 seconds; no agent was started. Press <Generate|Update> LLM Wiki again, or run Codebook: Set Up AI Chat.The marker is released (through task 11's retry) as soon as the abort is seen, without waiting for the step. A verify or deploy that settles after the abort is not awaited further: its result is ignored, no agent starts, and a skill file it already wrote stays (the managed skill is then current). Host tests: Stop during a held skill step; the bound with an injected clock; a deploy that settles after the abort starts nothing. Closed: fixed in086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0); the test that fails without the fix and its red line are in the PR and the branch commits. -
studyWorkspaceRemovalfails under full-lane load (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 32). It failed once withEACCESwhile all files ran; alone it passed 10 of 10. Closes with the cause (the path that answeredEACCESand what held it, from a reproduction under load, e.g. the file run beside the full lane in a loop), a fix and the test then green in five consecutive full-lane runs. A closure without a fix needs the same named cause shown to lie outside the repository's code and tests (for example the OS), with the reproduction attached; an unexplained flake does not close. Closed: cause named (the test's save without a folder escaped theEACCESwindow under load; a 400 ms hold onrecordings.startreproduced it every time), fixed inea5a73aa(in086211db, PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136); 20/20 runs of the file, green in 8 consecutive full lanes.
Part B — the LLM Wiki view and the reader (pt2; task 23 rides on pt3).
- N55-F2: the reader says nothing about the editor's consent (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 21). The first question raises VS Code's language-model consent modal while the reader says only
Asking the editor model…(extension/src/deepWikiReader.ts:150). Fix: the waiting status readsAsking the editor model… The editor may first ask you to allow Codebook to use it; answer there.in both hosts. Page-script test (wikiQuestionPage.test.ts); N56 step 3 natively. Code closed:ce97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137) with the page-script tests; N56 step 3 records it natively. N56 step 3 (2026-10-27): natively verified in VS Code (Copilot Chat GPT-6 Luna, access revoked, then the first question). The sentence showed while VS Code's consent modal was up, and the answer came after Allow (artifacts/cycle-0056/n56/step3/). - N55-F3: the message goes before the rows (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 22).
llmWikiView.ts:206setstreeView.messagesynchronously while the tree re-renders aftergetChildren, so row 2 shows ~233 ms without its message. Fix: a message change is applied when the tree reads the new model's root children (the read that follows the change event), so message and rows change in one render. Host test: the harness records the order of the message write and the rootgetChildrencall (no_claim: the editor's frames). The task closes only with N56 step 4's frames; if they still show the message and the rows in different frames, the task stays open and the next hypothesis (for example setting the message after the tree'sonDidChangeTreeDatarender settles, observed natively) is tried within this cycle. Code merged ince97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137); stays open until N56 (task 16: step 4 frames; task 25: step 5 screenshots). N56, 2026-10-27: pt2's fix is falsified natively. In VS Code 1.142.0 on the candidate5b39b767, at a watched generation's end (OBS taketake-gen-end-vscode.mp484f54659…, every native frame of the view classified by OCR, the transition frames inspected), frames 236–242 (7 frames, about 233 ms) show the new rows under the old messageCodebook is watching the chat…, and frame 243 shows the message gone. Cause: VS Code's extension host (ExtHostTreeView) sends tree changes and message changes through oneEvent.debounce(…, 200, leading). The first change goes out at once and a second one within 200 ms goes out 200 ms later, whichever comes first. Hypothesis H2 (in progress): when the message changes, a same-value message write opens the window, then the new message and the tree change go in the same tick, so both leave in one trailing emission (message, then the root refresh). Test: a fake extension-host debounce in the harness; then N56 step 4 on the new candidate. H2 native (02acefaa): the lag dropped to one frame, now with the message first, because the rows need a round trip after$setMessage. H3 (in progress): write the new message in the rootgetChildrenof that refresh. Closed: H3 fixed in7ff3ab57(pt3), red first against a model of the extension host (the message write rides the rootgetChildrenof the refresh). N56 step 4 on7ff3ab57: natively PASS (h3-vscode-update.mp43d68d280…, VS Code 1.142.0, a watched update by Copilot Chat GPT-6 Luna, every frame of the view classified by OCR, transitions inspected):
- at the end, frame 257 shows the message with the run rows and frame 258 shows no message with the new rows;
- at the start, frame 187 shows the idle rows and frame 188 shows the message with the run rows;
- so the message and the rows change in one native frame both ways.
- N55-F4: a saved test replay refused, then silent, in Cursor (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 23, major). Opening N54's test replay from Saved studies in Cursor's designated window was refused twice with
Native pane, group or focus changed while presentation waited(presentation:placement-refused, guardStudyWorkspace.retainPresentationPlacement,studyWorkspace.ts:6723), the second with "Events while armed: none"; later selections did nothing (no notice, no Output entry) until Developer: Reload Window. Root cause unknown. Starting action: reproduce in the Space's Cursor with the Output log andcodebook://node-history; explain the refusal with no armed events and the silent no-op after it. Closes with the cause, a fix, a test that fails without it, and N56 step 1 natively. N56 rerun (2026-10-27, candidate02acefaa): natively PASS: five opens of N54's replay alternating with another test replay, no refusal, each event step exactly one stop, no Output entry (rerun1-cursor.mp45094c252…). Closed: merged in5b992ea5(PR v0.2.49.0 fix: Cycle 0056 pt3: a saved test replay opens in Cursor, and the LLM Wiki view's message and rows change in one frame #138, v0.2.49.0). - Fixed negative waits (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 24). Two
llmWikiView.test.tstests (an unrelated file's event reads nothing; no second read after a burst) and the read-loop test of 076ac9f prove an absence by a fixed sleep. Fix: the fake watcher or the debounce exposes a flush (a promise that settles when the debounce has fired or was dropped); the tests await it. Closed: fixed ince97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137, v0.2.48.0); the test that fails without the fix is in the PR and the branch commits. - Sequential fact reads (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 25).
readLlmWikiViewFactsreads the start block, the token, the generation, the owner and the marker one after another. Fix: the receipt first (its order is pinned since 076ac9f), then the independent reads together. Test: held reads show the independent ones started together and the receipt before the manifest. Closed: fixed ince97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137, v0.2.48.0); the test that fails without the fix is in the PR and the branch commits. - The poll stops at the error row (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 26). A read that throws shows the error row, which is no run row, so the 30-second poll stops. Fix: the poll keeps running while the error row follows a read that showed a run row. Host test. Closed: fixed in
ce97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137, v0.2.48.0); the test that fails without the fix is in the PR and the branch commits. - Reveal Wiki Folder on a remote or missing folder (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 27).
revealFileInOSdoes nothing visible there. Fix: a missing folder showsThe LLM Wiki folder <label> does not exist (yet).; a remote workspace showsReveal Wiki Folder opens folders on this computer only; the Wiki folder is on <remote name>.. Host tests. Closed: fixed ince97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137, v0.2.48.0); the test that fails without the fix is in the PR and the branch commits. - Background work while the view is hidden (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 28). The poll and freshness checks run while the view is collapsed or hidden. Fix: no poll and no freshness check while hidden; one read when shown again. Host test with
setVisible(false). Closed: fixed ince97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137, v0.2.48.0); the test that fails without the fix is in the PR and the branch commits. - Manage-trust lookup (pt3, because it waits for N56) (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 29).
MANAGE_WORKSPACE_TRUST_COMMAND_IDS(constants.ts:1007) holds two candidate ids andresolveManageTrustCommand.tsprobesgetCommands. N55 showed VS Code's id works. Closes when N56 step 2 records Cursor's id in an untrusted folder: one id kept and the lookup dropped if both hosts share it, else both kept with that evidence. N56 step 2 (2026-10-27): both hosts shareworkbench.trust.manage. In VS Code 1.142.0 the view's row action opened the Workspace Trust editor in the untrusted clone. In Cursor 3.27.12, an isolated instance with trust enabled only in its own user data, the untrusted copy and the candidate5b39b767, Codebook'scodebook.llmWiki.manageTrustopened Cursor's trust editor (window titleWorkspace Trust — nextjs-dashboard). Cursor's Keyboard Shortcuts editor listsworkbench.trust.manage, and@command:workbench.action.manageTrustmatches nothing. Fix (in progress): one id kept, the lookup dropped, and the notice kept for an editor without the command. Closed: fixed in26a12eda(pt3); natively PASS in both hosts on02acefaa. - Naming and repetition (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 30).
describeWikiGeneration.tsnames the 7-character revisionfullRevision;isCursorHost ? 'cursor' : 'vscode'is written seven times inextension.ts; two learner sentences are inline inregisterLlmWikiCommands.ts:81,113. Fix:shortRevision, onewikiHostvalue, the sentences inconstants.ts. Behaviour-neutral. Closed: done ince97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137); behaviour-neutral, existing tests green. - View copy and icons (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 31). Decisions (O3): Try again
$(debug-restart); Stop watching$(eye-closed)(Cancel keeps$(debug-stop), since it stops the agent); command titles of inline actions in Title Case (Stop Watching,Change Location,Open Chat,Open Folder,Show Output,Try Again), running text and the welcome link keep sentence case (the v9 PNG'sChange locationlink); the welcome's fourth line readsThe Wiki is written to .codebook/wiki unless the setting codebook.wikiOutputDirectory names another folder.followed by theChange locationlink; row 5's click opens the setting (its descriptionChange locationthen acts as the row). Package test pins icons and titles; host test pins row 5's command; N56 step 5 screenshots both hosts. Code merged ince97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137); stays open until N56 (task 16: step 4 frames; task 25: step 5 screenshots). N56 step 5 (2026-10-27): natively verified in both hosts, four themes (artifacts/cycle-0056/n56/step5/): VS Code's Stop Watchingeye-closed; Cursor's welcome line and link, its rows, and Try Againdebug-restart. Closed: code ince97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137), native evidence N56 step 5; closed with pt3's merge5b992ea5(PR v0.2.49.0 fix: Cycle 0056 pt3: a saved test replay opens in Cursor, and the LLM Wiki view's message and rows change in one frame #138).
Found in this cycle (fixed in it, AGENTS.md Cycle rule).
-
The view misses a stopped watch's reservation without a file event — fixed in
aeae9bf5(the view reads again after every marker change; test red on the unfixed code with the 6 s timeout; 20/20 runs of the file) (found in pt1's full lanes:llmWikiView.test.js"Stop watching in the view ends the generation and leaves a Waiting for chat row…" timed out in 1 of 5 lanes, 5 of 6 early lanes under load).finishWikiUpdate(extension.ts~1420) ends the run, which makes the view re-read, beforesettleWikiRunMarkerwrites the reservation; without a watcher event (the harness, or the product's no-watcher fallback) nothing reads again and row 2c never shows. Fix: the view reads once more after a run's marker is settled. Host test that holds the reservation write past the view's read, with no file event; 20 runs of the file and three full lanes green. -
Close Study Workspace failed with
Webview is disposed(found natively in the Space on pt3's stage-1 build8b76a578, never released): the new effect note read a disposed pane's getters. Fixed ine0beb1f3with "closing the Study workspace ends without an error when the editor already disposed its panes" (red on8b76a578). -
A Study-entry measurement test fails under full-lane load — fixed in
ac96be78(pt3): a correct borrowed measurement when the chat holds the keyboard reads the layout twice; a probe focusing the chat failed the test 3/3 with2 !== 1; the test now counts per the keyboard holder; 20/20 runs, three full lanes 7208/0/6 (found in pt1's full lane 2 of 3,/tmp-logged):studyWorkspaceEntry.test.js:2222"live entry waits for retired Study tabs before measurement and measures its final arrangement once, returning the keyboard to chat" got2 !== 1at 6.1 s (two measurements where one is expected). Area of pt3's Study-pane drain, so fixed in pt3: the cause named with a deterministic reproduction (a probe that fails every time), the fix (test or product), 20 runs of the file and three full lanes green. -
The Study-pane pre-drain may delay a test replay's open by up to 5 s (found in pt3 while fixing task 28):
retiredStudyPaneClosedafter a disposed Study pane (7a6a203c, task 17's refusal-2 fix) waits for the disposed tab's close up to its 5 s bound; a harness that holds that close until the final arrangement starts makes the open take ~10.7 s instead of ~6 s. Closes with N56 step 1's measured open time in Cursor and VS Code (Saved studies selection → replay shown, from the take's frames): if a real editor closes the tab late enough to wait, the drain must not block the open (e.g. continue once the next tab is active and accept that tab operation in the guard) with a host test; if not, the evidence that the native close is prompt. Closed with evidence: in Cursor the time from choice to replay shown was about 1.3–1.7 s on both candidates (5b39b767,02acefaa), so the native tab close is prompt and the 5 s bound is never reached. -
A Study-workspace reader test times out under full-lane load (found in pt2's
/shiplane on386449b1, run beside eight read-only review agents):studyWorkspace.test.js:75"saved Node history is selectable in the reader without entering browser playback" failed at 12.3 s withTimed out waiting for a new history store restores the saved stop and its native snapshot; reader: {"presentations":4,"sequence":24,…,"errors":[]}; alone it passed 5 of 5 (pt2 changes no Study-workspace code). Study-workspace area, so fixed in pt3 like task 28: closes with the cause named from a deterministic reproduction (a probe that fails every time), the fix (test or product) and 20 runs of the file plus three full lanes green. Closed: fixed in5b39b767(pt3). Cause: the test's wait passed on an earlier write of stop 25 while the reader's queued writes of 24, 26 and 25 were still pending, so the new history store read a position that was about to change. A probe that holds those writes failed it 3 of 3. The test now waits until the reader has written every chosen stop. 30 runs of the file and three full lanes are green (7327 tests, 0 fail, 6 skipped). -
N56-F1: after Close Study Workspace, choosing the same saved test replay again does nothing (found in N56 step 1, Cursor 3.27.12, candidate
5b39b767). After Close, the Saved studies list still names the replay the closed reader showed (showChosenEntry,ui/studyHtml.ts, falls back to the shown study, and Close keeps the selection on purpose so that a reopened reader shows it again:studyWorkspaceTestReplayComposition.test.ts:2637). Choosing that entry fires nochangeevent, so no open is asked; the learner must choose another study first. Fix: a closed reader names no chosen entry in the list (it readsChoose a saved study), so every entry, the last one included, opens on choice; a reader opened again by Open Study Workspace still shows its replay and the list names it. Test that fails without the fix; N56 step 1 again on the new candidate. Closed: fixed in9fd7e6cc(Reader DOM case red first); natively PASS on02acefaa. -
N56-F2: a reopened test replay's Learning summary first shows the replay closed before it (found in N56 step 1). In 3 of 8 opens from Saved studies after Close (o2, C, o4 in
n56-step1-cursor.mp4: 199.47–199.50 s and two more), the summary painted the previously closed replay (its title, result, question, sequence andStop 2 of 3) for 1–2 frames (33–67 ms at 30 fps) besideThe recorded source is opening in its native pane., then the chosen replay. Cause: Close keepsselectedNodeHistory(by design, above); the open from a closed reader runsopen()→showLearningSummary()→publish()while that selection is still set, beforeopenNodeHistoryreplaces it. Fix: an open of a test replay draws no other replay's summary while it opens (for example the closed reader's selection is retired, or not published, when another replay is chosen). Host test that records every summary publish of such an open and fails on one naming the other replay; N56 step 1 again on the new candidate. Closed: fixed in506200e2(host tests red first); natively PASS on02acefaa(0 of 8 opens drew another replay). -
N56-F3: the LLM Wiki view misses a deleted Wiki folder (found in N56, VS Code 1.142.0, candidate
5b39b767, clone~/qa/n56/nextjs-dashboard). Afterrm -rf .codebook, the view went on showing the deleted Wiki's row (Wiki folder belongs elsewhere…) for over 40 s, until its Refresh action; creating the folder was seen within 6 s. Cause: once.codebookexists,keepWatcher(llmWikiView.ts) stands the watcher on that folder itself (the nearest existing folder above the output), anddescribeWikiWatchplans only the paths below it, so deleting the watched folder raises no planned event; no run row shows, so no poll runs. Fix: deleting any folder from the project root down to the output, the watched one included, refreshes the view. Test that fails without the fix; native recheck on the new candidate. Evidence:artifacts/cycle-0056/n56/f3/(f3-record.txt750fcff3…, screenshots8fdc1f96…). Closed: fixed ine816e184(host tests red first); natively PASS on02acefaa. -
pnpm healthjudged a stale Fallow graph cache, not the source (found by pt3's exact-HEAD gate onb5227ce9). The measured health failed with 35 findings beyond the baseline, mostly functions in unchanged files (sourceImportBindings.ts,stripTerminalControls.ts, …) that Fallow could not match to coverage and estimated as unreached (0%). A rerun gave the same 35. A run whose graph cache was invalidated (Graph cache decoded but not reused) gave 0 on the same source, as didorigin/maince97422ain a fresh worktree; the two failing runs had reusedextension/.fallow's graph cache. Fix: the measured Fallow runs pass--no-cache, so each verdict comes from a graph of the current source (about 2 s more). Closed: fixed in1074b351, with the test "a measured run leaves no Fallow cache in the checkout…", red without the fix (a.fallowfolder after a passing run);health.test.mjs22/22.
Acceptance criteria
- Every task (1–34, and any found later) is closed in this Issue: the fix commit and the test that fails without it (its red line recorded), or the recorded evidence that it is no defect or no longer applies.
- Task 17 names the root cause with evidence (logs, a reproduction), and its fix is shown natively in Cursor by N56 step 1.
2b. Pre-merge evidence versus cycle acceptance. pt1 and pt2 merge on their host, unit, page-script and package tests plus the gate; the native claims of tasks 15, 16, 23 and 25 are accepted only by N56 on pt3's candidate. A native failure there is fixed in pt3 (this cycle) and N56's failed step runs again on the new candidate. - N56 (native, driving agent, Space
local:codebook-qa, the candidate VSIX of pt3) records, with OBS takes and inspected frames where motion matters. Targets and evidence:- Steps 1 and 3–6 use a QA-owned clone of
nextjs-dashboardat1936e41(~/qa/n56/nextjs-dashboard, cloned from the Space's designated checkout/Users/lume/repository/nextjs-dashboard), except step 1, which reads saved learning in the designated checkout's window, where N54's Cursor replayfbd584e0…_6cf9fd04…is saved (N55 step 7; before/after lists and Cursor's Output log in the Mac's ignoredartifacts/cycle-0055/n55/n55-step7-evidence.tgz, SHA-2565e2c5bf1…).codebook://node-historyis read with N54's helperread-all.mjsthrough that window's connection descriptor. If that replay is missing, step 1 first records a new node-test replay in the designated window (the N54 procedure in Cycle 0054: an unreached declared stop explains itself, a launch re-asks a changed root claim, and the native trial keeps unreleased listings #130) and is reported as such. - N55's screenshots for step 5's comparison are in
artifacts/cycle-0055/n55/(compare/welcome-both.pngc9f8354f…,n55-icons.tgz43fb5114…). - Evidence leaves the Space for
artifacts/cycle-0056/n56/with matching SHA-256 on both sides.
- Cursor: N54's saved test replay opens from Saved studies five times in a row (close and reopen between), each without refusal; Next event steps once each time.
- Cursor: in an untrusted copy of the clone, the view's Manage Workspace Trust opens Cursor's trust editor; the command id is recorded (task 23).
- VS Code (Copilot Chat, GPT-6 Luna): in a profile that has not granted Codebook language-model access, the reader's first question shows task 15's status line while the consent modal is up.
- VS Code: at a watched update's end, frames show the message and the rows change in the same frame (task 16).
- Both hosts: the view's rows and welcome after task 25, compared with N55's screenshots and the v9 PNG's region 3; four themes for the changed icons.
- The loaded skill identity (task 1's new version) in both hosts.
- Steps 1 and 3–6 use a QA-owned clone of
- Each new or changed test states
protects=…; fails_when=…; no_claim=…; changes to existing tests are reported with their reason in the PR. - Every PR passes the 15-check exact-HEAD gate on its final tree, in this order: from
extension/:pnpm format:check,typecheck,lint,health:static,dupes,dead-code,test; the five Reader DOM checks (node extension/scripts/<check>-qa.mjs verify <new folder>for study-bootstrap, wiki-reader-dom, study-reading-pose, understanding-focus, repository-return); fromextension/:pnpm test:package, thenpnpm health; from the root:node --test .codex/restore-product-context.test.mjs. Required CI passes, and hosted CodeRabbit is APPROVED on the exact head. - Every user-visible change has a CHANGELOG entry and its sentence in
extension/README.md. pnpm --dir extension health:staticandpnpm --dir extension healthpass against their committed baselines (extension/fallow-health-baseline.json,extension/fallow-health-measured-baseline.json), which this cycle does not re-save.- The closing comment states that nothing is carried (or names what the
/shipreview limit recorded).
Testing plan
| Layer | What | Count |
|---|---|---|
| Unit | renderer label boxes (1), fallback sentence (10), record rows (7), one verb per host (9) | +8 |
| Host | coalesced press (2), showWikiOutput and nothing running (4), Cursor stop and bound (5), release retry (11), reservation kept (12), skill step stop and bound (13), message/rows order (16), error-row poll (20), reveal missing/remote (21), hidden view (22), row 5 click (25) | +14 |
| Page script | the reader's waiting status (15) | +1 |
| Package | icons and titles (25) | +1 |
| Test hygiene | awaited refusal (6), flush instead of sleeps (18), held reads order (19), studyWorkspaceRemoval (14) |
changed 5+ |
| Replay | task 17's root cause, with the test that fails without the fix | +1 or more |
| Native | N56 steps 1–6, both hosts | ≥ 3 takes |
Rules for the implementing agent
- Acceptance criteria are the
protects / fails_when / no_claimprofile of each test: the observable it protects, the wrong result it rejects, and what green does not prove. Never "make the tests pass". - Real code and real tests land in the same change; a placeholder, a stub assertion or a test deferred to a follow-up is not done.
- Any change to a test, validator, CI step, timeout, tolerance, threshold, snapshot or suppression pragma is reported on its own line in your summary with its justification, before any other result.
- A reported command names the command and its observed result (exit status, counts, the failing line); a command you did not run is not reported, and stderr is never silenced in a command you cite.
- Your report is a claim until the parent re-executes it: say what you verified, what you reused, and what you could not check.
- Red first: write the test, see it fail on the unfixed code (copy the fixed file aside and
git checkout HEAD -- <file>; nevergit stash), then fix.
Rollback
Revert the PRs in reverse order. No stored learner data, MCP API (1.8), marker format or published Wiki format changes; the skill moves one version (renderer only), so an older Codebook keeps reading Wikis it renders.
Effort
| Part | Estimate |
|---|---|
| Part A, tasks 1–13 (renderer, lifecycle sentences and retries, tests) | 5 h |
Task 14 (studyWorkspaceRemoval cause) |
1.5 h |
| Part B, tasks 15–16, 18–25 (view, reader, copy) | 4 h |
| Task 17 (N55-F4 root cause, fix, test) | 4 h |
| N56 native (both hosts) | 4 h |
| Reviews, gates, CI, CodeRabbit for three PRs | 6 h |
Files
| File | Change |
|---|---|
extension/skills/codebook/render-wiki-diagrams.mjs, extension/skills/codebook/SKILL.md |
Task 1; skill version |
extension/src/extension.ts |
Tasks 2, 4, 11, 13, 24 |
extension/src/utils/startWikiRun.ts, wikiRunBoundMs.ts, wikiRunRecord.ts (+ new one-utility files) |
Tasks 3, 11, 12, 13 |
extension/src/utils/wikiGenerateNotice.ts, describeWikiGenerateBlock.ts, describeWikiUpdate.ts |
Tasks 8, 9, 10 |
extension/src/deepWikiReader.ts |
Task 15 |
extension/src/utils/llmWikiView.ts, readLlmWikiViewFacts.ts, readLlmWikiViewState.ts, registerLlmWikiCommands.ts, resolveManageTrustCommand.ts, describeWikiGeneration.ts |
Tasks 16, 18–25 |
extension/src/studyWorkspace.ts (and what task 17's cause names) |
Task 17 |
extension/package.json |
Task 25 |
extension/src/constants.ts |
New sentences, WIKI_SKILL_STEP_TIMEOUT_MS |
extension/src/tests/*, extension/scripts/tests/package.test.mjs |
Tests |
extension/README.md, CHANGELOG.md, README.md |
Docs |
Out of scope
- New execution forms (the Node server profile is the next feature cycle).
- Assigned keybindings, E8, progressive generation, a generate-bound setting and the other later candidates of Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132.
- Native Windows and Ubuntu use.
- Any change to the skill's generation procedure beyond the renderer (task 1).
Owner decisions
-
Standing: the owner's goal (every resource to the product; never spend money or break the law); the owner cannot answer, so each decision takes the recommended option, named here.
-
O1 (recommended): three PRs, merged in order, each passing its own reviews, CI, gate and CodeRabbit approval (AGENTS.md Delivery):
codex/cycle-0056-pt1Part A (tasks 1–14),codex/cycle-0056-pt2Part B except tasks 17 and 23 (tasks 15, 16, 18–22, 24, 25),codex/cycle-0056-pt3tasks 17 and 23, N56 and any fix N56 needs. Why: three areas with separate files; a smaller PR converges faster through/shipand CodeRabbit. Task 17's investigation starts at once, in parallel, because its cause is unknown and it is the only major defect. -
O2 (recommended): N56 runs once, on pt3's candidate (it carries pt1 and pt2), so one native session covers tasks 15, 16, 17, 23, 25 and the skill identity. If task 17's fix needs a native check earlier, a bounded N56 step 1 runs on its own candidate first.
-
O3 (recommended): task 25's design decisions as written in the task (icons, Title Case for command titles, sentence case in running text and the v9 link, the welcome line, row 5's click).
-
O4 (recommended): task 15's status line in both hosts (Cursor's own model access may also ask), always while waiting, not only on a first question: the reader cannot know whether consent was given.
-
O5 (recommended): gstack's upgrade prompt (v1.91.246.0 → v1.91.248.0) at
/specwas snoozed ("Not now"), so the tools do not change mid-cycle. -
O6 (owner, 2026-10-27): 「次のサイクルからGitHubのコード、Rabbitのレビューはトリガーさせないでください。」 From Cycle 0057 on, the hosted CodeRabbit review is not triggered: CodeRabbit reads
.coderabbit.yamlfrom the PR's feature branch, so Cycle 0057's first commit setsreviews.auto_review.enabled: falseand AGENTS.md drops the hosted-review merge condition (the local CodeRabbit CLI and OCR stay). pt3 (PR v0.2.49.0 fix: Cycle 0056 pt3: a saved test replay opens in Cursor, and the LLM Wiki view's message and rows change in one frame #138), this cycle's last PR, still follows the 2026-10-23 rule (APPROVED on the exact head). -
O7 (owner, 2026-10-27): asked to switch VS Code to GPT-6.1 Terra. The Space VS Code's Copilot picker has no GPT-6.1 Terra or GPT-6.1 Luna (
terra→ GPT-5.6 Terra;6.1→ GPT-6.1 Sol;luna→ GPT-5.6 Luna, GPT-6 Luna). The owner chose to keep GPT-6 Luna and switch once GPT-6.1 Terra or Luna is listed; the picker is checked before each VS Code trial.
Next action
- Status: closed. Every task (1–34) is closed in this Issue.
- Result: demonstrated. N56 passed every step on pt3's candidates (tasks 15, 16, 17, 23, 25, 29, 31, 32, 33); task 34 was found and fixed by pt3's gate.
- Delivery: merged. pt1
086211db(PR v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, stops or passes its bound, and releases or writes back what it claimed #136, v0.2.47.0), pt2ce97422a(PR v0.2.48.0 fix: Cycle 0056 pt2: the LLM Wiki view and the reader say what is true while a run starts, fails, hides or cannot reveal its folder #137, v0.2.48.0), pt35b992ea5(PR v0.2.49.0 fix: Cycle 0056 pt3: a saved test replay opens in Cursor, and the LLM Wiki view's message and rows change in one frame #138, v0.2.49.0). Not packaged for publication, not installed-verified on the released build (N56 ran on development candidates). - Next: the Node server feature cycle (O2 of Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132), via
/specand the plan reviews. Its first commit applies O6 (no hosted CodeRabbit) and records O6 and O7 in AGENTS.md.
Activity
ryota-murakami commentedon Oct 26, 2026
Entry (2026-10-26, ready → implementing)
/spec. AGENTS.md is in context as project instructions (O10 of Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132).docs/designs/assets/codebook-product-spec-v9.png, opened with an image tool: 1024 × 1536, 1,878,402 bytes, SHA-256f189ee82…caf2aa. Regions: 1 (live), 2 (replay), 3 (DeepWiki) and the shortcut strip.origin/main298e90bd(v0.2.46.0). Branchcodex/cycle-0056created from it;codex/cycle-0056-pt1follows for Part A. The localmainholds two docs commits of 2026-10-22 whose contentorigin/mainalready carries; it is left as is./spec's Codex quality gate: 8/10 (its eight ambiguities folded in before filing: task 23 moved to pt3, pre-merge evidence versus N56 acceptance, N54/N55 evidence locations, task 13's wording and late settle, task 16's native fallback, task 14's closure threshold, the gate enumerated, the outcome bounded to the tasks' scenarios).ryota-murakami commentedon Oct 26, 2026
Task 17 (N55-F4): root-cause analysis from N55's Cursor Output log and the code (2026-10-27)
Evidence: N55 step 7's Cursor Output log (two
presentation:placement-refusedentries, 04:51:58 and 04:52:21 PDT) and its action log, read againstorigin/main298e90bdand Cursor's extension-host code (VS Code base 1.128.0).studyWorkspace.ts~8223), but the drain that waits for a disposed pane's tab to close (retiredStudyPaneClosed) runs only for a group Codebook created (retiredContextGroup). Cursor first reports the next tab of the group as active ($acceptTabOperation, no group event, the disposed tab still listed) and only then the close; the next guarded read'sretainPresentationPlacementsees its focused tab no longer active and refuses. This matches the log exactly: the$acceptTabOperationstack, armed 2 ms before, identical before/after listings, no events (the report records group events only). Cursor does not replaceTabobjects on a tab operation; the active-tab pointer moves.tellTestReplayOpenFailure~12070,answerFailedTestReplayOpen~11976) whileopenNodeHistoryFromHostholds the test-replay entry turn (~11830–11834). Every later entry waits behind it without a notice or an Output entry; only settling that notification or reloading the window frees it.$acceptTabGroupUpdate). H2-a: the editor's late report of Codebook's ownapp.reveal(undefined, true)before the arrangement's read; H2-b: a late activation from the Application group's allocation (reserveApplicationGroup). The refusal report cannot tell them apart today.Plan (pt3, branch
codex/cycle-0056-pt3, in its own worktree): stage 1 fixes 1 and 2 with red-first host tests (a harness mode that reports the next tab active before the close; an unsettled error notification) and extends the refusal report with the guard's call site, the failed sub-check, each group's active tab, tab operations and Codebook's own native effects since arming. Stage 2: the driving agent reproduces refusal 1 natively in the Space's Cursor with that build, decides H2-a or H2-b, and the fix follows with its test.ryota-murakami commentedon Oct 26, 2026
Task 17: first native check of pt3 stage 1 (2026-10-27, Space
local:codebook-qa, Cursor 3.27.12)codex/cycle-0056-pt3at8b76a578(stage 1: the Study-pane drain, the unblocked entry turn, the dropped-choice Output entry, the richer refusal report), packaged ascodebook-c56pt3-8b76a578.vsix, SHA-256d6546e7791b32fe56771e296a3a28609b4003f4d4036a2adc6cf514ecbeec4fe(same on both sides), installed in Cursor as 0.2.46 in the designatednextjs-dashboardwindow (1936e41), then Developer: Reload Window.Captured-data.test.ts:119, call stack and variables), and after Close Study Workspace another test replay (3 of 3) opened too. No refusal; Codebook's Output log has no entry after the reload. Refusal 1 did not reproduce (a rare race), so pt3 stage 2 hardens against both hypotheses (the Application reveal's late report; the allocated group's late activation), each with a host test that fails without it, and the diagnostics stay so a recurrence names its cause.… resulted in an error: Webview is disposed: stage 1's effect note readviewType/viewColumnof a pane the editor had already disposed. Fixed ine0beb1f3(describePaneIdentity), with the test "closing the Study workspace ends without an error when the editor already disposed its panes", red on8b76a578. Not in any released build.ryota-murakami commentedon Oct 26, 2026
Progress (2026-10-27): pt2 and pt3 implemented, pt1 finishing
codex/cycle-0056-pt2, own worktree): tasks 15, 16, 18–22, 24, 25 in93491108,638ee6ca,c5d82dd8, each behaviour change with a red-first test (red lines in the commits' reports). Driving agent's re-run:format:check,typecheck,lint,health:static,dupes,dead-code,buildexit 0; 352/352 focused tests (LLM Wiki view, read loop, facts, state, manifest, reader page, generate and update flows, extension). Native claims of 15, 16 and 25 wait for N56.codex/cycle-0056-pt3, own worktree): task 17 in six commits: the Study-pane drain (7a6a203c), the unblocked entry turn (5934fa0f), the dropped-choice Output entry (a0f812bf), the richer refusal report (8b76a578), the disposed-pane note fix found natively (e0beb1f3), and the hardening against both refusal-1 races: the Application reveal skipped or awaited (64e79fe6) and the allocated group's late activation awaited up toLATE_GROUP_ACTIVATION_WAIT_MS= 150 ms (09a21958); 2123/2123 focused tests. Task 23 and N56 follow on pt3's candidate.studyWorkspaceRemovalunder load) in progress./ship.ryota-murakami commentedon Oct 26, 2026
pt1: local reviews (2026-10-27)
codex/cycle-0056-pt1: tasks 1–13 (0bc08ceb,545de338,d0d9117c,b6630ece,a247ef6b), task 14 (ea5a73aa: the test's save without a folder escaped the EACCES window under load; a 400 ms hold onrecordings.startreproduced the 2026-10-26 diff every time; 20/20 runs of the file), task 26 (aeae9bf5).coderabbit review --agent --committed --base origin/main -c .coderabbit.yaml --fresh): completed, 36 files, 1 minor: a written-back reservation loses its originalrunKind(CR1).298e90bd..codex/cycle-0056-pt1): 21 reviewable files, 21 reviewed (100 %), 15 default exclusions (tests, README, SKILL.md) reported apart. 1 medium, 6 low: M1 a written-back reservation is not registered again in this window's reservations (its bound timer, shutdown drop and a second take-over miss it); L1 the reservation read before the claim; L2 a Stop in the same tick the skill step settles is lost; L3 a late deploy may overlap a new one; L4 a stale docblock; L5 an empty-path fallback sentence; L6 marker-change listeners notified before the change counter./shipfor pt1.ryota-murakami commentedon Oct 26, 2026
Entry after compaction + pt1
/shipprogress (2026-10-27)docs/designs/assets/codebook-product-spec-v9.png, opened with an image tool: 1024 × 1536, 1,878,402 bytes, SHA-256f189ee82…caf2aa(matches Design target). Regions: 1 (live), 2 (replay), 3 (DeepWiki) and the shortcut strip.codex/cycle-0056-pt1atbd0035a1, clean./shippt1, Step 9 pass 1 (review army + red team + QA smoke): 19 findings, all fixed inbd0035a1. They include: a written-back reservation now keeps the original owner's identity; closing the window aborts the Cursor skill step; one verb for the skill-step cancel; three load-flaky write-back tests now wait on the observable written-back state.bd0035a1.dist) during it, giving 172ENOENTfailures.ryota-murakami commentedon Oct 26, 2026
pt1:
/shipdone, PR #136 open (2026-10-27)5ce6fb11. It covers tasks 1–14 and 26 plus the review fixes./shipreview: three fixing cycles,converged:false(ship review limit).bd0035a1), pass 2 (14,7cc10ed1), and pass 3 with the Step 11 adversarial review (15 + 6 + Codex P2,6dae7854) are all fixed.3b06cadb, red on6dae7854.unverified).35054308passed 14 of 15.test:packagehad 2workflowPinsfailures:longestWikiRunMs.ts, split out by task 3 and loaded by the Windows marker tests, was missing from the Windows job's path filter and pin.5ce6fb11. Every check whose inputs it changes ran again there and is green: pregate,format:check,typecheck,lint,health:static,dupes,dead-code, andtest:packagewith 1077 tests, 0 fail.test7258 tests (0 fail), the 5 Reader DOM checks,health, and the restore hook 9 of 9./coderabbit-resolver), then merge with--match-head-commit. After that, rebase pt2 onto it.fix: resolve CodeRabbit review findings
v0.2.47.0 fix: Cycle 0056 pt1: an LLM Wiki start says when it joins, …
ryota-murakami commentedon Oct 26, 2026
pt1 merged (2026-10-27): PR #136,
086211db, v0.2.47.0gh pr merge 136 --squash --match-head-commit d0c38b8f.5ce6fb11: CHANGES_REQUESTED.await earlierStepnow fails that test.5aae743e.5aae743e: APPROVED, with one outside-diff Minor: labels with one midpoint were keyed into different bands.d3782356, together with two more collisions that have the same cause: a row's label under a gap stack, and two horizontal pairs with one midpoint.5aae743e.d3782356: APPROVED, with one outside-diff Minor: the packaged README's marker sentences. Fixed ind0c38b8f.d0c38b8f: APPROVED, no findings.d3782356.d0c38b8fchanges only the README; the checks that read it ran again and pass (pregate,format:check,test:package1080 tests, 0 fail)./shipreview:converged:false(ship review limit). Every last-round finding is fixed, and no Critical or Major defect is still open.086211dband/shipit.ryota-murakami commentedon Oct 26, 2026
pt2:
/shipdone, PR #137 open (2026-10-27)7ccdfdd9. It covers tasks 15, 16, 18–22, 24, 25.086211db(part 1, merged); range-diff shows the reviewed commits are identical.d0052c4f./shipreview: three fixing cycles,converged:false.386449b1,abd06854,c82e4be8.7ccdfdd9:pnpm test7310 tests, 0 fail;test:package1080 tests, 0 fail;healthexit 0;ryota-murakami commentedon Oct 26, 2026
pt2 merged (2026-10-27): PR #137,
ce97422a, v0.2.48.0--match-head-commit 7ccdfdd9after required CI was green and hosted CodeRabbit was APPROVED on that exact head (no findings, no threads).7ccdfdd9./ship:converged:false; every finding is fixed and no Critical or Major defect is still open.ryota-murakami commentedon Oct 26, 2026
Entry after compaction + N56 step 1 (Cursor), 2026-10-27
Entry. I read these from disk after the latest compaction:
AGENTS.md is in context as project instructions.
Image. I opened
docs/designs/assets/codebook-product-spec-v9.pngwith an image tool. It is 1024 × 1536, 1,878,402 bytes, SHA-256f189ee82…caf2aa, which matches Design target. It shows regions 1 (live), 2 (replay), 3 (DeepWiki) and the shortcut strip.State. The pt3 worktree
codex/cycle-0056-pt3is at5b39b767, clean, on top oforigin/maince97422a.N56 step 1, Cursor 3.27.12, Space
local:codebook-qaCandidate.
codebook-c56pt3-5b39b767.vsix, SHA-2568913fcc6…6f40(same on the Mac and in the Space). It was installed in the designatednextjs-dashboardwindow (1936e41), followed by Developer: Reload Window.Take. The OBS window capture is
n56-step1-cursor.mp4: 435.17 s, 1920 × 1050, 30 fps, SHA-256fabdb15d…9ebc5. It is in the Mac's ignoredartifacts/cycle-0056/n56/with the action log (step1-actions.txt), contact sheets and the frames that were inspected.Task 17: PASS on this candidate.
Task 29: evidence for Cursor. From the frames, the time from a Saved studies choice to the replay shown is about 1.3–1.7 s, so the 5 s pre-drain wait was never reached. VS Code's open time follows in the VS Code steps.
Found, recorded as tasks 31 and 32 (fixed in pt3):
changeevent for the entry it already shows.Next: tasks 31 and 32 are fixed (red-first) in parallel with N56 steps 2–6 on this candidate. Step 1 runs again on the next candidate.
ryota-murakami commentedon Oct 27, 2026
N56 steps 2–6 on the candidate
5b39b767(Spacelocal:codebook-qa, 2026-10-27)All evidence is in the Mac's ignored
artifacts/cycle-0056/n56/(step2/,step3/,step4/,step5/,f3/). Each file's SHA-256 matches on both sides.workbench.trust.manage. Cursor has noworkbench.action.manageTrust. Fixed in053b0395on the side branch: one id, no lookup. Details in task 23.The extension 'codebook' wants to access the language models provided by GitHub Copilot.was up, the reader showedAsking the editor model… The editor may first ask you to allow Codebook to use it; answer there.After Allow, the answer came with source citations (search.tsx, 300 ms debounce, page.tsx, table.tsx). Allow restored the access.803be8fdon the side branch, with a test of the extension host's 200 ms debounce. A native rerun follows on the next candidate.• VS Code's running row: Stop Watching
eye-closed, Open Chat, Show Output.• Cursor: the welcome's fourth line with the sentence-case
Change locationlink; the Wiki rows; the stopped row's Try Againdebug-restart(row selected).Compared with N55's
welcome-both.pngand the v9 region 3 (Output: project folder / Change location): the wording and link follow O3, and nothing else moved.• VS Code loads the bundled
skills/codebook/SKILL.mdbf60616e…(1.0.50) throughchatSkills, and this run's generation ran that folder'spublish-wiki.mjs.• Cursor's
~/.cursor/skills/codebook/SKILL.md067c5a95…is exactly the bundled body with{{CODEBOOK_PUBLISHER_PATH}}filled in (recomputed).Prerequisite for steps 3–5. A real LLM Wiki of the QA clone (
1936e419) was generated in VS Code by Copilot Chat (GPT-6 Luna) through the view's Generate LLM Wiki:Cursor's view showed the same Wiki as
Wiki source current.Found: N56-F3, recorded as task 33: a deleted Wiki folder stays in the view. It is fixed in
b5dff63aon the side branch; the watcher stands on the project root.Preserved and restored:
Next.
ryota-murakami commentedon Oct 27, 2026
N56 rerun on candidate
02acefaa(2026-10-27, Spacelocal:codebook-qa)Candidate.
02acefaa: tasks 17, 28, 30, 31 and 32, then 23, 33 and task 16's H2, cherry-picked from the side branch.distfiles from the deletedresolveManageTrustCommandwere still present; it passed after a cleandist.format:check,typecheck,lint,health:static,dupesanddead-codeall exit 0.codebook-c56pt3-02acefaa.vsix, SHA-2565f5def7c…7a7b, checked bycheck-package.mjs, with the same hash on both sides.dist/extension.js105bbc3a…in all three), followed by a reload.Evidence. All files are in
artifacts/cycle-0056/n56/rerun/, with matching SHA-256 on both sides.• OBS take
rerun1-cursor.mp4(5094c252…, 278.9 s, 30 fps).• N54's test replay opened five times, alternating with the 3-of-3 replay over 8 opens; no refusal.
• Every open resumed at the saved position, and each Previous or Next event moved exactly one stop: 121.31→107.48, 107.48→121.31, 107.48→88.67, 88.67→107.48 s.
•
Codebook.loghas no entry after the reload; its last write is N55's 04:52.Choose a saved study. Choosing the replay the closed reader showed opened it at once (open 2).• All 8 opens were classified frame by frame (OCR of the summary title, 9 s window each,
rerun1-summary-ocr.txt).• Every open after Close went
Open saved learning…→ oneLoading study…frame → the chosen replay.• No frame showed the previous replay. Before this fix, 3 of 8 transitions did.
rerun33-vscode-delete.mp4477c63c1…).•
rm -rf .codebookbrought the no-Wiki welcome (Generate LLM Wiki) back without a Refresh (t33-after-10s.png).• Restoring the folder brought the Wiki rows back (
t33-restored-8s.png).• Cursor:
codebook.llmWiki.manageTrustopenedWorkspace Trust — nextjs-dashboardtwice; the second time was after the tab was closed.• VS Code: the untrusted row's inline action opened the Workspace Trust editor (
t23-vscode-trust-editor-02acefaa.png).• A watched update ran, with Update LLM Wiki pressed after a QA-owned comment edit made the Wiki stale. It published in 8 m 42 s.
• In
rerun4-vscode-update.mp4(4f0063f2…), at the run's end, frame 251 shows the message with the run rows; frame 252 shows the message gone and the "Updating…" row still there; frame 253 shows the new rows.• H2 cut the lag from 7 frames (rows first) to 1 frame (message first, ≤33 ms).
• Cause of the rest: the extension host sends
$setMessagesynchronously but only queues the refresh, and the rows need a$refresh→$getChildrenround trip.• H3 (in progress): write the new message inside the root
getChildrenthat this refresh causes. It then leaves on the same channel just before the rows' reply.• The task stays open until a native take shows message and rows in one frame.
Notes.
scratch/audit-wiki-sources.mjs) was skipped: I had removed the scratch folder too early. The update had already published and validated, and the chat reported the skip.app/lib/utils.tsstays for now as the next stale trigger; it is reverted at the end of N56.ryota-murakami commentedon Oct 27, 2026
pt3: native check of task 16 H3 and the local reviews (2026-10-27)
Task 16 native check. Candidate
7ff3ab57(codebook-c56pt3-7ff3ab57.vsix, SHA-256fb5fbfd6…1420; full lane 7337 tests, 0 fail) passes natively in VS Code (details in task 16 of the body). Every native check that N56 requires has now passed.Local reviews of pt3 on
7ff3ab57, againstorigin/maince97422a:coderabbit review --agent --committed --base origin/main -c .coderabbit.yaml --fresh)// PROBEcomment, and its expected read count is derived from the measured state. Two are minor: a closed reader's list keeps an unopenable choice, and one refusal report path skips label sanitizing.open-code-review-delegate(rangece97422a..7ff3ab57)All 8 findings are being fixed now, since this is a bug-fix cycle. After that:
/shippt3.ryota-murakami commentedon Oct 27, 2026
pt3: local review fixes and native recheck (2026-10-27)
Fixes. All 8 local review findings are handled in
6aac5414and932cdae3:changefailure does not apply. A Reader DOM case guards this.Gate on
932cdae3.format:check,typecheck,lint,health:static,dupesanddead-codeall exit 0. Full lane: 7344 tests, 0 fail, 6 skipped.Native recheck of task 32. Candidate
codebook-c56pt3-932cdae3.vsix(SHA-256fcb8bb73…fe34), Cursor 3.27.12, designated window, taket32-recheck-cursor.mp4(ff68b506…, matching on both sides). I made four opens after a reload: N54 → Close → 3/3 → Close → N54 → Close → 3/3. Results:t32-recheck-ocr.txt,t32-recheck-transitions.png).Next:
/shippt3.ryota-murakami commentedon Oct 27, 2026
Entry after compaction + pt3
/shipprogress (2026-10-27)docs/designs/assets/codebook-product-spec-v9.png, opened with an image tool (a 1000 px copy): 1024 × 1536, 1,878,402 bytes, SHA-256f189ee82…caf2aa(matches Design target). Regions: 1 (live), 2 (replay), 3 (DeepWiki) and the shortcut strip.codex/cycle-0056-pt3at25ff222fonorigin/maince97422a; uncommitted: the 0.2.49.0 release edits (VERSION,extension/package.json,EXTENSION_VERSION, the package test pin, CHANGELOG, root README)./shippt3 review: three fixing cycles,converged:false(ship review limit). Pass 1 (784f03a4), pass 2 (eb9c9b11), pass 3 with the Step 11 adversarial reviews (25ff222f) are all fixed; no Critical or Major defect is still open, so none is recorded. Last lane on25ff222f: 7397 tests, 7391 pass, 0 fail, 6 skipped.ryota-murakami commentedon Oct 27, 2026
pt3:
/shipdone, PR #138 open (2026-10-27)1074b351. It covers tasks 16, 17, 23, 28–34 and the review fixes./shipreview: three fixing cycles,converged:false(ship review limit). Every finding of passes 1–3 and the Step 11 reviews is fixed (784f03a4,eb9c9b11,25ff222f). No Critical or Major defect is still open, so none is recorded.577ba5e5).b5227ce9passed 14 of 15.pnpm healthfailed with 35 findings in unchanged files, because Fallow reused a stale graph cache in the checkout.origin/mainin a fresh worktree.1074b351: the measured Fallow runs pass--no-cache. The test is red without the fix.1074b351:pnpm test: 7397 tests, 0 fail;test:package: 1081 tests, 0 fail;health: exit 0;ryota-murakami commentedon Oct 27, 2026
Cycle 0056 closed (2026-10-27): every carried defect is fixed; nothing is carried
Outcome: demonstrated. All 25 defects that Cycle 0055 carried, and the 9 found in this cycle (tasks 26–34), are closed. Each one has either a fix with a test that fails without it, or recorded evidence (tasks 3, 8, 24 behaviour-neutral or doc-only; task 29 native evidence).
Delivery (merged):
086211db: PR #136, v0.2.47.0, tasks 1–14 and 26.ce97422a: PR #137, v0.2.48.0, tasks 15, 16 (code), 18–22, 24, 25 (code).5b992ea5: PR #138, v0.2.49.0, tasks 16 (H3), 17, 23, 28–34.bfe62b32./shipendedconverged:false(ship review limit). No Critical or Major defect was left open, so none is recorded.Native (N56, development evidence only): in the Space
local:codebook-qaon pt3's candidates (02acefaa,7ff3ab57,932cdae3), VS Code 1.142.0 and Cursor 3.27.12, targetnextjs-dashboard1936e41. Steps 1–6 passed. The released source adds review fixes after those candidates, and N56 was not re-run on it.Carried defects: none. The next cycle is a feature cycle: the Node server profile (O2 of #132, the largest AC-REAL-PROJECTS gap). It is planned with
/specand the plan reviews.reviews.auto_review.enabled: falsein the cycle branch's.coderabbit.yaml, and AGENTS.md drops the hosted-review merge condition.Later candidates (no carried defect): per-step I understand this step (E8, AC-LEARNING), assigned keybindings (AC-SHORTCUTS), and native Windows/Ubuntu use (goal v10).