Skip to content

Cycle 0056: every defect Cycle 0055 carried is fixed (Wiki runs, the LLM Wiki view, the reader, test replays in Cursor) #135

Closed

Description

@ryota-murakami

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).

  1. 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:3 laneGap: 34, :146 the lane offset, against ~22-character labels). Fix: the vertical lane offset grows with the label box so two branch edges 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 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.
  2. 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 shows Codebook 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 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.
  3. 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:12 also holds describeMissingWiki; wikiRunBoundMs.ts:50,61 also hold longestWikiRunMs and LONGEST_WIKI_RUN_MS; wikiRunRecord.ts:25 also holds agentExitOf; An LLM Wiki already exists in <folder>. Update it instead? is inline at extension.ts:2439. Fix: each into its own utils/ file (the constant into constants.ts), the sentence as describeExistingWiki beside describeMissingWiki. Evidence: behaviour-neutral (existing tests stay green); health:static and dupes stay clean. Closed: done 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); behaviour-neutral, existing tests green, health:static and dupes clean.
  4. 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.showWikiOutput and the "nothing running" branch of codebook.cancelWikiRun. Fix: host tests (the harness's createOutputChannel stub records show); the nothing-running branch shows No LLM Wiki run is going on in this window.. 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.
  5. 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.
  6. 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:665 reads the refusal after a fixed race. Fix: await the refusal notice through the harness. 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.
  7. wikiRunRecord rows (Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132 task 14). No row for already-current, a failed end with site: 'replaced', or an output folder equal to the home folder. Fix: those three rows in the record's table test. 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.
  8. 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,164 doc comments and its @example say 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 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), checked by reading.
  9. "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.ts says cancelled in one notice and stopped in its sibling for the same act. Fix: one verb per host: VS Code stopped watching, Cursor cancelled, in every notice, row 3 cause and Output summary. Wording test over every generate end per host. 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.
  10. 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 reads The 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 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.
  11. 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,119 claim.release().catch(() => false), and the closing-window path in extension.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 throws EBUSY, the retry removes the marker. 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.
  12. 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 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.
  13. 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 an AbortSignal that Stop LLM Wiki Run and a 30-second bound (WIKI_SKILL_STEP_TIMEOUT_MS = 30_000) abort. On Stop the start ends with The LLM Wiki <generation|update> was stopped while Codebook readied the Cursor skill; no agent was started.; at the bound with Codebook 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 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.
  14. studyWorkspaceRemoval fails 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 with EACCES while all files ran; alone it passed 10 of 10. Closes with the cause (the path that answered EACCES and 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 the EACCES window under load; a 400 ms hold on recordings.start reproduced it every time), fixed in ea5a73aa (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); 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).

  1. 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 reads Asking 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/).
  2. 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:206 sets treeView.message synchronously while the tree re-renders after getChildren, 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 root getChildren call (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's onDidChangeTreeData render settles, observed natively) is tried within this cycle. Code merged 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); 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 candidate 5b39b767, at a watched generation's end (OBS take take-gen-end-vscode.mp4 84f54659…, 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 message Codebook 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 one Event.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 root getChildren of that refresh. Closed: H3 fixed in 7ff3ab57 (pt3), red first against a model of the extension host (the message write rides the root getChildren of the refresh). N56 step 4 on 7ff3ab57: natively PASS (h3-vscode-update.mp4 3d68d280…, 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.
  1. 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, guard StudyWorkspace.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 and codebook://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, candidate 02acefaa): 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.mp4 5094c252…). Closed: merged in 5b992ea5 (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).
  2. 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.ts tests (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 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.
  3. 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). readLlmWikiViewFacts reads 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 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.
  4. 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.
  5. 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). revealFileInOS does nothing visible there. Fix: a missing folder shows The LLM Wiki folder <label> does not exist (yet).; a remote workspace shows Reveal Wiki Folder opens folders on this computer only; the Wiki folder is on <remote name>.. Host tests. 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.
  6. 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 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.
  7. 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 and resolveManageTrustCommand.ts probes getCommands. 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 share workbench.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 candidate 5b39b767, Codebook's codebook.llmWiki.manageTrust opened Cursor's trust editor (window title Workspace Trust — nextjs-dashboard). Cursor's Keyboard Shortcuts editor lists workbench.trust.manage, and @command:workbench.action.manageTrust matches nothing. Fix (in progress): one id kept, the lookup dropped, and the notice kept for an editor without the command. Closed: fixed in 26a12eda (pt3); natively PASS in both hosts on 02acefaa.
  8. 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.ts names the 7-character revision fullRevision; isCursorHost ? 'cursor' : 'vscode' is written seven times in extension.ts; two learner sentences are inline in registerLlmWikiCommands.ts:81,113. Fix: shortRevision, one wikiHost value, the sentences in constants.ts. Behaviour-neutral. Closed: done 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); behaviour-neutral, existing tests green.
  9. 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's Change location link); the welcome's fourth line reads The Wiki is written to .codebook/wiki unless the setting codebook.wikiOutputDirectory names another folder. followed by the Change location link; row 5's click opens the setting (its description Change location then 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 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); 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 Watching eye-closed; Cursor's welcome line and link, its rows, and Try Again debug-restart. Closed: code 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), native evidence N56 step 5; closed with pt3's merge 5b992ea5 (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).

  1. 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, before settleWikiRunMarker writes 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.

  2. Close Study Workspace failed with Webview is disposed (found natively in the Space on pt3's stage-1 build 8b76a578, never released): the new effect note read a disposed pane's getters. Fixed in e0beb1f3 with "closing the Study workspace ends without an error when the editor already disposed its panes" (red on 8b76a578).

  3. 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 with 2 !== 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" got 2 !== 1 at 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.

  4. The Study-pane pre-drain may delay a test replay's open by up to 5 s (found in pt3 while fixing task 28): retiredStudyPaneClosed after 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.

  5. A Study-workspace reader test times out under full-lane load (found in pt2's /ship lane on 386449b1, 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 with Timed 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 in 5b39b767 (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).

  6. 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 no change event, so no open is asked; the learner must choose another study first. Fix: a closed reader names no chosen entry in the list (it reads Choose 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 in 9fd7e6cc (Reader DOM case red first); natively PASS on 02acefaa.

  7. 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 and Stop 2 of 3) for 1–2 frames (33–67 ms at 30 fps) beside The recorded source is opening in its native pane., then the chosen replay. Cause: Close keeps selectedNodeHistory (by design, above); the open from a closed reader runs open() → showLearningSummary() → publish() while that selection is still set, before openNodeHistory replaces 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 in 506200e2 (host tests red first); natively PASS on 02acefaa (0 of 8 opens drew another replay).

  8. 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). After rm -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 .codebook exists, keepWatcher (llmWikiView.ts) stands the watcher on that folder itself (the nearest existing folder above the output), and describeWikiWatch plans 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.txt 750fcff3…, screenshots 8fdc1f96…). Closed: fixed in e816e184 (host tests red first); natively PASS on 02acefaa.

  9. pnpm health judged a stale Fallow graph cache, not the source (found by pt3's exact-HEAD gate on b5227ce9). 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 did origin/main ce97422a in a fresh worktree; the two failing runs had reused extension/.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 in 1074b351, with the test "a measured run leaves no Fallow cache in the checkout…", red without the fix (a .fallow folder after a passing run); health.test.mjs 22/22.

Acceptance criteria

  1. 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.
  2. 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.
  3. 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-dashboard at 1936e41 (~/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 replay fbd584e0…_6cf9fd04… is saved (N55 step 7; before/after lists and Cursor's Output log in the Mac's ignored artifacts/cycle-0055/n55/n55-step7-evidence.tgz, SHA-256 5e2c5bf1…). codebook://node-history is read with N54's helper read-all.mjs through 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.png c9f8354f…, n55-icons.tgz 43fb5114…).
    • Evidence leaves the Space for artifacts/cycle-0056/n56/ with matching SHA-256 on both sides.
    1. 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.
    2. 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).
    3. 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.
    4. VS Code: at a watched update's end, frames show the message and the rows change in the same frame (task 16).
    5. 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.
    6. The loaded skill identity (task 1's new version) in both hosts.
  4. Each new or changed test states protects=…; fails_when=…; no_claim=…; changes to existing tests are reported with their reason in the PR.
  5. 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); from extension/: pnpm test:package, then pnpm health; from the root: node --test .codex/restore-product-context.test.mjs. Required CI passes, and hosted CodeRabbit is APPROVED on the exact head.
  6. Every user-visible change has a CHANGELOG entry and its sentence in extension/README.md.
  7. pnpm --dir extension health:static and pnpm --dir extension health pass against their committed baselines (extension/fallow-health-baseline.json, extension/fallow-health-measured-baseline.json), which this cycle does not re-save.
  8. The closing comment states that nothing is carried (or names what the /ship review 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

  1. Acceptance criteria are the protects / fails_when / no_claim profile of each test: the observable it protects, the wrong result it rejects, and what green does not prove. Never "make the tests pass".
  2. 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.
  3. 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.
  4. 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.
  5. Your report is a claim until the parent re-executes it: say what you verified, what you reused, and what you could not check.
  6. Red first: write the test, see it fail on the unfixed code (copy the fixed file aside and git checkout HEAD -- <file>; never git 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

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-pt1 Part A (tasks 1–14), codex/cycle-0056-pt2 Part B except tasks 17 and 23 (tasks 15, 16, 18–22, 24, 25), codex/cycle-0056-pt3 tasks 17 and 23, N56 and any fix N56 needs. Why: three areas with separate files; a smaller PR converges faster through /ship and 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 /spec was 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.yaml from the PR's feature branch, so Cycle 0057's first commit sets reviews.auto_review.enabled: false and 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

Activity

  1. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    Entry (2026-10-26, ready → implementing)

    • Reads, from disk in this session after the latest compaction: PRODUCT_GOAL.md in full (goal version 10, all 444 lines); Cycle 0055: Codebook's Activity Bar generates, opens and updates the LLM Wiki, re-proven natively in both hosts #132's body and comments, including its closing comment, from which this Issue was written by /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).
    • Image. docs/designs/assets/codebook-product-spec-v9.png, opened with an image tool: 1024 × 1536, 1,878,402 bytes, SHA-256 f189ee82…caf2aa. Regions: 1 (live), 2 (replay), 3 (DeepWiki) and the shortcut strip.
    • State. origin/main 298e90bd (v0.2.46.0). Branch codex/cycle-0056 created from it; codex/cycle-0056-pt1 follows for Part A. The local main holds two docs commits of 2026-10-22 whose content origin/main already carries; it is left as is.
    • Plan check. /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).
    • Next: Part A implementation (subagent) and task 17's reproduction in the Space's Cursor (driving agent), in parallel.
  2. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    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-refused entries, 04:51:58 and 04:52:21 PDT) and its action log, read against origin/main 298e90bd and Cursor's extension-host code (VS Code base 1.128.0).

    1. Refusal 2 — cause found (high confidence). The second open came from the Study pane that refusal 1's recovery created inside the learner's group 3. The test-replay composition disposes that pane (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's retainPresentationPlacement sees its focused tab no longer active and refuses. This matches the log exactly: the $acceptTabOperation stack, armed 2 ms before, identical before/after listings, no events (the report records group events only). Cursor does not replace Tab objects on a tab operation; the active-tab pointer moves.
    2. The silent selections afterwards — cause found (medium-high). The refused open awaits its sticky error notification (tellTestReplayOpenFailure ~12070, answerFailedTestReplayOpen ~11976) while openNodeHistoryFromHost holds 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.
    3. Refusal 1 — two hypotheses, undecided by the code. The active group moved to the Application's group 1 at +0 ms ($acceptTabGroupUpdate). H2-a: the editor's late report of Codebook's own app.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.

  3. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    Task 17: first native check of pt3 stage 1 (2026-10-27, Space local:codebook-qa, Cursor 3.27.12)

    • Build. codex/cycle-0056-pt3 at 8b76a578 (stage 1: the Study-pane drain, the unblocked entry turn, the dropped-choice Output entry, the richer refusal report), packaged as codebook-c56pt3-8b76a578.vsix, SHA-256 d6546e7791b32fe56771e296a3a28609b4003f4d4036a2adc6cf514ecbeec4fe (same on both sides), installed in Cursor as 0.2.46 in the designated nextjs-dashboard window (1936e41), then Developer: Reload Window.
    • Arrangement like N55's. Group A [actions.ts], group B (keyboard) [opengraph-image.png, data.test.ts, auth.config.ts, data.ts, login-form.tsx, utils.test.ts]; Saved studies from the bottom panel's Codebook view.
    • Result. N54's test replay (7 of 7, 10/25 6:02:34 PM) opened at its saved playhead (48.91 s, 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.
    • New defect found and fixed in this cycle. With that build, Codebook: Close Study Workspace failed with the modal … resulted in an error: Webview is disposed: stage 1's effect note read viewType/viewColumn of a pane the editor had already disposed. Fixed in e0beb1f3 (describePaneIdentity), with the test "closing the Study workspace ends without an error when the editor already disposed its panes", red on 8b76a578. Not in any released build.
  4. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    Progress (2026-10-27): pt2 and pt3 implemented, pt1 finishing

    • pt2 (codex/cycle-0056-pt2, own worktree): tasks 15, 16, 18–22, 24, 25 in 93491108, 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, build exit 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.
    • pt3 (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 to LATE_GROUP_ACTIVATION_WAIT_MS = 150 ms (09a21958); 2123/2123 focused tests. Task 23 and N56 follow on pt3's candidate.
    • pt1 (main checkout): tasks 1–13 committed; task 14 (studyWorkspaceRemoval under load) in progress.
    • Order (O1): pt1 → pt2 → pt3, each rebased on the merged previous part before its /ship.
  5. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    pt1: local reviews (2026-10-27)

    • State. 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 on recordings.start reproduced the 2026-10-26 diff every time; 20/20 runs of the file), task 26 (aeae9bf5).
    • Local CodeRabbit CLI (coderabbit review --agent --committed --base origin/main -c .coderabbit.yaml --fresh): completed, 36 files, 1 minor: a written-back reservation loses its original runKind (CR1).
    • open-code-review delegation (range 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.
    • Next. One fixer fixes all eight (bug-fix cycle), red-first; then /ship for pt1.
  6. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    Entry after compaction + pt1 /ship progress (2026-10-27)

    • Reads, from disk after the latest compaction: PRODUCT_GOAL.md in full (goal version 10, 444 lines); this Issue's body and its 5 comments. AGENTS.md is in context as project instructions.
    • Image. docs/designs/assets/codebook-product-spec-v9.png, opened with an image tool: 1024 × 1536, 1,878,402 bytes, SHA-256 f189ee82…caf2aa (matches Design target). Regions: 1 (live), 2 (replay), 3 (DeepWiki) and the shortcut strip.
    • State. codex/cycle-0056-pt1 at bd0035a1, clean.
    • /ship pt1, Step 9 pass 1 (review army + red team + QA smoke): 19 findings, all fixed in bd0035a1. 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.
    • Pass 2, at bd0035a1.
      • Full lane, run alone: 7236 tests, 7230 pass, 0 fail, 6 skipped. An earlier pass-2 lane is void: the driving agent ran a package build (it rebuilds dist) during it, giving 172 ENOENT failures.
      • Reviews: 3 critical, 11 informational.
        • SM-A: a window closing during the skill step drops another window's taken-over reservation after writing it back.
        • SM-B, SM-C: untested cells (the generate twin; a hung deploy at close).
        • RT-A: a second refused start writes back this window's identity.
        • RT-B: a hung skill step blocks later starts silently.
        • Four wording or doc fixes; two refactors.
      • All of them go to the Fix-First fixer now (bug-fix cycle: none skipped). Pass 3 is the last fixing cycle under the ship review limit.
  7. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    pt1: /ship done, PR #136 open (2026-10-27)

    • PR: #136, v0.2.47.0, head 5ce6fb11. It covers tasks 1–14 and 26 plus the review fixes.
    • /ship review: three fixing cycles, converged:false (ship review limit).
      • Pass 1 (19 findings, bd0035a1), pass 2 (14, 7cc10ed1), and pass 3 with the Step 11 adversarial review (15 + 6 + Codex P2, 6dae7854) are all fixed.
      • So is the pass-3 fixer's residual race: a start during Remove Managed Cursor Skill readied the skill. It is fixed in 3b06cadb, red on 6dae7854.
      • No Critical or Major defect is still open, so none is recorded.
      • Codex structured review is missing coverage: it answered in prose with no severity tags (unverified).
    • Exact-HEAD gate (AC 5):
      • The run on 35054308 passed 14 of 15. test:package had 2 workflowPins failures: 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.
      • The fix is 5ce6fb11. Every check whose inputs it changes ran again there and is green: pregate, format:check, typecheck, lint, health:static, dupes, dead-code, and test:package with 1077 tests, 0 fail.
      • The other checks have unchanged inputs: test 7258 tests (0 fail), the 5 Reader DOM checks, health, and the restore hook 9 of 9.
    • Next: required CI and hosted CodeRabbit APPROVED on the exact head (/coderabbit-resolver), then merge with --match-head-commit. After that, rebase pt2 onto it.
  8. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    pt1 merged (2026-10-27): PR #136, 086211db, v0.2.47.0

    • Merged with gh pr merge 136 --squash --match-head-commit d0c38b8f.
      • Required CI was green on that head.
      • Hosted CodeRabbit was APPROVED on that exact head, with 0 unresolved threads.
    • Hosted CodeRabbit reviewed four heads. Every finding is fixed:
      • 5ce6fb11: CHANGES_REQUESTED.
        • Two trivial inline findings: the renderer tests now assert every node and label id, and the serialised-deploy test waits on a checkpoint instead of a fixed 100 ms. Removing await earlierStep now fails that test.
        • One outside-diff finding: README's active cycle.
        • All fixed in 5aae743e.
      • 5aae743e: APPROVED, with one outside-diff Minor: labels with one midpoint were keyed into different bands.
        • Fixed in 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.
        • Three tests are red on 5aae743e.
      • d3782356: APPROVED, with one outside-diff Minor: the packaged README's marker sentences. Fixed in d0c38b8f.
      • d0c38b8f: APPROVED, no findings.
    • Gate (AC 5):
      • Full 15 of 15 on d3782356.
      • d0c38b8f changes only the README; the checks that read it ran again and pass (pregate, format:check, test:package 1080 tests, 0 fail).
    • /ship review: converged:false (ship review limit). Every last-round finding is fixed, and no Critical or Major defect is still open.
    • Tasks 1–14 are closed in the body (task 26 was closed earlier).
    • Next: rebase pt2 onto 086211db and /ship it.
  9. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    pt2: /ship done, PR #137 open (2026-10-27)

    • PR: #137, v0.2.48.0, head 7ccdfdd9. It covers tasks 15, 16, 18–22, 24, 25.
      • The branch was rebased onto 086211db (part 1, merged); range-diff shows the reviewed commits are identical.
      • Local CodeRabbit CLI (1 minor) and OCR (1 medium, 4 low) ran on this diff on top of part 1's head and are fixed in d0052c4f.
    • /ship review: three fixing cycles, converged:false.
      • Every finding of passes 1–3 and the Step 11 adversarial review is fixed: 386449b1, abd06854, c82e4be8.
      • No Critical or Major defect is still open.
      • Codex structured review is missing coverage (an untagged prose answer).
    • Found by this PR's lane, recorded as task 30 (fixed in part 3): a Study-workspace reader test timed out once under load. It passed 5 of 5 alone, and this PR changes no Study-workspace code.
    • Gate (AC 5): 15 of 15 on 7ccdfdd9:
      • pregate pass;
      • pnpm test 7310 tests, 0 fail;
      • test:package 1080 tests, 0 fail;
      • health exit 0;
      • restore hook 9 of 9.
    • Next: CI and hosted CodeRabbit APPROVED on the exact head, then merge. Part 3 is prepared in parallel: rebase, task 30, task 23, and N56.
  10. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    pt2 merged (2026-10-27): PR #137, ce97422a, v0.2.48.0

    • Merged with --match-head-commit 7ccdfdd9 after required CI was green and hosted CodeRabbit was APPROVED on that exact head (no findings, no threads).
    • Gate (AC 5): 15 of 15 on 7ccdfdd9.
    • /ship: converged:false; every finding is fixed and no Critical or Major defect is still open.
    • Tasks closed: 15 (code), 18–22 and 24.
    • Still open, code merged: tasks 16 and 25, until N56's frames and screenshots.
    • Next: pt3, which covers tasks 17, 23, 29, 30 and N56.
  11. ryota-murakami commented on Oct 26, 2026

    @ryota-murakami
    ContributorAuthor

    Entry after compaction + N56 step 1 (Cursor), 2026-10-27

    Entry. I read these from disk after the latest compaction:

    • PRODUCT_GOAL.md in full (goal version 10, 444 lines);
    • this Issue's body and its 10 comments.

    AGENTS.md is in context as project instructions.

    Image. I opened docs/designs/assets/codebook-product-spec-v9.png with an image tool. It is 1024 × 1536, 1,878,402 bytes, SHA-256 f189ee82…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-pt3 is at 5b39b767, clean, on top of origin/main ce97422a.

    N56 step 1, Cursor 3.27.12, Space local:codebook-qa

    Candidate. codebook-c56pt3-5b39b767.vsix, SHA-256 8913fcc6…6f40 (same on the Mac and in the Space). It was installed in the designated nextjs-dashboard window (1936e41), followed by Developer: Reload Window.

    Take. The OBS window capture is n56-step1-cursor.mp4: 435.17 s, 1920 × 1050, 30 fps, SHA-256 fabdb15d…9ebc5. It is in the Mac's ignored artifacts/cycle-0056/n56/ with the action log (step1-actions.txt), contact sheets and the frames that were inspected.

    Task 17: PASS on this candidate.

    • N54's saved test replay (7 of 7 stops, 10/25 6:02:34 PM) opened from Saved studies five times in a row, closed and reopened between. No open was refused.
    • Each open resumed at the saved position, and each Next event stepped exactly once: 48.91→63.56, 63.56→75.62, 75.62→88.67, 88.67→107.48 and 107.48→121.31 s.
    • Four more opens of another test replay (3 of 3) were interleaved. None was refused.
    • Output › Codebook has no entry after the reload.

    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):

    • N56-F1. After Close, choosing the replay the list still names does nothing, because the list fires no change event for the entry it already shows.
    • N56-F2. At the start of a reopen, the Learning summary first painted the replay closed before it, for 1–2 frames. This happened in 3 of 8 transitions; I classified every native frame of each open's 9 s window by OCR of the summary title and opened the frames to check.

    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.

  12. ryota-murakami commented on Oct 27, 2026

    @ryota-murakami
    ContributorAuthor

    N56 steps 2–6 on the candidate 5b39b767 (Space local: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.

    Step Host Result
    2: trust (task 23) Cursor 3.27.12 and VS Code 1.142.0 PASS. Both hosts open their trust editor with workbench.trust.manage. Cursor has no workbench.action.manageTrust. Fixed in 053b0395 on the side branch: one id, no lookup. Details in task 23.
    3: consent (task 15) VS Code, Copilot Chat GPT-6 Luna PASS. Codebook's access was revoked (Manage Language Model Access → 0 selected). The reader asked a new question (請求書の検索ボックス → 一覧の絞り込み). While VS Code's modal The extension 'codebook' wants to access the language models provided by GitHub Copilot. was up, the reader showed Asking 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.
    4: message and rows (task 16) VS Code FAIL. pt2's fix is falsified (task 16 in the body): the message lags the rows by 7 frames at a generation's end. H2 is fixed in 803be8fd on the side branch, with a test of the extension host's 200 ms debounce. A native rerun follows on the next candidate.
    5: copy and icons (task 25) both PASS. In four themes (Dark Modern, Light Modern, High Contrast, High Contrast Light):
    • VS Code's running row: Stop Watching eye-closed, Open Chat, Show Output.
    • Cursor: the welcome's fourth line with the sentence-case Change location link; the Wiki rows; the stopped row's Try Again debug-restart (row selected).
    Compared with N55's welcome-both.png and the v9 region 3 (Output: project folder / Change location): the wording and link follow O3, and nothing else moved.
    6: skill identity both PASS.
    • VS Code loads the bundled skills/codebook/SKILL.md bf60616e… (1.0.50) through chatSkills, and this run's generation ran that folder's publish-wiki.mjs.
    • Cursor's ~/.cursor/skills/codebook/SKILL.md 067c5a95… 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:

    • 8 pages, 68 sources;
    • no tracked source changed;
    • every command approved by hand;
    • the agent read the installed skill and publisher.

    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 b5dff63a on the side branch; the watcher stands on the project root.

    Preserved and restored:

    • the profile and user settings changed for themes (SHA-256 equal before and after);
    • the isolated Cursor instance (ended by its own PID);
    • the QA Cursor and VS Code profiles;
    • the designated checkout.

    Next.

    1. Integrate tasks 31 and 32 (pt3) with the side branch (tasks 23, 33 and 16-H2).
    2. Build a new candidate.
    3. Run natively: step 1 again (tasks 17, 31, 32), step 4 again (task 16), the deleted-folder recheck (task 33), and the trust action in both hosts (task 23).
  13. ryota-murakami commented on Oct 27, 2026

    @ryota-murakami
    ContributorAuthor

    N56 rerun on candidate 02acefaa (2026-10-27, Space local:codebook-qa)

    Candidate.

    • pt3 at 02acefaa: tasks 17, 28, 30, 31 and 32, then 23, 33 and task 16's H2, cherry-picked from the side branch.
    • Full lane: 7337 tests, 0 failures, 6 skipped. An earlier lane failed because stale dist files from the deleted resolveManageTrustCommand were still present; it passed after a clean dist.
    • format:check, typecheck, lint, health:static, dupes and dead-code all exit 0.
    • Packaged as codebook-c56pt3-02acefaa.vsix, SHA-256 5f5def7c…7a7b, checked by check-package.mjs, with the same hash on both sides.
    • Installed in the QA Cursor, the QA VS Code profile and the isolated Cursor (dist/extension.js 105bbc3a… in all three), followed by a reload.

    Evidence. All files are in artifacts/cycle-0056/n56/rerun/, with matching SHA-256 on both sides.

    Task Host Result
    17 (step 1) Cursor 3.27.12, designated window PASS.
    • 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.log has no entry after the reload; its last write is N55's 04:52.
    31 Cursor PASS. After Close, Saved studies reads Choose a saved study. Choosing the replay the closed reader showed opened it at once (open 2).
    32 Cursor PASS.
    • 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… → one Loading study… frame → the chosen replay.
    • No frame showed the previous replay. Before this fix, 3 of 8 transitions did.
    29 Cursor Evidence. The time from choice to replay shown is again about 1.3–1.7 s, so the 5 s pre-drain wait was never reached.
    33 VS Code 1.142.0 PASS (rerun33-vscode-delete.mp4 477c63c1…).
    • rm -rf .codebook brought 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).
    23 Cursor (isolated, trust enabled) and VS Code PASS.
    • Cursor: codebook.llmWiki.manageTrust opened Workspace Trust — nextjs-dashboard twice; 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).
    16 (step 4) VS Code, Copilot Chat GPT-6 Luna Not yet: one frame apart.
    • 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 $setMessage synchronously but only queues the refresh, and the rows need a $refresh → $getChildren round trip.
    • H3 (in progress): write the new message inside the root getChildren that 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.

    • The chat's optional post-publication audit (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.
    • The QA-owned comment in the clone's app/lib/utils.ts stays for now as the next stale trigger; it is reverted at the end of N56.
  14. ryota-murakami commented on Oct 27, 2026

    @ryota-murakami
    ContributorAuthor

    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-256 fb5fbfd6…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, against origin/main ce97422a:

    Review Result
    Local CodeRabbit CLI (coderabbit review --agent --committed --base origin/main -c .coderabbit.yaml --fresh) Completed with 3 findings. One is trivial: task 28's test keeps a // PROBE comment, 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 (range ce97422a..7ff3ab57) 13 of 13 reviewable files reviewed (100 %); 16 default exclusions reported apart. Findings: 1 medium (the README still says the watch moves down once a run makes the parent) and 4 low. The low ones are: an aborted signal still waits 150 ms, and a test is missing for an activation after the bound; a refused entry for another replay can lose the closed reader's restore; the dropped-choice entry names the wrong reason and shows no notice; and dead branching plus a doc slip.

    All 8 findings are being fixed now, since this is a bug-fix cycle. After that: /ship pt3.

  15. ryota-murakami commented on Oct 27, 2026

    @ryota-murakami
    ContributorAuthor

    pt3: local review fixes and native recheck (2026-10-27)

    Fixes. All 8 local review findings are handled in 6aac5414 and 932cdae3:

    • CR1: task 28's test no longer derives its expectation from the measured state, and the PROBE comment is gone. The file ran 20 times, all green.
    • CR2: not a defect. A study that cannot be opened stays chosen for its delete control after Close. It can never be opened, so task 31's no-change failure does not apply. A Reader DOM case guards this.
    • CR3: the unreported-focus Output entry is sanitized. The test failed before the fix.
    • OCR-M1: the README sentence on the watcher now matches task 33.
    • OCR-L2: a cancelled preparation no longer waits for a late activation. A new test pins an activation after the bound, and the bound's doc cites N56.
    • OCR-L3: a refused entry for another replay no longer loses the closed reader's replay. The test failed before the fix. Task 32's fix changed from retiring that replay to holding it back: no view draws it while another replay opens, and a refused entry leaves it for Open Study Workspace.
    • OCR-L4: a dropped Saved studies choice is told in one notice and one Output entry, worded for its reason (closed, closing, composition left). Three tests, all failing before the fix.
    • OCR-L5: dead branching and a doc slip are fixed.

    Gate on 932cdae3. format:check, typecheck, lint, health:static, dupes and dead-code all exit 0. Full lane: 7344 tests, 0 fail, 6 skipped.

    Native recheck of task 32. Candidate codebook-c56pt3-932cdae3.vsix (SHA-256 fcb8bb73…fe34), Cursor 3.27.12, designated window, take t32-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:

    • In the three opens of another replay while one is held back, every native frame of the Learning summary goes from the placeholder or blank straight to the chosen replay (t32-recheck-ocr.txt, t32-recheck-transitions.png).
    • No open was refused, and Output › Codebook has no new entry.

    Next: /ship pt3.

  16. ryota-murakami commented on Oct 27, 2026

    @ryota-murakami
    ContributorAuthor

    Entry after compaction + pt3 /ship progress (2026-10-27)

    • Reads, from disk after the latest compaction: PRODUCT_GOAL.md in full (goal version 10, all 444 lines, the final acceptance protocol included); this Issue's body and its 15 comments. AGENTS.md is in context as project instructions.
    • Image. docs/designs/assets/codebook-product-spec-v9.png, opened with an image tool (a 1000 px copy): 1024 × 1536, 1,878,402 bytes, SHA-256 f189ee82…caf2aa (matches Design target). Regions: 1 (live), 2 (replay), 3 (DeepWiki) and the shortcut strip.
    • State. pt3 worktree codex/cycle-0056-pt3 at 25ff222f on origin/main ce97422a; uncommitted: the 0.2.49.0 release edits (VERSION, extension/package.json, EXTENSION_VERSION, the package test pin, CHANGELOG, root README).
    • /ship pt3 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 on 25ff222f: 7397 tests, 7391 pass, 0 fail, 6 skipped.
    • Next: docs audit, release commit, the 15-check exact-HEAD gate, push, PR, CI and hosted CodeRabbit APPROVED, merge.
  17. ryota-murakami commented on Oct 27, 2026

    @ryota-murakami
    ContributorAuthor

    pt3: /ship done, PR #138 open (2026-10-27)

    • PR: #138, v0.2.49.0, head 1074b351. It covers tasks 16, 17, 23, 28–34 and the review fixes.
    • /ship review: 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.
    • Docs audit: two audits (the budget). The packaged README gained the late-reported Application group, how Close ends, and the view's same-frame message and rows (577ba5e5).
    • Found by the exact-HEAD gate, recorded as task 34 and fixed in it:
      • The gate on b5227ce9 passed 14 of 15. pnpm health failed with 35 findings in unchanged files, because Fallow reused a stale graph cache in the checkout.
      • With a fresh graph the same source gives 0 findings, and so does origin/main in a fresh worktree.
      • Fixed in 1074b351: the measured Fallow runs pass --no-cache. The test is red without the fix.
    • Gate (AC 5): 15 of 15 on 1074b351:
      • pnpm test: 7397 tests, 0 fail;
      • test:package: 1081 tests, 0 fail;
      • health: exit 0;
      • restore hook: 9 of 9.
    • Owner decisions O6 and O7 are recorded in the body.
    • Next: required CI and hosted CodeRabbit APPROVED on the exact head, then merge.
  18. ryota-murakami commented on Oct 27, 2026

    @ryota-murakami
    ContributorAuthor

    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):

    • pt1 086211db: PR #136, v0.2.47.0, tasks 1–14 and 26.
    • pt2 ce97422a: PR #137, v0.2.48.0, tasks 15, 16 (code), 18–22, 24, 25 (code).
    • pt3 5b992ea5: PR #138, v0.2.49.0, tasks 16 (H3), 17, 23, 28–34.
      • The 15-check exact-HEAD gate passed on the final head bfe62b32.
      • Required CI was green.
      • Hosted CodeRabbit APPROVED that exact head after four rounds, with every finding fixed.
      • /ship ended converged: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-qa on pt3's candidates (02acefaa, 7ff3ab57, 932cdae3), VS Code 1.142.0 and Cursor 3.27.12, target nextjs-dashboard 1936e41. 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 /spec and the plan reviews.

    • Its first commit applies O6: reviews.auto_review.enabled: false in the cycle branch's .coderabbit.yaml, and AGENTS.md drops the hosted-review merge condition.
    • It also records O7 in AGENTS.md: VS Code stays on GPT-6 Luna until GPT-6.1 Terra or Luna is listed.

    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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    cycleOne bounded experiment or product increment

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions