Reconcile #15: restore v0.3.1 identity, CAS backends as optional deps, fix daemon gating (unbreak main CI) - #17
Merged
Merged
Conversation
#13 gated the cas/anchored-chain dynamic import on `STORE === "cas"`, but the store daemon (store-daemon.mjs) builds a CasStore with no STORE set. ESM evaluates store.mjs's top-level gate before the daemon body runs, so the daemon can't flip the env either — the cas/anchored-chain bindings stayed undefined and the daemon crashed: "generateEd25519Keypair is not a function" (store.mjs:55). This is what turned main's CI red on the socket-store step. Load the backends when a CasStore is actually constructed, via a new async `makeCasStore(dir)` factory that both makeStore (STORE=cas) and the daemon go through. The default FsStore / SocketStore-client paths never touch it, so the "offline, free" run still needs no @bounded-systems packages installed (verified by running the default audit with cas/anchored-chain moved aside). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#15 ("declare prose deps") rewrote package.json and, beyond declaring the prose deps, also reset version 0.3.0 -> 0.0.1, added private:true, and dropped the cas/anchored-chain deps + scripts/license. The version reset tripped release.yml into cutting a stray "Latest" v0.0.1 release, and removing the deps left the socket-store CI step unable to resolve @bounded-systems/cas (main CI red). Restore the 0.3.x package identity (version 0.3.1, description, bin, scripts, license; drop private:true) and bring cas/anchored-chain back as OPTIONAL deps: - default `node audit.mjs` (FsStore) + the prose path stay JSR-free — #15's intent; - the CAS/socket store backings install on demand. package-lock.json regenerated in sync (root 0.3.1, optional entries with resolved+integrity; anchored-chain 0.2.1 -> 0.2.2 within ^0.2.1). ci.yml: `npm ci --omit=optional` proves the JSR-free core, then a dedicated step installs the optional CAS backends before the socket-store test — so npm.jsr.io flakiness can only affect that one step, not the default pipeline. On merge, release.yml sees version 0.3.1 and cuts v0.3.1 (Thread 1). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 23, 2026
bdelanghe
added a commit
that referenced
this pull request
Jun 23, 2026
Bump 0.3.1 → 0.4.0 for the verbspec surfaces merged since v0.3.1: audit + extract authored once as VerbSpecs → CLI + MCP (string-audit-mcp bin), Anthropic report tool single-sourced from a VerbSpec (#18, #19); cas/anchored-chain made optional (#13, #15, #17). The release workflow auto-tags v0.4.0 on merge.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
mainCI is red and a strayv0.0.1"Latest" release exists — both fallout from#15 ("Add package.json: declare prose deps"). That commit's message only mentions
declaring the prose deps, but it also rewrote
package.jsonto:version0.3.0 → 0.0.1 + add"private": true,cas/anchored-chainfrom deps (andscripts/license).Fallout:
release.yml→ it cut astring-audit v0.0.1GitHubrelease, now marked Latest, sitting below the real v0.3.0.
npm ciinstalls only the 9 prose packages, so the socket-storeCI step crashes (
Cannot find package '@bounded-systems/cas'). Combined with thepre-existing store: lazy-load cas/anchored-chain (fix standalone offline run) #13 daemon-gating bug (
generateEd25519Keypair is not a function), thepipeline is red.
package-lock.jsonwas left out of sync withpackage.json(root version0.1.0,cas still under regular deps).
What this PR does
Restore the 0.3.x package identity (per maintainer decision — the 0.0.1/private reset
was unintended):
version 0.3.1, full description,bin,scripts,license; dropprivate: true.Bring cas/anchored-chain back as
optionalDependencies(per maintainer decision):node audit.mjs(FsStore) + the whole prose path stay JSR-free — Add package.json (declare prose deps) #15's intent;STORE=cas/ socket-store backings install on demand.Fix the daemon-gating bug (
store.mjs/store-daemon.mjs): load the cas/anchored-chainbackends when a
CasStoreis constructed (new asyncmakeCasStorefactory) rather thangating on the
STOREenv — the daemon builds aCasStorewith noSTOREset, so theenv gate never loaded them.
ci.yml:npm ci --omit=optionalproves the JSR-free core, then a dedicatedInstall optional CAS backends step runs before the socket-store test — so
npm.jsr.ioflakiness can only affect that one step, never the default pipeline.
package-lock.jsonregenerated in sync (root0.3.1; optional entries carryresolved+integrity+optional:true;anchored-chain0.2.1 → 0.2.2, within^0.2.1).README Status → v0.3.1; notes the Vale gate (#6/#12) + optional CAS backings.
On merge,
release.ymlseesversion 0.3.1and cuts v0.3.1 (Thread 1). The strayv0.0.1tag + release will be deleted after this merges (once the version is no longer0.0.1, so
release.ymlcan't recreate it).Test — full
ci.ymlsequence locally (Node 24)Also re-verified the invariant: with
cas/anchored-chainmoved aside, the defaultnode audit.mjsstill runs (default path imports neither).Supersedes #14 (v0.3.1 bump, written against the pre-#15 package.json) and #16 (the store
fix alone, which is insufficient now that #15 removed the deps) — both closed.
PR run sheet
store fix, deps, lockfile, and ci.yml are interdependent for a green socket-store step,
so they land together (neither passes CI alone).
and the store: lazy-load cas/anchored-chain (fix standalone offline run) #13 env-gated lazy import vs. the daemon's env-less
CasStoreconstruction.makeCasStorefactory; both construction sites route through it.RELEASE-v0.3.0.mdleft out.🤖 Generated with Claude Code