From 5512acd477bc5e5a11339d6027a03631d1a3544a Mon Sep 17 00:00:00 2001 From: James Ross Date: Mon, 24 Aug 2026 11:40:23 -0700 Subject: [PATCH 1/3] release: prepare v6.5.9 --- BEARING.md | 22 ++++-- CHANGELOG.md | 2 + README.md | 4 +- ROADMAP.md | 5 +- STATUS.md | 21 +++-- .../compound-workspace-admission.md | 18 +++-- .../witness/release-candidate.md | 76 +++++++++++++++++++ .../witness/verification.md | 32 +++++--- docs/design/README.md | 2 +- .../compound-workspace-admission.md | 50 ++++++++++++ docs/releases/v6.5.9.md | 21 +++-- jsr.json | 2 +- package.json | 3 +- src/package-version.js | 2 +- test/unit/docs/package-docs.test.js | 2 + test/unit/docs/release-state.test.js | 68 +++++++++++++++-- test/unit/docs/release-truth.test.js | 17 +++++ 17 files changed, 298 insertions(+), 49 deletions(-) create mode 100644 docs/design/0060-compound-workspace-admission/witness/release-candidate.md create mode 100644 docs/method/retro/0060-compound-workspace-admission/compound-workspace-admission.md diff --git a/BEARING.md b/BEARING.md index a8ae9b2a..ecc8252a 100644 --- a/BEARING.md +++ b/BEARING.md @@ -14,7 +14,7 @@ timeline ## Current State -`v6.5.8` shipped on `2026-08-23`. +`v6.5.8` shipped on `2026-08-23`, and `v6.5.9` is under release review. Application asset, bundle, page, cache, expiry, witness, and repository-diagnostics APIs sit above mutable root sets and the low-level CAS pipeline. Direct bundle-reference reads and bounded @@ -94,6 +94,12 @@ What exists now: Plumbing 3.3.0 sessions pipeline independent blob, tree, metadata, and successful checked-ref waves while one-shot and older-capability fallbacks remain intact. +- **Compound workspace-admission candidate.** v6.5.9 adds one bounded + `workspace.batch()` callback for dependency-ordered page and bundle waves. + One private persistence scope stages every operation and one exact final + generation retains their union. A 33-operation witness reduced 200 Git + children to 23 and 33 retained generations to one in both SHA-1 and SHA-256 + repositories without changing any application handle. - **Batched workspace page retention.** v6.5.4 adds `workspace.pages.putBatch()` so one bounded ordered page group is written and retained under one exact workspace generation instead of rewriting a growing @@ -164,14 +170,14 @@ These were the active tensions from the previous bearing. All resolved. ## Next Horizon -With v6.5.8 shipped, active work is tracked in GitHub Issues and Milestones. -Repo docs hold design and evidence records, not the active queue. +With v6.5.8 shipped and the v6.5.9 candidate under release review, active work +is tracked in GitHub Issues and Milestones. Repo docs hold design and evidence +records, not the active queue. -The completed release design is -[0059-bounded-write-waves](./docs/design/0059-bounded-write-waves/bounded-write-waves.md). -Its completed release goalpost is -[#119](https://github.com/git-stunts/git-cas/issues/119) in the -[`v6.5.8` milestone](https://github.com/git-stunts/git-cas/milestone/18). +The candidate design is +[0060-compound-workspace-admission](./docs/design/0060-compound-workspace-admission/compound-workspace-admission.md). +Its release goalpost is [#123](https://github.com/git-stunts/git-cas/issues/123) +in the [`v6.5.9` milestone](https://github.com/git-stunts/git-cas/milestone/19). The broader horizon remains: diff --git a/CHANGELOG.md b/CHANGELOG.md index 38b19dbe..0c13b703 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [6.5.9] — 2026-08-24 + ### Added - **Compound staging-workspace admission** - `workspace.batch()` runs an diff --git a/README.md b/README.md index b575d10e..e561e223 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Unlike traditional LFS which moves files to external servers, `git-cas` treats t Existing v5 users should read [UPGRADING.md](./UPGRADING.md) and run `npm run upgrade` in dry-run mode before restoring old encrypted vault entries. For the release overview, see the -[v6.5.8 Release Notes](./docs/releases/v6.5.8.md). +[v6.5.9 Release Notes](./docs/releases/v6.5.9.md). ### 1. CLI Usage @@ -238,6 +238,8 @@ All three runtimes are tested in CI on every push. The hexagonal architecture is sessions for small streaming blob reads while large payloads remain streamed. - **[v6.5.8 Release Notes](./docs/releases/v6.5.8.md)**: Bounded application write waves, one-generation workspace batches, and reusable ref sessions. +- **[v6.5.9 Release Notes](./docs/releases/v6.5.9.md)**: Compound dependent + write waves retained under one exact staging-workspace generation. - **[Upgrading](./UPGRADING.md)**: Migration guide for v5 → v6. - **[Changelog](./CHANGELOG.md)**: Version history and migration notes. diff --git a/ROADMAP.md b/ROADMAP.md index 2a9e6a8e..0ed1fe0a 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -46,6 +46,7 @@ GitHub wins and this file should be corrected. | [`v6.5.6`](https://github.com/git-stunts/git-cas/milestone/16) | Bijou 7 framed cockpit and deterministic ref conflicts | [#105](https://github.com/git-stunts/git-cas/issues/105), [#106](https://github.com/git-stunts/git-cas/issues/106), [#111](https://github.com/git-stunts/git-cas/issues/111) | | [`v6.5.7`](https://github.com/git-stunts/git-cas/milestone/17) | Bounded session-backed small payload stream reads | [#115](https://github.com/git-stunts/git-cas/issues/115) | | [`v6.5.8`](https://github.com/git-stunts/git-cas/milestone/18) | Bounded application write and retention waves | [#119](https://github.com/git-stunts/git-cas/issues/119) | +| [`v6.5.9`](https://github.com/git-stunts/git-cas/milestone/19) | Compound staging-workspace admission | [#123](https://github.com/git-stunts/git-cas/issues/123) | | [`v6.6.0`](https://github.com/git-stunts/git-cas/milestone/9) | Operator TUI and agent automation follow-through | [#39](https://github.com/git-stunts/git-cas/issues/39), [#40](https://github.com/git-stunts/git-cas/issues/40) | | [`v6.7.0`](https://github.com/git-stunts/git-cas/milestone/10) | Browser and edge read-path exploration | [#41](https://github.com/git-stunts/git-cas/issues/41) | | [`v7.0.0`](https://github.com/git-stunts/git-cas/milestone/6) | Protocol break only if audit requires it | [#42](https://github.com/git-stunts/git-cas/issues/42), only when justified | @@ -54,10 +55,10 @@ GitHub wins and this file should be corrected. The latest landed design record is: -- [0059-bounded-write-waves](./docs/design/0059-bounded-write-waves/bounded-write-waves.md) +- [0060-compound-workspace-admission](./docs/design/0060-compound-workspace-admission/compound-workspace-admission.md) Its GitHub goalpost issue, -[#119](https://github.com/git-stunts/git-cas/issues/119), owns the release +[#123](https://github.com/git-stunts/git-cas/issues/123), owns the release evidence. The design doc is the durable contract; GitHub records completion. The `v6.2.0` slice record is: diff --git a/STATUS.md b/STATUS.md index 0156636a..328c07be 100644 --- a/STATUS.md +++ b/STATUS.md @@ -1,8 +1,8 @@ # STATUS **Last tagged release:** `v6.5.8` (`2026-08-23`) -**Current release state:** `v6.5.8` is published to npm and GitHub Releases. -**Latest verification:** reviewed release merge `57b40553` passed 14/14 release-verifier stages with 7,057 observed tests; signed tag `v6.5.8` peels to that merge, and release workflow `32690361682` published the matching npm artifact plus final GitHub Release. +**Current release state:** `v6.5.9` release candidate; tag, npm publication, and GitHub Release remain pending the reviewed tag workflow. +**Latest verification:** exact reviewed implementation head `29ba6e88` passed 14/14 release-verifier stages with 7,141 observed tests; exact versioned-candidate verification remains pending. **Playback truth:** `main` **Runtimes:** Node.js 22.x, Bun, Deno **Current planning method:** [WORKFLOW.md](./WORKFLOW.md) @@ -18,6 +18,15 @@ - The machine-facing `git cas agent` surface exists and now supports OS-keychain passphrase sources for vault-derived key flows, but parity and portability are still partial. +- **v6.5.9 candidate posture** — implementation PR + [#124](https://github.com/git-stunts/git-cas/pull/124) merged normally as + `eb8d6176`; its exact reviewed head `29ba6e88` passed all 14 release-verifier + stages with 7,141 observed tests. npm, JSR, and runtime metadata identify + `6.5.9`, while the signed tag and registry artifact remain deliberately + absent pending release review. The SHA-1/SHA-256 compound witness preserves + every application-handle digest while reducing a 33-operation graph from 200 + to 23 Git children and from 33 retained generations to one. The release is + additive and requires no application or stored-data migration. - **v6.5.8 artifact posture** — implementation PR [#120](https://github.com/git-stunts/git-cas/pull/120) and release PR [#121](https://github.com/git-stunts/git-cas/pull/121) merged normally. @@ -167,10 +176,10 @@ - GitHub Issues are canonical. If this section and GitHub disagree, GitHub wins and this section should be corrected. -- Latest completed release goalpost: - [#119 v6.5.8: Batch bounded Git write and retention waves](https://github.com/git-stunts/git-cas/issues/119) +- Current release goalpost: + [#123 v6.5.9: Compound staging-workspace admission](https://github.com/git-stunts/git-cas/issues/123) under the - [`v6.5.8` milestone](https://github.com/git-stunts/git-cas/milestone/18). + [`v6.5.9` milestone](https://github.com/git-stunts/git-cas/milestone/19). - Current queued release goalposts are [#39 v6.6.0: Operator TUI](https://github.com/git-stunts/git-cas/issues/39) and @@ -178,7 +187,7 @@ under [`v6.6.0`](https://github.com/git-stunts/git-cas/milestone/9). - The latest landed design record is - [0059-bounded-write-waves](./docs/design/0059-bounded-write-waves/bounded-write-waves.md). + [0060-compound-workspace-admission](./docs/design/0060-compound-workspace-admission/compound-workspace-admission.md). ## Read Next diff --git a/docs/design/0060-compound-workspace-admission/compound-workspace-admission.md b/docs/design/0060-compound-workspace-admission/compound-workspace-admission.md index 36c39498..528ba80c 100644 --- a/docs/design/0060-compound-workspace-admission/compound-workspace-admission.md +++ b/docs/design/0060-compound-workspace-admission/compound-workspace-admission.md @@ -7,7 +7,7 @@ release_home: 'v6.5.9' issue: 'https://github.com/git-stunts/git-cas/issues/123' goalpost_issue: 'https://github.com/git-stunts/git-cas/issues/123' tracker_source: 'github' -status: 'active' +status: 'landed' base_commit: '33738af7ce31f9117e9ced24ea20745a8541eea8' owners: - '@git-stunts' @@ -497,7 +497,8 @@ The work is done when: - [x] Existing public APIs, storage readers, v6 workspaces, and release surfaces remain compatible with no migration. - [x] Public docs, architecture, changelog, and release notes are accurate. -- [ ] Issue and PR are linked; CI and complete local validation are green. +- [x] Issue and implementation PR are linked; CI and complete implementation + validation are green. - [ ] Released v6.5.9 is consumed from the registry by git-warp before any downstream performance claim. @@ -596,11 +597,14 @@ When this lands, it does not prove: ## Retrospective -The implementation and clean witness are complete. A 33-operation, -81-handle graph fell from 200 to 23 Git children and from 33 retained -generations to one in both SHA-1 and SHA-256 repositories. Median wall time -fell by 80.5% with identical handle digests. The remaining work is hosted -multi-runtime review, v6.5.9 publication, and released downstream adoption. +The implementation and clean witness are complete. A 33-operation, 81-handle +graph fell from 200 to 23 Git children and from 33 retained generations to one +in both SHA-1 and SHA-256 repositories. Median wall time fell by 80.5% with +identical handle digests. Implementation PR #124 merged normally as +`eb8d617620fa8f401fb887f5b1bbc341d4746b0a`; exact reviewed head +`29ba6e88c787a5e54c95a554e9166fd21aae31c0` passed 14/14 release-verifier +stages with 7,141 observed tests. The remaining work is v6.5.9 release review, +publication, and released downstream adoption. PR: diff --git a/docs/design/0060-compound-workspace-admission/witness/release-candidate.md b/docs/design/0060-compound-workspace-admission/witness/release-candidate.md new file mode 100644 index 00000000..f7893184 --- /dev/null +++ b/docs/design/0060-compound-workspace-admission/witness/release-candidate.md @@ -0,0 +1,76 @@ +# PERF-0060 v6.5.9 Release Candidate Witness + +Date: 2026-08-24 + +Issue: #123 + +Implementation review: #124 + +Release review: pending + +## Scope + +This witness records the pre-publication candidate for compound +staging-workspace admission. It does not claim that a `v6.5.9` tag, npm +artifact, or GitHub Release exists. This is an explicitly unpublished +candidate. + +The candidate: + +- sets npm, JSR, and runtime package metadata to `6.5.9`; +- moves compound workspace admission from `Unreleased` to `6.5.9`; +- packages and links `docs/releases/v6.5.9.md`; +- records v6.5.8 publication evidence as immutable history; +- marks design 0060 landed after implementation review #124; and +- leaves v6.5.9 tag and registry claims deliberately absent. + +## Implementation Provenance + +Implementation review #124 merged normally as +`eb8d617620fa8f401fb887f5b1bbc341d4746b0a`. Its second parent is exact +reviewed head `29ba6e88c787a5e54c95a554e9166fd21aae31c0`. + +That exact implementation head passed the complete release method: + +| Gate | Result | Observed tests | +| -------------------------- | --------------------- | -------------: | +| Lint | PASS | - | +| Unit tests (Node) | PASS | 2,177 | +| Unit tests (Bun) | PASS | 2,176 | +| Unit tests (Deno) | PASS | 2,167 | +| Public type compatibility | PASS | - | +| Integration tests (Node) | PASS | 207 | +| Integration tests (Bun) | PASS | 207 | +| Integration tests (Deno) | PASS | 207 | +| Examples and build stamp | PASS | - | +| npm and JSR dry-runs | PASS | - | +| **Release method summary** | **PASS: 14/14 gates** | **7,141** | + +Versioned candidate verification: pending. The committed versioned tree must +pass the same method before this release review can become ready. + +## Semantic and Process Witness + +Five counterbalanced samples compare the same 33-operation, 81-handle graph +under per-wave and compound admission in fresh SHA-1 and SHA-256 repositories. +Every ordered application-handle digest matches. + +| Object format | Git children | Git interactions | Median wall reduction | +| ------------- | -----------: | ---------------: | --------------------: | +| SHA-1 | 200 -> 23 | 380 -> 238 | 80.522% | +| SHA-256 | 200 -> 23 | 380 -> 238 | 80.405% | + +Compound admission reduces 33 retained workspace generations to one. The +remaining 18 `mktree` children preserve Git validation across dependent +descriptor-pack visibility boundaries and are not bypassed by this release. + +## Compatibility and Publication Gate + +The release is additive and migration-free. Existing application handles, +stored object bytes, descriptor schemas, ref namespaces, workspace methods, +readers, and repositories remain compatible without rewriting or cutover. + +Publication remains blocked until the versioned candidate passes the full +release method, the release PR passes hosted CI and review, the exact reviewed +merge passes verification, a signed annotated `v6.5.9` tag peels to that merge, +and the release workflow publishes npm plus the final GitHub Release. diff --git a/docs/design/0060-compound-workspace-admission/witness/verification.md b/docs/design/0060-compound-workspace-admission/witness/verification.md index 2b49802e..64f0218f 100644 --- a/docs/design/0060-compound-workspace-admission/witness/verification.md +++ b/docs/design/0060-compound-workspace-admission/witness/verification.md @@ -48,9 +48,9 @@ workspace generation. | Object format | Mode | Git children | Git interactions | Wall ms | Worker CPU ms | | ------------- | -------- | -----------: | ---------------: | ------: | ------------: | | SHA-1 | per-wave | 200 | 380 | 3763.82 | 370.336 | -| SHA-1 | compound | 23 | 238 | 733.116 | 113.672 | +| SHA-1 | compound | 23 | 238 | 733.116 | 113.672 | | SHA-256 | per-wave | 200 | 380 | 3709.93 | 373.898 | -| SHA-256 | compound | 23 | 238 | 726.976 | 114.407 | +| SHA-256 | compound | 23 | 238 | 726.976 | 114.407 | | Object format | Process reduction | Interaction reduction | Wall reduction | Worker CPU reduction | | ------------- | ----------------: | --------------------: | -------------: | -------------------: | @@ -69,15 +69,15 @@ that the batching change did not change page or bundle identity. Both object formats produced the same process topology: -| Process/session | Per-wave | Compound | -| --------------------- | -------: | -------: | -| `fast-import` | 33 | 1 | -| `hash-object` | 66 | 0 | -| `cat-file` | 1 | 1 | -| `mktree` | 33 | 18 | -| `commit-tree` | 33 | 1 | -| `symbolic-ref` | 33 | 1 | -| `update-ref --stdin` | 1 | 1 | +| Process/session | Per-wave | Compound | +| -------------------- | -------: | -------: | +| `fast-import` | 33 | 1 | +| `hash-object` | 66 | 0 | +| `cat-file` | 1 | 1 | +| `mktree` | 33 | 18 | +| `commit-tree` | 33 | 1 | +| `symbolic-ref` | 33 | 1 | +| `update-ref --stdin` | 1 | 1 | The single update-ref session performs 33 checked updates in per-wave mode and one checked update in compound mode. Compound admission also keeps one scoped @@ -116,3 +116,13 @@ This change is additive and migration-free. It changes neither application handles nor stored object bytes, descriptor schemas, ref namespaces, existing workspace methods, or read paths. Existing repositories and active v6.5.8 workspace refs remain readable without rewriting or cutover. + +## Review and Release Boundary + +Implementation PR [#124](https://github.com/git-stunts/git-cas/pull/124) +merged normally as `eb8d617620fa8f401fb887f5b1bbc341d4746b0a`. Its exact +reviewed head `29ba6e88c787a5e54c95a554e9166fd21aae31c0` passed the full +14-stage release verifier with 7,141 observed tests. The versioned v6.5.9 +candidate, reviewed merge, signed tag, registry artifact, and GitHub Release +remain separate gates recorded by the +[release-candidate witness](./release-candidate.md). diff --git a/docs/design/README.md b/docs/design/README.md index 2f0ef992..9522ad66 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -11,7 +11,6 @@ process in [docs/method/process.md](../method/process.md). ## Active METHOD Cycles -- [0060-compound-workspace-admission - compound-workspace-admission](./0060-compound-workspace-admission/compound-workspace-admission.md) - [0054-batched-page-retention - batched-page-retention](./0054-batched-page-retention/batched-page-retention.md) - [0050-lazy-bundle-reference-reads - lazy-bundle-reference-reads](./0050-lazy-bundle-reference-reads/lazy-bundle-reference-reads.md) - [0049-scoped-staging-workspaces — scoped-staging-workspaces](./0049-scoped-staging-workspaces/scoped-staging-workspaces.md) @@ -45,6 +44,7 @@ process in [docs/method/process.md](../method/process.md). ## Landed METHOD Cycles +- [0060-compound-workspace-admission - compound-workspace-admission](./0060-compound-workspace-admission/compound-workspace-admission.md) - [0059-bounded-write-waves - bounded-write-waves](./0059-bounded-write-waves/bounded-write-waves.md) - [0058-bounded-stream-session-reads - bounded-stream-session-reads](./0058-bounded-stream-session-reads/bounded-stream-session-reads.md) - [0057-deterministic-ref-conflict-posture - deterministic-ref-conflict-posture](./0057-deterministic-ref-conflict-posture/deterministic-ref-conflict-posture.md) diff --git a/docs/method/retro/0060-compound-workspace-admission/compound-workspace-admission.md b/docs/method/retro/0060-compound-workspace-admission/compound-workspace-admission.md new file mode 100644 index 00000000..34b3c6c2 --- /dev/null +++ b/docs/method/retro/0060-compound-workspace-admission/compound-workspace-admission.md @@ -0,0 +1,50 @@ +# Retro — 0060 Compound Workspace Admission + +## Drift Check + +- The cycle stayed inside bounded dependency-ordered page and bundle staging, + one exact final workspace generation, process reuse, failure settlement, + deterministic witnesses, and compatibility documentation. +- It did not replace Git, expose raw sessions, change object formats or handles, + weaken checked refs, reinterpret `AdmissionWindow` as domain atomicity, or + buffer unbounded inputs. + +## What Shipped To Main + +- `workspace.batch()` admits a bounded callback through one private persistence + scope and returns its value only with exact final retention evidence. +- Scope calls serialize by invocation order, preserve existing per-operation + limits, stop queued work after failure, and close resources deterministically. +- SHA-1/SHA-256 witnesses reduce a 33-operation, 81-handle graph from 200 to 23 + Git children and from 33 retained generations to one with equal handle + digests. +- Immediate-prune integration tests prove success reachability, release + reclamation, and no-generation refusal behavior in both object formats. +- Implementation PR #124 merged normally as + `eb8d617620fa8f401fb887f5b1bbc341d4746b0a`; exact reviewed head + `29ba6e88c787a5e54c95a554e9166fd21aae31c0` passed 14/14 release-verifier + stages with 7,141 observed tests. + +## What Did Not Yet Ship + +- v6.5.9 is not tagged or published until the release candidate, reviewed + merge, signed-tag workflow, registry artifact, and clean consumer checks pass. +- git-warp has not yet consumed the registry artifact or rerun its exact + reference, migrated-v18, process-census, and CPU gates. +- Think remains unchanged until the ordered Plumbing -> git-cas -> git-warp + publication chain is complete. + +## Debt + +- The compound witness leaves 18 `mktree` children because dependent descriptor + packs cross Git object-database visibility boundaries. This is measured debt, + not a reason to bypass Git validation in v6.5.9. +- A typed tree-writing protocol should be proposed only if the released + downstream git-warp benchmark shows material remaining impact. + +## Cool Ideas + +- Reuse one deterministic compound workload as a conformance vector across + direct git-cas, git-warp, and Think consumer benchmarks. +- Compare native Git libraries only against the residual capability and cost + ledger after this stock-Git path is measured end to end. diff --git a/docs/releases/v6.5.9.md b/docs/releases/v6.5.9.md index 93db9687..58716e7b 100644 --- a/docs/releases/v6.5.9.md +++ b/docs/releases/v6.5.9.md @@ -76,17 +76,18 @@ application handles in fresh SHA-1 and SHA-256 bare repositories. | SHA-256 | compound | 23 | 238 | 726.976 | 114.407 | Both formats reduced Git child creation by 88.5% and median wall time by about -80.5% on the measured host. `fast-import`, `commit-tree`, symbolic-ref -containment checks, and checked ref updates fell from one per wave to one per -compound admission. The semantic handle digests matched exactly. +80.5% on the measured host: 200 to 23 Git children and 33 retained generations +to one. `fast-import`, `commit-tree`, symbolic-ref containment checks, and +checked ref updates fell from one per wave to one per compound admission. The +semantic handle digests matched exactly. The remaining 18 `mktree` children preserve validation across interdependent descriptor-pack visibility boundaries. Further reduction requires a separately proved typed tree-writing protocol or equivalent deterministic construction; this release does not bypass Git's object validation. -See the [machine witness](../design/0060-compound-workspace-admission/witness/compound-workspace-admission.json) -and [verification narrative](../design/0060-compound-workspace-admission/witness/verification.md) +See the [machine witness](https://github.com/git-stunts/git-cas/blob/main/docs/design/0060-compound-workspace-admission/witness/compound-workspace-admission.json) +and [verification narrative](https://github.com/git-stunts/git-cas/blob/main/docs/design/0060-compound-workspace-admission/witness/verification.md) for the exact source, environment, counts, digests, and method. ## Reachability Proof @@ -96,6 +97,16 @@ verify one checked publication, zero active scoped fast-import sessions after settlement, immediate-prune readability while retained, reclamation after checked release, and no workspace generation after a dependent wave fails. +## Verification + +Implementation review #124 merged normally as +`eb8d617620fa8f401fb887f5b1bbc341d4746b0a`; its exact reviewed head +`29ba6e88c787a5e54c95a554e9166fd21aae31c0` passed all 14 release-verifier +stages with 7,141 observed tests across Node, Bun, Deno, and all three real-Git +integration suites. Exact verification of the versioned release-candidate tree +is pending and must pass before review completion. No tag, npm artifact, or +GitHub Release is claimed by this candidate. + ## Compatibility This release is additive and requires no application or stored-data migration. diff --git a/jsr.json b/jsr.json index ff0e44ea..c78b8b28 100644 --- a/jsr.json +++ b/jsr.json @@ -1,6 +1,6 @@ { "name": "@git-stunts/git-cas", - "version": "6.5.8", + "version": "6.5.9", "exports": { ".": "./index.js", "./service": "./src/domain/services/CasService.js", diff --git a/package.json b/package.json index 8f330f41..2bf72f73 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@git-stunts/git-cas", - "version": "6.5.8", + "version": "6.5.9", "description": "Content-addressed storage backed by Git's object database, with optional encryption and pluggable codecs", "type": "module", "main": "index.js", @@ -45,6 +45,7 @@ "docs/releases/v6.5.6.md", "docs/releases/v6.5.7.md", "docs/releases/v6.5.8.md", + "docs/releases/v6.5.9.md", "docs/THREAT_MODEL.md", "docs/VAULT_INTERNALS.md", "docs/WALKTHROUGH.md", diff --git a/src/package-version.js b/src/package-version.js index 0157ebe9..b9fdf22e 100644 --- a/src/package-version.js +++ b/src/package-version.js @@ -1 +1 @@ -export const PACKAGE_VERSION = '6.5.8'; +export const PACKAGE_VERSION = '6.5.9'; diff --git a/test/unit/docs/package-docs.test.js b/test/unit/docs/package-docs.test.js index 495c76f3..fce53a9c 100644 --- a/test/unit/docs/package-docs.test.js +++ b/test/unit/docs/package-docs.test.js @@ -23,6 +23,7 @@ const requiredStandardDocs = [ 'docs/releases/v6.5.6.md', 'docs/releases/v6.5.7.md', 'docs/releases/v6.5.8.md', + 'docs/releases/v6.5.9.md', ]; const forbiddenPackagePrefixes = ['docs/audit/', 'docs/archive/', 'docs/method/']; const forbiddenPackageFiles = ['docs/cli.gif', 'docs/vault.gif']; @@ -102,6 +103,7 @@ function publicPackagedMarkdownFiles(files) { 'docs/releases/v6.5.6.md', 'docs/releases/v6.5.7.md', 'docs/releases/v6.5.8.md', + 'docs/releases/v6.5.9.md', 'docs/THREAT_MODEL.md', 'docs/WALKTHROUGH.md', ].filter((file) => files.has(file)); diff --git a/test/unit/docs/release-state.test.js b/test/unit/docs/release-state.test.js index 761d33a0..323fb2f8 100644 --- a/test/unit/docs/release-state.test.js +++ b/test/unit/docs/release-state.test.js @@ -4,6 +4,8 @@ import path from 'node:path'; const repoRoot = process.cwd(); const v653PublishedMarker = '**v6.5.3 artifact posture**'; +const v659CandidatePath = + 'docs/design/0060-compound-workspace-admission/witness/release-candidate.md'; const v658CandidatePath = 'docs/design/0059-bounded-write-waves/witness/release-candidate.md'; const v658PublicationPath = 'docs/design/0059-bounded-write-waves/witness/release-publication.md'; const v657CandidatePath = @@ -45,6 +47,29 @@ function v6Heading(changelog) { return changelog.match(/^## \[6\.0\.0\] — (.+)$/m)?.[1]; } +function expectNoV659PublicationEvidence(...documents) { + const forbiddenMarkers = [ + '**Last tagged release:** `v6.5.9`', + '**Current release state:** `v6.5.9` is published', + '- Signed annotated tag: `v6.5.9`', + 'https://github.com/git-stunts/git-cas/releases/tag/v6.5.9', + '## npm Registry Evidence', + /\| Package\s+\| `@git-stunts\/git-cas@6\.5\.9`\s+\|/, + /\| Dist-tag\s+\| `latest` -> `6\.5\.9`\s+\|/, + 'attestations/@git-stunts%2fgit-cas@6.5.9', + ]; + + for (const document of documents) { + for (const marker of forbiddenMarkers) { + if (marker instanceof RegExp) { + expect(document).not.toMatch(marker); + } else { + expect(document).not.toContain(marker); + } + } + } +} + function expectNoV658PublicationEvidence(...documents) { const forbiddenMarkers = [ '**Last tagged release:** `v6.5.8`', @@ -365,7 +390,6 @@ function expectV658CandidateEvidence(candidate, releaseNotes) { function expectV658PublishedEvidence(status, publication) { expect(status).toContain('**Last tagged release:** `v6.5.8` (`2026-08-23`)'); - expect(status).toContain('**Current release state:** `v6.5.8` is published'); expect(status).toContain('**v6.5.8 artifact posture**'); expect(status).toContain('57b40553'); expect(status).toContain('32690361682'); @@ -390,6 +414,22 @@ function expectV658PublishedEvidence(status, publication) { expect(publication).toContain('CLI version `6.5.8+57b4055`'); } +function expectV659CandidateEvidence(status, candidate, releaseNotes) { + expect(status).toContain('**Current release state:** `v6.5.9` release candidate'); + expect(status).toContain('**v6.5.9 candidate posture**'); + expect(candidate).toContain('# PERF-0060 v6.5.9 Release Candidate Witness'); + expect(candidate).toContain('Implementation review: #124'); + expect(candidate).toContain('Release review: pending'); + expect(candidate).toContain('eb8d617620fa8f401fb887f5b1bbc341d4746b0a'); + expect(candidate).toContain('29ba6e88c787a5e54c95a554e9166fd21aae31c0'); + expect(candidate).toContain('**PASS: 14/14 gates**'); + expect(candidate).toContain('**7,141**'); + expect(candidate).toContain('Versioned candidate verification: pending'); + expect(candidate).toMatch(/explicitly\s+unpublished\s+candidate/); + expect(releaseNotes).toMatch(/requires no application or stored-data migration/); + expectNoV659PublicationEvidence(status, candidate, releaseNotes); +} + function expectV656PublishedEvidence(status, publication) { expect(status).toContain('**v6.5.6 artifact posture**'); expect(status).toContain('257e8821'); @@ -559,17 +599,24 @@ function expectV658ReleaseDocs(status) { expect(releaseNotes).toMatch(/requires no application or stored-data\s+migration/); } +function expectV659ReleaseDocs(status) { + const candidate = read(v659CandidatePath); + const releaseNotes = read('docs/releases/v6.5.9.md'); + + expectV659CandidateEvidence(status, candidate, releaseNotes); +} + function expectCurrentQueue(status) { - expect(status).toContain('Latest completed release goalpost:'); + expect(status).toContain('Current release goalpost:'); expect(status).toContain('Current queued release goalposts are'); expect(status).toContain('#39 v6.6.0: Operator TUI'); expect(status).toContain('#40 v6.6.0: Agent automation follow-through'); - expect(status).toContain('#119 v6.5.8: Batch bounded Git write'); - expect(status).toContain('0059-bounded-write-waves'); + expect(status).toContain('#123 v6.5.9: Compound staging-workspace admission'); + expect(status).toContain('0060-compound-workspace-admission'); } describe('release state docs', () => { - it('enforces the v6.5.8 candidate history and publication evidence', () => { + it('enforces the v6.5.9 candidate and prior publication evidence', () => { const status = read('STATUS.md'); const [v656Candidate, v656Publication] = [v656CandidatePath, v656PublicationPath].map(read); const v655Candidate = read(v655CandidatePath); @@ -590,6 +637,7 @@ describe('release state docs', () => { const v650Publication = read(v650PublicationPath); const v640Publication = read(v640PublicationPath); + expectV659ReleaseDocs(status); expectV658ReleaseDocs(status); expectV657ReleaseDocs(status); expectV656CandidateEvidence(v656Candidate); @@ -618,6 +666,16 @@ describe('release state docs', () => { }); }); +describe('v6.5.9 candidate publication-marker calibration', () => { + it('rejects a GitHub Release marker in candidate release notes', () => { + const status = read('STATUS.md'); + const candidate = read(v659CandidatePath); + const releaseNotes = `${read('docs/releases/v6.5.9.md')}\nhttps://github.com/git-stunts/git-cas/releases/tag/v6.5.9\n`; + + expect(() => expectV659CandidateEvidence(status, candidate, releaseNotes)).toThrow(); + }); +}); + describe('v6.5.8 candidate publication-marker calibration', () => { it('rejects a GitHub Release marker in candidate release notes', () => { const candidate = read(v658CandidatePath); diff --git a/test/unit/docs/release-truth.test.js b/test/unit/docs/release-truth.test.js index 52236c37..d5fd222f 100644 --- a/test/unit/docs/release-truth.test.js +++ b/test/unit/docs/release-truth.test.js @@ -356,6 +356,23 @@ describe('bounded application-write release documentation', () => { }); }); +describe('compound workspace-admission release documentation', () => { + it('ships and links the v6.5.9 migration-free compound contract', () => { + const readme = read('README.md'); + const upgrading = read('UPGRADING.md'); + const releaseNotes = read('docs/releases/v6.5.9.md'); + + expect(readme).toContain('[v6.5.9 Release Notes](./docs/releases/v6.5.9.md)'); + expect(upgrading).toContain('## v6.5.8 To v6.5.9'); + expect(upgrading).toMatch(/requires no application or stored-data\s+migration/); + expect(releaseNotes).toContain('# git-cas v6.5.9 Release Notes'); + expect(releaseNotes).toContain('200 to 23 Git children'); + expect(releaseNotes).toMatch(/33 retained generations\s+to one/); + expect(releaseNotes).toMatch(/requires no application or stored-data migration/); + expect(releaseNotes).toMatch(/no new object format,\s+descriptor version, ref namespace/); + }); +}); + describe('advanced guide rendering', () => { it('keeps the table of contents rendered as Markdown links', () => { const advancedGuide = read('ADVANCED_GUIDE.md'); From 039c93d728cd15f587f20055bce8896aba0a8053 Mon Sep 17 00:00:00 2001 From: James Ross Date: Mon, 24 Aug 2026 11:48:05 -0700 Subject: [PATCH 2/3] docs: bind v6.5.9 candidate identity --- STATUS.md | 18 +++++----- .../witness/release-candidate.md | 33 +++++++++++++++---- .../witness/verification.md | 8 +++-- docs/releases/v6.5.9.md | 8 +++-- test/unit/docs/release-state.test.js | 5 +-- 5 files changed, 49 insertions(+), 23 deletions(-) diff --git a/STATUS.md b/STATUS.md index 328c07be..fd9fa845 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,7 +2,7 @@ **Last tagged release:** `v6.5.8` (`2026-08-23`) **Current release state:** `v6.5.9` release candidate; tag, npm publication, and GitHub Release remain pending the reviewed tag workflow. -**Latest verification:** exact reviewed implementation head `29ba6e88` passed 14/14 release-verifier stages with 7,141 observed tests; exact versioned-candidate verification remains pending. +**Latest verification:** exact versioned candidate `5512acd4` passed 14/14 release-verifier stages with 7,147 observed tests across Node, Bun, Deno, and all three real-Git integration suites. **Playback truth:** `main` **Runtimes:** Node.js 22.x, Bun, Deno **Current planning method:** [WORKFLOW.md](./WORKFLOW.md) @@ -20,13 +20,15 @@ portability are still partial. - **v6.5.9 candidate posture** — implementation PR [#124](https://github.com/git-stunts/git-cas/pull/124) merged normally as - `eb8d6176`; its exact reviewed head `29ba6e88` passed all 14 release-verifier - stages with 7,141 observed tests. npm, JSR, and runtime metadata identify - `6.5.9`, while the signed tag and registry artifact remain deliberately - absent pending release review. The SHA-1/SHA-256 compound witness preserves - every application-handle digest while reducing a 33-operation graph from 200 - to 23 Git children and from 33 retained generations to one. The release is - additive and requires no application or stored-data migration. + `eb8d6176`; release PR [#125](https://github.com/git-stunts/git-cas/pull/125) + reviews the versioned candidate. Exact candidate `5512acd4` passed all 14 + release-verifier stages with 7,147 observed tests. npm, JSR, and runtime + metadata identify `6.5.9`, while the signed tag and registry artifact remain + deliberately absent pending release review. The SHA-1/SHA-256 compound + witness preserves every application-handle digest while reducing a + 33-operation graph from 200 to 23 Git children and from 33 retained + generations to one. The release is additive and requires no application or + stored-data migration. - **v6.5.8 artifact posture** — implementation PR [#120](https://github.com/git-stunts/git-cas/pull/120) and release PR [#121](https://github.com/git-stunts/git-cas/pull/121) merged normally. diff --git a/docs/design/0060-compound-workspace-admission/witness/release-candidate.md b/docs/design/0060-compound-workspace-admission/witness/release-candidate.md index f7893184..565fad91 100644 --- a/docs/design/0060-compound-workspace-admission/witness/release-candidate.md +++ b/docs/design/0060-compound-workspace-admission/witness/release-candidate.md @@ -6,7 +6,7 @@ Issue: #123 Implementation review: #124 -Release review: pending +Release review: #125 ## Scope @@ -46,8 +46,27 @@ That exact implementation head passed the complete release method: | npm and JSR dry-runs | PASS | - | | **Release method summary** | **PASS: 14/14 gates** | **7,141** | -Versioned candidate verification: pending. The committed versioned tree must -pass the same method before this release review can become ready. +The versioned release-candidate tree verified below was committed as +`5512acd477bc5e5a11339d6027a03631d1a3544a`. This following +documentation-only commit binds that immutable candidate identity into the +witness; publication still requires verification of the eventual reviewed +merge. + +The versioned candidate passed the same complete release method: + +| Gate | Result | Observed tests | +| -------------------------- | --------------------- | -------------: | +| Lint | PASS | - | +| Unit tests (Node) | PASS | 2,179 | +| Unit tests (Bun) | PASS | 2,178 | +| Unit tests (Deno) | PASS | 2,169 | +| Public type compatibility | PASS | - | +| Integration tests (Node) | PASS | 207 | +| Integration tests (Bun) | PASS | 207 | +| Integration tests (Deno) | PASS | 207 | +| Examples and build stamp | PASS | - | +| npm and JSR dry-runs | PASS | - | +| **Release method summary** | **PASS: 14/14 gates** | **7,147** | ## Semantic and Process Witness @@ -70,7 +89,7 @@ The release is additive and migration-free. Existing application handles, stored object bytes, descriptor schemas, ref namespaces, workspace methods, readers, and repositories remain compatible without rewriting or cutover. -Publication remains blocked until the versioned candidate passes the full -release method, the release PR passes hosted CI and review, the exact reviewed -merge passes verification, a signed annotated `v6.5.9` tag peels to that merge, -and the release workflow publishes npm plus the final GitHub Release. +Publication remains blocked until release PR #125 passes hosted CI and review, +the exact reviewed merge passes verification, a signed annotated `v6.5.9` tag +peels to that merge, and the release workflow publishes npm plus the final +GitHub Release. diff --git a/docs/design/0060-compound-workspace-admission/witness/verification.md b/docs/design/0060-compound-workspace-admission/witness/verification.md index 64f0218f..98067625 100644 --- a/docs/design/0060-compound-workspace-admission/witness/verification.md +++ b/docs/design/0060-compound-workspace-admission/witness/verification.md @@ -123,6 +123,8 @@ Implementation PR [#124](https://github.com/git-stunts/git-cas/pull/124) merged normally as `eb8d617620fa8f401fb887f5b1bbc341d4746b0a`. Its exact reviewed head `29ba6e88c787a5e54c95a554e9166fd21aae31c0` passed the full 14-stage release verifier with 7,141 observed tests. The versioned v6.5.9 -candidate, reviewed merge, signed tag, registry artifact, and GitHub Release -remain separate gates recorded by the -[release-candidate witness](./release-candidate.md). +candidate `5512acd477bc5e5a11339d6027a03631d1a3544a` then passed the same +14-stage method with 7,147 observed tests. The reviewed merge, signed tag, +registry artifact, and GitHub Release remain separate gates recorded by the +[release-candidate witness](./release-candidate.md) and release PR +[#125](https://github.com/git-stunts/git-cas/pull/125). diff --git a/docs/releases/v6.5.9.md b/docs/releases/v6.5.9.md index 58716e7b..1b99cd64 100644 --- a/docs/releases/v6.5.9.md +++ b/docs/releases/v6.5.9.md @@ -103,9 +103,11 @@ Implementation review #124 merged normally as `eb8d617620fa8f401fb887f5b1bbc341d4746b0a`; its exact reviewed head `29ba6e88c787a5e54c95a554e9166fd21aae31c0` passed all 14 release-verifier stages with 7,141 observed tests across Node, Bun, Deno, and all three real-Git -integration suites. Exact verification of the versioned release-candidate tree -is pending and must pass before review completion. No tag, npm artifact, or -GitHub Release is claimed by this candidate. +integration suites. Exact versioned candidate +`5512acd477bc5e5a11339d6027a03631d1a3544a` then passed the same 14-stage +method with 7,147 observed tests: 2,179 Node, 2,178 Bun, 2,169 Deno, and 207 +integration tests in each runtime. No tag, npm artifact, or GitHub Release is +claimed by this candidate. ## Compatibility diff --git a/test/unit/docs/release-state.test.js b/test/unit/docs/release-state.test.js index 323fb2f8..a594f24b 100644 --- a/test/unit/docs/release-state.test.js +++ b/test/unit/docs/release-state.test.js @@ -419,12 +419,13 @@ function expectV659CandidateEvidence(status, candidate, releaseNotes) { expect(status).toContain('**v6.5.9 candidate posture**'); expect(candidate).toContain('# PERF-0060 v6.5.9 Release Candidate Witness'); expect(candidate).toContain('Implementation review: #124'); - expect(candidate).toContain('Release review: pending'); + expect(candidate).toContain('Release review: #125'); expect(candidate).toContain('eb8d617620fa8f401fb887f5b1bbc341d4746b0a'); expect(candidate).toContain('29ba6e88c787a5e54c95a554e9166fd21aae31c0'); + expect(candidate).toContain('5512acd477bc5e5a11339d6027a03631d1a3544a'); expect(candidate).toContain('**PASS: 14/14 gates**'); expect(candidate).toContain('**7,141**'); - expect(candidate).toContain('Versioned candidate verification: pending'); + expect(candidate).toContain('**7,147**'); expect(candidate).toMatch(/explicitly\s+unpublished\s+candidate/); expect(releaseNotes).toMatch(/requires no application or stored-data migration/); expectNoV659PublicationEvidence(status, candidate, releaseNotes); From dfa49298a7f33c83bebe33faa346e21b9a137932 Mon Sep 17 00:00:00 2001 From: James Ross Date: Mon, 24 Aug 2026 11:55:05 -0700 Subject: [PATCH 3/3] docs: clarify release candidate witness --- .../witness/release-candidate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/design/0060-compound-workspace-admission/witness/release-candidate.md b/docs/design/0060-compound-workspace-admission/witness/release-candidate.md index 565fad91..95a5901e 100644 --- a/docs/design/0060-compound-workspace-admission/witness/release-candidate.md +++ b/docs/design/0060-compound-workspace-admission/witness/release-candidate.md @@ -47,7 +47,7 @@ That exact implementation head passed the complete release method: | **Release method summary** | **PASS: 14/14 gates** | **7,141** | The versioned release-candidate tree verified below was committed as -`5512acd477bc5e5a11339d6027a03631d1a3544a`. This following +`5512acd477bc5e5a11339d6027a03631d1a3544a`. The following documentation-only commit binds that immutable candidate identity into the witness; publication still requires verification of the eventual reviewed merge.