ruvnet-brain 4.0.35 → 4.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # 🧠 RuvNet Brain
6
6
 
7
- ### 🧠 RuvNet Brain — [![RuvNet Brain version 4.0.35 — updated 2026-07-30 03:24 EDT](https://img.shields.io/badge/version_4.0.35-updated_2026--07--30_03:24_EDT-1E90FF?style=for-the-badge&labelColor=0757BA)](https://github.com/stuinfla/ruvnet-brain/blob/main/plugin/.claude-plugin/plugin.json)
7
+ ### 🧠 RuvNet Brain — [![RuvNet Brain version 4.0.36 — updated 2026-07-30 03:24 EDT](https://img.shields.io/badge/version_4.0.36-updated_2026--07--30_03:24_EDT-1E90FF?style=for-the-badge&labelColor=0757BA)](https://github.com/stuinfla/ruvnet-brain/blob/main/plugin/.claude-plugin/plugin.json)
8
8
 
9
9
  **A portable, source-grounded brain over Reuven Cohen's (rUv's) RuvNet stack — delivered as a Claude Code plugin that makes Claude _use_ the stack instead of fighting it.**
10
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ruvnet-brain",
3
- "version": "4.0.35",
3
+ "version": "4.0.36",
4
4
  "description": "One-command installer for RuvNet Brain — a portable, source-grounded brain over rUv's RuvNet building blocks, delivered as a Claude Code plugin so Claude uses the stack instead of fighting it.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ruvnet-brain",
3
3
  "description": "RuvNet brain transplant for Claude Code — grounds every RuvNet decision in real source across 71 rUv repositories, prefers Ruflo / RuVector-RVF / AgentDB over training-prior defaults (pgvector, Pinecone, hand-rolled cosine), and can pull in any RuvNet repo on demand. Ships an enforced UserPromptSubmit retrieve-and-inject grounding hook that sharply reduces drift.",
4
- "version": "4.0.35",
4
+ "version": "4.0.36",
5
5
  "author": {
6
6
  "name": "Stuart Kerr"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ruvnet-brain",
3
- "version": "4.0.35",
3
+ "version": "4.0.36",
4
4
  "description": "Source-grounded RuvNet knowledge, lifecycle enforcement, and learning for Codex.",
5
5
  "author": {
6
6
  "name": "Stuart Kerr"
@@ -70,6 +70,27 @@ export const VARIANTS = Object.freeze({
70
70
  env: () => ({
71
71
  RUVNET_STRICT_INSTALL: '1',
72
72
  RUVNET_BRAIN_PROFILE: 'complete',
73
+ // A VIRGIN AUTOMATED HOME CAN NEVER HAVE RECORDED CODEX HOOK TRUST (fixed 2026-08-08).
74
+ //
75
+ // The staged variant above has carried this since it was written; the published variant did
76
+ // not, and that asymmetry failed the post-publication seal on EVERY release. The doctor ran
77
+ // green on everything that matters — "✓ Healthy", "✓ Grounding PROVEN", "✓ Self-check passed",
78
+ // 17 hook registrations across 68 firings — and then exited non-zero on the one condition a
79
+ // fixture cannot satisfy:
80
+ //
81
+ // ! Codex installed the Brain, but 17 lifecycle hooks await review.
82
+ // Fix: Start a fresh Codex session, run /hooks, and trust ruvnet-brain@ruvnet-brain.
83
+ //
84
+ // That instruction is correct for a human and impossible for a runner: hook trust is recorded
85
+ // interactively. So each release published both channels successfully and then reported
86
+ // failure, which is the exact "gate reporting something other than what it measured" pattern
87
+ // this repo has spent a week removing — and worse here, because it made a GOOD release look bad.
88
+ //
89
+ // This does NOT weaken the check. install.mjs:1994 documents the bypass as executing the real
90
+ // hook commands "without pretending a fresh interactive user has already reviewed them", and
91
+ // the hooks still run — 68 firings, all inside contract. Only the pending-trust verdict is
92
+ // waived, and only for an automated fixture. End-user doctor runs remain fail-closed.
93
+ RUVNET_CODEX_HOOK_TRUST_MODE: 'bypass',
73
94
  }),
74
95
  }),
75
96
  });
@@ -14,7 +14,7 @@ import { spawn, spawnSync } from 'node:child_process';
14
14
  // `fixtures.claude` described the same fixture and nothing could tell. The richer
15
15
  // post-publication proofs below (payload assertions, MCP wiring, SOURCE.json, rpcSearch)
16
16
  // stay here — they are this side's job, not duplication.
17
- import { HOST_MODES, RECEIPT_MODE_NAMES, MODE_FROM_RECEIPT_NAME, classifyDoctor } from './host-install-matrix.mjs';
17
+ import { HOST_MODES, RECEIPT_MODE_NAMES, MODE_FROM_RECEIPT_NAME, classifyDoctor, VARIANTS } from './host-install-matrix.mjs';
18
18
  import { pathToFileURL } from 'node:url';
19
19
  import { evaluateCandidateReceipt, evaluatePublicationReceipt } from './release-proof.mjs';
20
20
  import { verifyPayload } from './release-payload.mjs';
@@ -232,8 +232,12 @@ export function livePublicationAdapter({ root = process.cwd() } = {}) {
232
232
  CODEX_HOME: codexHome,
233
233
  RUVNET_BRAIN_HOME: brainHome,
234
234
  RUVNET_BRAIN_KB: kb,
235
- RUVNET_STRICT_INSTALL: '1',
236
- RUVNET_BRAIN_PROFILE: 'complete',
235
+ // Env comes from the ONE variant table (host-install-matrix VARIANTS.published), not a
236
+ // second hand-written copy — this file's own header promises "ONE doctor rule and ONE mode
237
+ // vocabulary, shared with the staged-side check", and the copy had already drifted: it
238
+ // omitted the Codex hook-trust bypass the staged side carries, which failed the seal on
239
+ // every release.
240
+ ...VARIANTS.published.env({ packageRoot }),
237
241
  CI: 'true',
238
242
  PATH: isolatedPath(mode, temp),
239
243
  };