fix(brains): sync the generated capability catalog and bump to 2.9.1 [BRNS-MCP-052][BRNS-CORE-061] - #28
Merged
Merged
Conversation
…[BRNS-MCP-052][BRNS-CORE-061] The five published skill artifacts and their digest manifest are generated in ssvlabs/brains and are not editable here. This regenerates them from the catalog and moves both client manifests together. Three rendered skills change. brains-write gains two rules in the action contract: get the user's go-ahead for a write before calling, rather than calling to find out whether it drafts; and a second cap, since direct execution is limited to 10/user/60s across every install and past either cap a direct execution degrades to a draft. brains-automation corrects its dry-run guidance. A verify-mode smoke test suppresses act sends and telegram_push, but board and page writes run live, so a smoke test mutates real rows. The previous wording implied every side effect was muted. brains-build admits a recipe-install row, names create_integration_flow as the integration-authoring entry point, and drops create_share_circle from the sharing row, which sat under "give someone access" and grants access to nothing. Patch rather than minor: every tool these rows name is already published elsewhere in the skill set, so no new capability is advertised. tests/plugin-contract/run.ts pins the action contract verbatim and moves with the rendered bytes. That pin forces a human read of the text before it ships; the digest checks, not the pin, are what verify provenance.
olegshmuelov
marked this pull request as ready for review
August 12, 2026 12:12
stefan-ssv-labs
left a comment
Contributor
There was a problem hiding this comment.
🛑 review-pr: 2 blockers against BRNS-MCP-052 / BRNS-CORE-061 — see inline comments.
…S-MCP-052] brains-automation had three content assertions, all Telegram secret-hygiene rules. Everything else about the artifact was digest equality, which proves the bytes came from the catalog and says nothing about what they say. A regeneration could re-drop any draft-vs-execute rule and this suite would stay green — the same blind spot that let the upstream defect reach production. Three rules now pinned, matching how the brains-write contract is pinned: - The write-policy contract, as a whole region from the confirmation-boundary opener to the notify-me lead-in. Automation tokens cannot self-confirm, and a confirmation-required action is released by write_policy rather than the sandbox. - The smoke-test contract, as a whole region covering the run_automation_once argument list. Board and page writes run live under dry_run AND verify_mode, so a mandated smoke test mutates real rows. - The Send grant row, verbatim, plus a uniqueness check that exactly one row in the grant table states act_on_integration's draft-vs-send disposition. Whole regions rather than substrings because both failure modes are known here: a keyword pin dies to paraphrase, and a lone sentence pin dies at the seam, where the contradiction is written beside the pinned text and every substring check still passes. The Send row is the exception and takes a uniqueness check instead of a region, because the other twenty rows are a grant inventory that moves for unrelated reasons and pinning them would add no coverage of this rule. Each rule was mutation-proved independently: deleted, then paraphrased with surrounding text intact, with the manifest digest realigned each time so the digest check could not be what failed. Six mutations, six failures, each naming its own region.
stefan-ssv-labs
approved these changes
Aug 12, 2026
stefan-ssv-labs
left a comment
Contributor
There was a problem hiding this comment.
✅ review-pr: clean re-review; both prior blockers are verified fixed.
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.
Merge gate
Do not merge until the release is serving in production.
ssvlabs/brains#1326promotes both source changes tomain; until it merges and every production MCP replica is on that image, merging here publishes guidance ahead of the server it describes.The manifest stamps
source_commit: 6fb7b2356592b4e5313176cc55d6d06cb3130e31, which is contained in#1326. Once that promotion merges, this commit is an ancestor ofmainand production runs its code, so the stamp names the exact tree these bytes were rendered from — more precise than the promotion commit, which merely contains it — and no re-render is needed.What this does
Regenerates the five published skill artifacts and their digest manifest from the capability catalog in
ssvlabs/brains. These artifacts are build output and are not editable here; wording changes belong upstream. Both client manifests move2.9.0→2.9.1together.Three generated skills move:
brains-write/SKILL.md— two rules added to the action contract (BRNS-MCP-052): get the user's go-ahead for a write before calling rather than calling to find out whether it drafts, and a second cap of 10 direct executions/user/60s across every install, past which a direct execution degrades to a draft.brains-automation/SKILL.md— corrects the dry-run guidance (BRNS-MCP-052). A verify-mode smoke test suppresses act sends andtelegram_push, but board and page writes run live, so a smoke test mutates real rows; the previous wording implied every side effect was muted. This is the change worth reading — the published text is false in the direction that costs a user real data.brains-build/SKILL.md— admits a recipe-install row, namescreate_integration_flowfor integration authoring, and dropscreate_share_circlefrom the sharing row (BRNS-CORE-061), which sat under "give someone access" and grants access to nothing.capability-catalog.jsonadvances threeartifact_sha256values, twocatalog_sha256values, andsource_commit.tests/plugin-contract/run.tspins the action contract verbatim and has to move with the rendered bytes — that pin forces a human read of the text before it ships; the digest checks, not the pin, verify provenance. Seven files;brains-boardandbrains-workflowre-render byte-identically and nothing else authored is touched.Why patch, not minor
Every tool the new rows name is already published elsewhere in the skill set, so no new capability is advertised — measured as a set difference over the whole published tree, not a spot check: zero identifiers in the render are absent from 2.9.0. The counter-signal, recorded rather than buried:
create_share_circleis a net removal, named only in the skill being rewritten. It still exists and works and no published skill's instructions depend on it, so this narrows guidance rather than breaking an API.Why this waits for the release
Provenance, not contradiction. The manifest stamps
source_commit, and that must name a commit production actually serves — or is contained in — so a later reader is not misled about what was live when these bytes shipped. Nothing here advertises behaviour production lacks: the second rate cap already exists server-side, all five tools the new row names already exist, and the corrected dry-run text describes today's behaviour.A version bump reaches an install only when that install updates, so this correction does not reach anyone pinned to 2.9.0 or running with auto-update off.
Verification
--checkbefore being used as a source.source_commit, stamped on the published copy only.2.9.0 -> 2.9.1.Before merging
ssvlabs/brains#1326is merged tomainas a merge commit, so6fb7b2356stays an ancestor. A squash would rewrite it and the stamp would name a commitmainno longer contains.currentRevision == updateRevisionrather than a deploy status.