feat(brains): publish the generated flow skills and recut brains-build [BRNS-CORE-011] [BRNS-CORE-012] - #23
Conversation
nir-ssvlabs
left a comment
There was a problem hiding this comment.
LGTM on the delivery itself — but there's a merge-ordering hazard with #22 that isn't visible from inside either PR, so please read the last section before merging.
Verified rather than assumed (the invariant here is "these bytes are the monorepo's, unmodified"):
- All five artifact digests match their bytes. I recomputed sha256 over each
artifact_pathand compared to the declaredartifact_sha256— 5/5 match, including the two re-rendered files (brains-write,brains-build), so nothing was hand-edited and the digest wasn't refreshed to cover an edit.source_commit 864c45fais a real commit on the monorepo. - The version-only manifest diff is correct, not an omission. Skills are directory-discovered on both clients — the Claude manifest has no
skillskey and the Codex manifest points at./skills/— so three new skill directories ship without being enumerated. Worth stating because "3 skills added, manifests only changed a version string" is exactly the shape that would be a reaches-nobody bug if either client required a manifest list. 2.7.0 → 2.8.0on both manifests, aligned and forward, and minor-shaped matches the convention #22 documents (feat(…)→ minor).- Contract pin correctly enumerates all ten skills alphabetically, with the three new ones in the digest map.
main at 2.7.0: this one goes to 2.8.0, and #22 (the claude.ai capture-claim fix) goes to 2.7.1.
- #22 first, then this —
2.7.0 → 2.7.1 → 2.8.0, both strictly forward, both guards pass. - This first, then #22 — #22 becomes
2.8.0 → 2.7.1, a downgrade. Its delivery guard fails by design (that guard compares SemVer precedence precisely so a downgrade can't slip through), and if anyone waves it through, #22 publishes a version below the live one — so hosts stay on2.8.0and the capture-claim fix reaches zero users while looking merged. That's the exact failure mode the guard was written for.
So: merge #22 before this one, or if this lands first, #22 needs a re-bump to 2.8.1 before it can go. No change needed here either way — this PR is correct standalone; the constraint just isn't observable from either PR's own checks, since each is green against a main that still reads 2.7.0.
Approving.
…d [BRNS-CORE-011] Publishes brains-board, brains-automation and brains-workflow as their own routable skills, recuts brains-build as the capability inventory that yields to them, and refreshes brains-write. All five are generated from the capability catalog in ssvlabs/brains and are digest-pinned by the manifest. Plugin content reaches users only when the version increases, so the 2.7.1 -> 2.8.0 bump is the delivery, not bookkeeping. Contract test changes the regeneration forces: - extend the artifact map and capability-id pin from two entries to five - re-pin the skill set to the sorted ten, and record why the eager-metadata budget was spent on three routable procedures rather than abandoned - drop automation_secret and telegram_push from the internal-capability denylist: both are registered MCP tools, so the list was conflating internal code identifiers with user-facing tool names and would fail a correct artifact - assert instead that the secret-hygiene rails are PRESENT in brains-automation, which nothing here would otherwise notice being deleted - rebuild trigger disjointness around per-skill phrase ownership, so the check pins brains-build's yield rather than sampling phrases it no longer claims
f233b14 to
a579cad
Compare
What this delivers
Publishes the three flow skills (brains-board / brains-automation / brains-workflow) and the recut brains-build, rendered from ssvlabs/brains
864c45fa(stamped as the manifest'ssource_commit). Version 2.7.1 → 2.8.0 — hosts update on version, so the bump is the delivery.brains-writeis re-rendered with quoted frontmatter (monorepo #1245).Closes BRNS-CORE-011 and BRNS-CORE-012.
Generated, not authored here
The five skill artifacts are byte-identical rendered copies of the monorepo's capability catalog; the manifest digest-pins each one. Do not hand-edit them — fixes belong upstream and arrive by regeneration.
Contract-test changes
Skill-set pin 7 → 10; trigger-owner disjointness asserted in both directions from the authored trigger arrays; the secret-hygiene rails asserted positively (three rule sentences); the leak denylist narrowed to true internal identifiers —
automation_secretandtelegram_pushare registered tool names the automation skill must teach, not leaks.Verification
Contract suite green with a real
claude plugin validate --strict; delivery guard passes 2.7.0 → 2.8.0; mutation proofs (rail deletion, trigger collision, unbumped version) each fail the intended assertion. Codex review of this diff: clean on the delivery itself; four findings in the generated procedure content filed upstream as BRNS-CORE-057 — that content is already live in production on the web-agent surface, so it does not gate this delivery.