Skip to content

Reconcile #15: restore v0.3.1 identity, CAS backends as optional deps, fix daemon gating (unbreak main CI) - #17

Merged
bdelanghe merged 2 commits into
mainfrom
reconcile-15-cut-0.3.1
Jun 23, 2026
Merged

Reconcile #15: restore v0.3.1 identity, CAS backends as optional deps, fix daemon gating (unbreak main CI)#17
bdelanghe merged 2 commits into
mainfrom
reconcile-15-cut-0.3.1

Conversation

@bdelanghe

Copy link
Copy Markdown
Contributor

Why

main CI is red and a stray v0.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.json to:

  • reset version 0.3.0 → 0.0.1 + add "private": true,
  • drop cas / anchored-chain from deps (and scripts / license).

Fallout:

  1. The version reset tripped release.yml → it cut a string-audit v0.0.1 GitHub
    release, now marked Latest, sitting below the real v0.3.0.
  2. With the deps gone, npm ci installs only the 9 prose packages, so the socket-store
    CI step
    crashes (Cannot find package '@bounded-systems/cas'). Combined with the
    pre-existing store: lazy-load cas/anchored-chain (fix standalone offline run) #13 daemon-gating bug (generateEd25519Keypair is not a function), the
    pipeline is red.
  3. package-lock.json was left out of sync with package.json (root version 0.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; drop
private: true.

Bring cas/anchored-chain back as optionalDependencies (per maintainer decision):

Fix the daemon-gating bug (store.mjs / store-daemon.mjs): load the cas/anchored-chain
backends when a CasStore is constructed (new async makeCasStore factory) rather than
gating on the STORE env — the daemon builds a CasStore with no STORE set, so the
env gate never loaded them.

ci.yml: npm ci --omit=optional proves the JSR-free core, then a dedicated
Install optional CAS backends step runs before the socket-store test — so npm.jsr.io
flakiness can only affect that one step, never the default pipeline.

package-lock.json regenerated in sync (root 0.3.1; optional entries carry
resolved + integrity + optional:true; anchored-chain 0.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.yml sees version 0.3.1 and cuts v0.3.1 (Thread 1). The stray
v0.0.1 tag + release will be deleted after this merges (once the version is no longer
0.0.1, so release.yml can't recreate it).

Test — full ci.yml sequence locally (Node 24)

npm ci --omit=optional   → 9 packages, cas NOT installed (JSR-free core ✓)
node test.mjs            ✓   node audit.mjs ✓   cache invariant (0 miss) ✓   extract ✓
npm install --include=optional → +3 packages, cas installed ✓
socket store: daemon mounts · cold · warm 0 miss ✓   (exercises anchored-chain 0.2.2 signing API)

Also re-verified the invariant: with cas/anchored-chain moved aside, the default
node audit.mjs still 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

  1. Independent PR — one goal: undo the Add package.json (declare prose deps) #15 regression and ship v0.3.1 green. The
    store fix, deps, lockfile, and ci.yml are interdependent for a green socket-store step,
    so they land together (neither passes CI alone).
  2. Changed codepaths verified — full ci.yml sequence + the absent-deps invariant, locally.
  3. Root cause identifiedAdd package.json (declare prose deps) #15's package.json rewrite (version reset + deps removal)
    and the store: lazy-load cas/anchored-chain (fix standalone offline run) #13 env-gated lazy import vs. the daemon's env-less CasStore construction.
  4. No duplication — single makeCasStore factory; both construction sites route through it.
  5. No unrelated changes — untracked RELEASE-v0.3.0.md left out.

🤖 Generated with Claude Code

bdelanghe and others added 2 commits June 23, 2026 00:13
#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>
@bdelanghe
bdelanghe merged commit c2163cd into main Jun 23, 2026
1 check passed
@bdelanghe
bdelanghe deleted the reconcile-15-cut-0.3.1 branch June 23, 2026 04:18
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant