Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
24c3cc8
test: a history saved by v0.2.53.0 is a committed fixture that must l…
ryota-murakami Oct 28, 2026
b5d5670
feat: one storage descriptor per history profile, a node-server profi…
ryota-murakami Oct 28, 2026
0b5db5f
feat: one saved-study limit counts saved studies, test histories and …
ryota-murakami Oct 28, 2026
fba177d
test: journal integrity, structured seal, redaction at rest and profi…
ryota-murakami Oct 28, 2026
160600a
chore: keep the storage foundation inside the dead-code and duplicati…
ryota-murakami Oct 28, 2026
7fe6a6b
chore: record the new history test files' timings so the shard plan s…
ryota-murakami Oct 28, 2026
6336396
docs: the saved study limit is shared in both directions, so a new st…
ryota-murakami Oct 28, 2026
5feeab0
fix: a server seal closes the writer to new appends, writes end once …
ryota-murakami Oct 28, 2026
5addfe6
fix: a stop lists at most one unreadable value per inspection, and a …
ryota-murakami Oct 28, 2026
c73b44c
fix: a history directory that cannot be read counts no history for a …
ryota-murakami Oct 28, 2026
3e4d15e
chore: drop the stale seal suppression and the dead-code baseline ids…
ryota-murakami Oct 28, 2026
1d8e31f
fix: a refused append with a long cause is cut to the seal's bound, s…
ryota-murakami Oct 28, 2026
1c3c3d9
fix: a run's start check and a recording's start count the test and s…
ryota-murakami Oct 28, 2026
dd75f1e
test: the shared journal rules refuse a withdrawal after the bytes le…
ryota-murakami Oct 28, 2026
1d79c79
docs: the root README names 0.2.54.0 and the three parts of Cycle 0059
ryota-murakami Oct 28, 2026
1972b17
chore: bump version and changelog (v0.2.54.0)
ryota-murakami Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## [0.2.54.0] - 2026-10-28 (development candidate)

Cycle 0059 pt1 ([Issue #147](https://github.com/laststance/codebook/issues/147)), the first of three parts of a feature cycle whose outcome is a server run saved as a learning replay. This part lays the storage a server replay will be written to and read from. Nothing writes one yet. A server run is still refused at **Save learning replay**, and nothing about server runs changes for you in this version. N59, the cycle's native trial, runs on the last part.

**The saved study limit is counted the same way everywhere.**

- **A new study's save, the check at a run's start and a recording's start count your test replays too**, as a test's start already counted your saved studies. While saved studies and test replays fill **Codebook: Saved Study Limit**, a new run is refused before the application receives any input, with the study library's full-library sentence, instead of running and then being refused at its save. A test replay folder Codebook cannot read takes no place, as before.

## [0.2.53.0] - 2026-10-28 (development candidate)

Cycle 0058 ([Issue #143](https://github.com/laststance/codebook/issues/143)), a bug-fix cycle: it fixes the 13 defects Cycle 0057 carried, so a stopped or retried server run does only what it reports, and what the chat and you read about a server run is true. In the native trial N58, on the pinned clone of `laststance/switch-time` with its database stopped (development evidence, no acceptance credit), on macOS 26 (a virtual machine) in VS Code 1.142.0 (Copilot Chat, GPT-6.1 Terra) and this cycle's candidate `6473c5c3`, a natural question about how sign-in finds a user started the server; after a `500` the chat read the run's output, named the refused database connection as observed output, and every stop freed the port within a second. The released source adds review fixes made after `6473c5c3` (the late pause during a stop, the retried stop's check before SIGKILL, the message of a body that cannot be shown, the LLM Wiki view's kept message); N58 did not run again on them. The trial's identities and the hashes of its stills (kept private) are in [Issue #143's comments](https://github.com/laststance/codebook/issues/143).
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Codebook contributes `debug.focusEditorOnBreak: false` as the native debugger de

## Implementation status

This is a preview, not a Marketplace or Open VSX release. The delivered version is **0.2.53.0** once the pull request of [Cycle 0058](https://github.com/laststance/codebook/issues/143) is merged; until then 0.2.52.0 ([PR #142](https://github.com/laststance/codebook/pull/142), the third pull request of Cycle 0057) is the delivered one, and the active cycle Issue says where the delivery stands. Cycle 0058 is a bug-fix cycle that closes the 13 defects Cycle 0057 carried: a stopped or retried server run signals and reports only what it did, what the chat and the learner read about a server run is true (skill 1.0.52), and the LLM Wiki view's message no longer flickers empty. Cycle 0057 was a feature cycle that explains a repository's own Node HTTP server live, in three pull requests: the first masks credentials in what every run captures and lays the server profile's launch parts; the second offers the `node-server` profile through MCP, which starts the server under the debugger, sends one declared request (confirmed by you when it changes data) and stops in the route handler's source; the third routes the bundled skill to it (skill 1.0.51), tightens stopping and what the run shows, and carries the native trial in VS Code and Cursor. Cycle 0056 was a bug-fix cycle that closed the defects Cycle 0055 carried, in three pull requests: the first makes an LLM Wiki start say what happens when it joins a start under way, is stopped or passes its bound, and release or write back what it claimed; the second the LLM Wiki view and the reader; the third a saved test replay that Cursor refused to open, with the native trial. [Cycle 0055](https://github.com/laststance/codebook/issues/132) is a feature cycle: **Codebook: Generate LLM Wiki** writes a project's first LLM Wiki through the editor's agent from Codebook's own entry (its first pull request), and an **LLM Wiki** view in the Activity Bar shows, opens and updates it (its second). Cycle 0053 was a feature cycle: a test inside a workspace package runs with that package's Vitest and config, as the package's own `vitest` would, while a test the repository root's config already selects keeps running from the root. Cycle 0054 is a bug-fix cycle that closes the three defects Cycle 0053 carried: a test that ends before a later declared stop says so, a package test's launch asks the repository root again whether its config now selects the test, and the native-trial bootstrap keeps a listing it could not release. Cycle 0051 opened a test replay in the learning-replay composition a browser replay has: the Learning summary in the chat's place, one transport for both replay families, and a Learning summary button that shows a hidden summary again. Cycle 0052 was a bug-fix cycle that closed every defect Cycle 0051 carried, in three pull requests: the first makes replays leave, open and reload without stale frames and makes their entries and exits behave as the learner chose; the second fixes a test replay's moves and its summary page; the third the live runtime's unreadable facts, a browser run's refusals and the tests' hygiene. The MCP API is 1.8. What each earlier cycle delivered, with its tests, trials and limits, is in the [change history](CHANGELOG.md) and in that cycle's record, kept under the tag [`docs-archive-2026-10-20`](https://github.com/laststance/codebook/tree/docs-archive-2026-10-20/docs/cycles); from Cycle 0048 on, the cycle's Issue holds its tasks and state, and its pull requests the results.
This is a preview, not a Marketplace or Open VSX release. The delivered version is **0.2.54.0** once the first pull request of [Cycle 0059](https://github.com/laststance/codebook/issues/147) is merged; until then 0.2.53.0 ([PR #144](https://github.com/laststance/codebook/pull/144), Cycle 0058) is the delivered one, and the active cycle Issue says where the delivery stands. Cycle 0059 is a feature cycle that saves a server run as a learning replay, in three pull requests: the first lays the storage a server replay is written to and read from (nothing writes one yet, so a server run is still refused at **Save learning replay**) and makes the saved study limit count test replays at a study's save, a run's start and a recording's start too; the second reads and replays a saved server history; the third records it during the run and carries the native trial. Cycle 0058 was a bug-fix cycle that closes the 13 defects Cycle 0057 carried: a stopped or retried server run signals and reports only what it did, what the chat and the learner read about a server run is true (skill 1.0.52), and the LLM Wiki view's message no longer flickers empty. Cycle 0057 was a feature cycle that explains a repository's own Node HTTP server live, in three pull requests: the first masks credentials in what every run captures and lays the server profile's launch parts; the second offers the `node-server` profile through MCP, which starts the server under the debugger, sends one declared request (confirmed by you when it changes data) and stops in the route handler's source; the third routes the bundled skill to it (skill 1.0.51), tightens stopping and what the run shows, and carries the native trial in VS Code and Cursor. Cycle 0056 was a bug-fix cycle that closed the defects Cycle 0055 carried, in three pull requests: the first makes an LLM Wiki start say what happens when it joins a start under way, is stopped or passes its bound, and release or write back what it claimed; the second the LLM Wiki view and the reader; the third a saved test replay that Cursor refused to open, with the native trial. [Cycle 0055](https://github.com/laststance/codebook/issues/132) is a feature cycle: **Codebook: Generate LLM Wiki** writes a project's first LLM Wiki through the editor's agent from Codebook's own entry (its first pull request), and an **LLM Wiki** view in the Activity Bar shows, opens and updates it (its second). Cycle 0053 was a feature cycle: a test inside a workspace package runs with that package's Vitest and config, as the package's own `vitest` would, while a test the repository root's config already selects keeps running from the root. Cycle 0054 is a bug-fix cycle that closes the three defects Cycle 0053 carried: a test that ends before a later declared stop says so, a package test's launch asks the repository root again whether its config now selects the test, and the native-trial bootstrap keeps a listing it could not release. Cycle 0051 opened a test replay in the learning-replay composition a browser replay has: the Learning summary in the chat's place, one transport for both replay families, and a Learning summary button that shows a hidden summary again. Cycle 0052 was a bug-fix cycle that closed every defect Cycle 0051 carried, in three pull requests: the first makes replays leave, open and reload without stale frames and makes their entries and exits behave as the learner chose; the second fixes a test replay's moves and its summary page; the third the live runtime's unreadable facts, a browser run's refusals and the tests' hygiene. The MCP API is 1.8. What each earlier cycle delivered, with its tests, trials and limits, is in the [change history](CHANGELOG.md) and in that cycle's record, kept under the tag [`docs-archive-2026-10-20`](https://github.com/laststance/codebook/tree/docs-archive-2026-10-20/docs/cycles); from Cycle 0048 on, the cycle's Issue holds its tasks and state, and its pull requests the results.

The specification is [goal version 10](PRODUCT_GOAL.md), and the implementation targets external repositories. Historical fixture or coupled-Wiki success is not proof of that destination.

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.2.53.0
0.2.54.0
2 changes: 1 addition & 1 deletion extension/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -627,7 +627,7 @@ From 0.2.22 the refusal names what you can do at your limit:
- below 256: `Study library is full. Increase Codebook: Saved Study Limit (codebook.savedStudyLimit) in Settings, or delete a saved study from Saved studies in the Study workspace, before starting another run. Only the learner can do either; an editor agent cannot. Existing learning was kept.`
- at 256: `Study library is full at its maximum of 256 saved studies. Delete a saved study from Saved studies in the Study workspace before starting another run. Only the learner can delete a saved study; an editor agent cannot. Existing learning was kept.`

The messages for a study that cannot be saved and for a recording that cannot start follow the same pattern (`…then retry storage.`, `Recording library is full…delete a saved study that has a recording…`). A refused run is not saved later either: it leaves no study behind, the Study pane shows `The last run did not start: <message>` without offering **Retry storage / refresh** for it, and its run resource reports its history as unavailable. A limit setting that is not an integer from 1 to 256 also ends a run with `PREREQUISITE_MISSING` and `Set Codebook: Saved Study Limit (codebook.savedStudyLimit) to an integer from 1 to 256. Existing learning was kept.` The check at the start of a run reserves nothing: when two editor windows of the same workspace each start a run for the last free place, both starts are accepted, and the study saved second is refused at its save with the `…then retry storage.` message; raise the limit or delete a saved study, then use **Retry storage / refresh**. The start of a Node test is different: it takes the storage lock (`writer.lock` in the learning storage) and reserves its history under it, so of two windows that start a test for the last free place one is refused with `PREREQUISITE_MISSING` and the sentence of the study library above. While the saved studies and the test histories fill the limit, `codebook_status` reads the `node-test` profile as not ready and its `missing` sentence names the count of taken places and the limit, so an editor agent does not prepare a start that would be refused; only the learner can raise the setting in the Settings of the running editor profile or delete a saved study, and a test replay cannot be deleted from Saved studies yet. A start that meets the lock while another window holds it, or a lock that stays, is refused with the storage lock's sentence, which [Delete a saved study](#delete-a-saved-study) quotes and explains; nothing was written then, and the test was not started.
The messages for a study that cannot be saved and for a recording that cannot start follow the same pattern (`…then retry storage.`, `Recording library is full…delete a saved study that has a recording…`). A refused run is not saved later either: it leaves no study behind, the Study pane shows `The last run did not start: <message>` without offering **Retry storage / refresh** for it, and its run resource reports its history as unavailable. A limit setting that is not an integer from 1 to 256 also ends a run with `PREREQUISITE_MISSING` and `Set Codebook: Saved Study Limit (codebook.savedStudyLimit) to an integer from 1 to 256. Existing learning was kept.` The check at the start of a run reserves nothing: when two editor windows of the same workspace each start a run for the last free place, both starts are accepted, and the study saved second is refused at its save with the `…then retry storage.` message; raise the limit or delete a saved study, then use **Retry storage / refresh**. The start of a Node test is different: it takes the storage lock (`writer.lock` in the learning storage) and reserves its history under it, so of two windows that start a test for the last free place one is refused with `PREREQUISITE_MISSING` and the sentence of the study library above. While the saved studies and the test histories fill the limit, `codebook_status` reads the `node-test` profile as not ready and its `missing` sentence names the count of taken places and the limit, so an editor agent does not prepare a start that would be refused; only the learner can raise the setting in the Settings of the running editor profile or delete a saved study, and a test replay cannot be deleted from Saved studies yet. The limit is shared in both directions: the save of a new study, the check at a run's start and a recording's start count the test histories too, so while the saved studies and the test histories fill the limit a new run or study is refused with the study library's sentence above, as a test start is. A start that meets the lock while another window holds it, or a lock that stays, is refused with the storage lock's sentence, which [Delete a saved study](#delete-a-saved-study) quotes and explains; nothing was written then, and the test was not started.

#### Delete a saved study

Expand Down
7 changes: 2 additions & 5 deletions extension/fallow-dead-code-baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,8 @@
"unused-class-member:src/client.ts:StudyClient:discover",
"unused-class-member:src/client.ts:StudyClient:json",
"unused-class-member:src/client.ts:StudyClient:tool",
"unused-class-member:src/nodeTestHistoryStore.ts:NodeTestHistoryWriter:abandon",
"unused-class-member:src/nodeTestHistoryStore.ts:NodeTestHistoryWriter:appendOutput",
"unused-class-member:src/nodeTestHistoryStore.ts:NodeTestHistoryWriter:appendResult",
"unused-class-member:src/nodeTestHistoryStore.ts:NodeTestHistoryWriter:appendStop",
"unused-class-member:src/nodeTestHistoryStore.ts:NodeTestHistoryWriter:finish"
"unused-class-member:src/nodeTestHistoryWriter.ts:NodeTestHistoryWriter:appendResult",
"unused-class-member:src/nodeTestHistoryWriter.ts:NodeTestHistoryWriter:appendStop"
],
"unused_store_members": [],
"unprovided_injects": [],
Expand Down
2 changes: 1 addition & 1 deletion extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"displayName": "codebook",
"description": "Connect an external agent to source-grounded codebase studies.",
"publisher": "laststance",
"version": "0.2.53",
"version": "0.2.54",
"private": true,
"engines": {
"vscode": "^1.120.0",
Expand Down
2 changes: 1 addition & 1 deletion extension/scripts/tests/package.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ test('a real VSIX loads outside the checkout and excludes bundled applications a
// Assert
assert.equal(receipt.isolatedModuleLoad, true)
assert.equal(receipt.isolatedWikiPageWorker, true)
assert.equal(checked.extension.version, '0.2.53')
assert.equal(checked.extension.version, '0.2.54')
assert.equal(checked.extension.apiVersion, '1.8')
assert.equal(checked.entries, 33)
assert.equal(receipt.dependencies.length, 16)
Expand Down
Loading