Skip to content

Open Second Brain v1.94.0 - The Ledger Reads Back

Choose a tag to compare

@itechmeat itechmeat released this 26 Oct 14:25
61a7ff1

Open Second Brain v1.94.0 - The Ledger Reads Back

Open Second Brain v1.94.0 gives the continuity ledger its intended readback path. The Hermes provider's native memory writes have been mirrored into the ledger as durable, attributable records since v1.16.0, but the ledger was write-only for recall: a fact the host wrote could be exported for audit and never recalled by the memory system itself, because the search index admits only Markdown pages, the session grep keeps only session kinds, and the context pack reads the preferences and retired lanes. The new o2b brain continuity promote verb turns those records into ordinary preference pages - dry-run by default and sealed by an approval digest on apply, so a mirrored fact becomes recallable only through a review that says exactly what will land - and a strict re-scan at promotion time means a credential the host wrote into its memory cannot ride along into the search index or the prompt context.

The Ledger Reads Back

What ships

  • Mirrored host memory writes become recallable through an explicit, reviewable promotion verb. o2b brain continuity promote [--month YYYY-MM] [--apply] [--approval-digest <hex>] [--json] renders each host_memory_write record as a preference page under Brain/preferences/pref-hostmem-<record-id12>.md, deterministic per record id, with the frontmatter identity derived from the same record-derived ref as the filename, so an id-keyed lookup lands on the file that exists. The verb is dry-run by default: it prints the per-record plan (create, update, recreate, skip-unchanged or conflict), every skip named with its reason, private records dropped and counted, and a plan digest; --apply re-checks the digest before the snapshot or any write, so a mismatch refuses with the vault untouched, mirroring the approval semantics of o2b brain import-claude-memory. Pages land _status: unconfirmed under the vault's dream.unconfirmed_window_days - a poisoned host write never becomes a live rule just by being promoted - and the confirm flow, page search and the context pack treat a promoted page like any other preference. A deliberately retired page is never resurrected by a re-run, and no supersession is inferred: a replace record promotes as its own page beside the one it superseded, because the ledger never says which record replaced which.
  • The strict re-scan rides along, so a stored credential cannot become an indexed fact. The ledger redacts at write time under the redactor's loose defaults, which is exactly why the export door re-scans what it reads: a vendor key, a bare high-entropy token or a user:pass@host URL can sit in a row whose redacted flag is false, and the read model never re-scans. Promotion now runs that same strict grade on every record before anything is rendered, and the masked text is what lands - the fact stays recallable, the credential never reaches the search index, the context pack or a configured remote embedding provider, and the masked records are counted in the plan output.
  • The edges the review added. A malformed ledger row (a non-canonical createdAt or record id) skips by name and never aborts the run; records with identical content promote once, their later duplicates skipping by name, so repeated host writes cannot fill the context-pack budget with the same fact; a corrupt Brain/.imports/host-memory-promotions.json is reported by the dry run (manifest_corrupt: true under --json) and refuses every apply until the operator reconciles the file, and the manifest is only rewritten when something was actually applied; a conflict is a pref-hostmem-* page the promotion manifest does not record - an edit to a landed page is kept and plans skip-unchanged - and a conflicting apply exits 2 after the safe writes land, with the same JSON envelope every other exit spells, plans included.
  • The ledger stays the write-only audit substrate. A promotion never rewrites or prunes the ledger; every page's Origin section names the ledger shard and the exact record id, the apply records a promotion manifest, a snapshot and a log event, and the division of labor stays clean: brain continuity export answers "what happened", promote answers "make it recallable". install/hermes.md documents the flow for the Hermes operator, including plainly that promote does not restore Hermes' built-in memory file, and o2b brain continuity --help covers all three subcommands.

Process wins

  • One source per fact: every claim above traces to the 1.94.0 CHANGELOG entry or the merged PR #278 description, and the quality numbers come from the local gate run at the merge-branch head.
  • Two independent review rounds closed before merge, each finding fixed with its regression: the external review (.reviews/pr-278-review-opus-5.5.md, one High and ten Medium findings - the strict re-scan, the malformed-row named skips, the corrupt-manifest refusal, the identical-content dedup, the TTY-independent non-interactive guard, the honest docs wording) and the CodeRabbit round, whose merge-blocking embedding-path concern is the same High finding in another spelling. The review threads carry the fix commit.
  • Quality record: 20,604 tests / 0 fail at head 6df4e2e on the CI-pinned Bun 1.4.0, TypeScript clean, lint at 0 errors, version synced, the openclaw bundle verified byte-identical under a CI-toolchain rebuild (the verb is CLI-only; the plugin surface does not import it), and the release image rendered from the committed SVG source.

Notes

  • Promote is deliberately CLI-only in this release. The Hermes operator who asked reaches it through o2b; an MCP surface is follow-up work if operators ask for it, not something this release claims.
  • Redaction at promotion is honest about its shape: a record the write-time scan masked still promotes (its text is already inert), and a record the strict re-scan changes is counted - the verb never claims an unscanned row is clean, because write-time masking is documented as incomplete.
  • The version bump to 1.94.0 shipped inside the PR (#278), per the project rule in CLAUDE.md.
  • Release image: the canonical terminal style, here as the promote flow end to end (animated GIF in this body; static PNG, 2x PNG and the SVG source attached as assets).