ruvnet-brain 4.0.1 → 4.0.2

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.
Files changed (185) hide show
  1. package/.claude-plugin/marketplace.json +1 -0
  2. package/README.md +4 -4
  3. package/bin/install.mjs +100 -5
  4. package/console/CONTRACT.md +172 -0
  5. package/console/activity.js +753 -0
  6. package/console/app.js +4189 -0
  7. package/console/architecture.html +1221 -0
  8. package/console/assets/depth-1.webp +0 -0
  9. package/console/assets/depth-2.webp +0 -0
  10. package/console/assets/depth-3.webp +0 -0
  11. package/console/assets/harness-vs-plain.svg +259 -0
  12. package/console/assets/hero.webp +0 -0
  13. package/console/assets/memory.webp +0 -0
  14. package/console/assets/metaharness.svg +247 -0
  15. package/console/index.html +777 -0
  16. package/console/install-architecture.html +162 -0
  17. package/console/install-mockup.html +543 -0
  18. package/console/style.css +2144 -0
  19. package/console/tips.css +926 -0
  20. package/console/tips.html +858 -0
  21. package/console/tips.js +128 -0
  22. package/docs/RELEASE-NOTES-4.0.md +88 -0
  23. package/kb/model-requirements.mjs +37 -6
  24. package/keys/ruvnet-brain-signing.pub.pem +3 -0
  25. package/package.json +8 -22
  26. package/plugin/.claude-plugin/marketplace.json +1 -0
  27. package/plugin/.claude-plugin/plugin.json +2 -3
  28. package/plugin/.codex-plugin/plugin.json +1 -1
  29. package/plugin/commands/brain-console.md +2 -2
  30. package/plugin/commands/configure.md +3 -2
  31. package/plugin/commands/rvbc.md +4 -3
  32. package/plugin/commands/rvcb.md +2 -2
  33. package/plugin/hooks/hooks.json +1 -2
  34. package/plugin/mcp/managed-cli-interface.mjs +47 -4
  35. package/plugin/mcp/server.mjs +21 -0
  36. package/plugin/scripts/detach.mjs +14 -0
  37. package/plugin/scripts/first-session-worker.mjs +38 -0
  38. package/plugin/scripts/ground-ruvnet.sh +16 -6
  39. package/plugin/scripts/hook-shim.mjs +7 -7
  40. package/plugin/scripts/learn-capture.sh +22 -3
  41. package/plugin/scripts/learn-flush.mjs +21 -4
  42. package/plugin/scripts/runtime-preferences.mjs +269 -0
  43. package/plugin/scripts/session-start-core.mjs +477 -0
  44. package/plugin/scripts/session-start.sh +3 -858
  45. package/plugin/skills/brain-console/SKILL.md +4 -2
  46. package/plugin/skills/release-proof/SKILL.md +81 -0
  47. package/plugin/skills/release-proof/agents/openai.yaml +4 -0
  48. package/plugin/skills/release-proof/references/receipt-contract.md +38 -0
  49. package/plugin/skills/release-proof/scripts/release-proof.mjs +210 -0
  50. package/plugin/skills/ruvnet-brain/PLAYBOOK.md +5 -1
  51. package/plugin/skills/rvbc/SKILL.md +9 -6
  52. package/scripts/adr-backfill.mjs +107 -0
  53. package/scripts/advocacy-outcomes.mjs +808 -0
  54. package/scripts/agentdb-context.mjs +216 -0
  55. package/scripts/agentdb-fleet-doctor.mjs +101 -0
  56. package/scripts/ascii-drift.mjs +236 -0
  57. package/scripts/behavioral-l1-l4.mjs +210 -0
  58. package/scripts/brain-capability-check.mjs +72 -0
  59. package/scripts/brain-grade-groundtruth.mjs +100 -0
  60. package/scripts/brain-latency-50.mjs +227 -0
  61. package/scripts/brain-novice-50.mjs +189 -0
  62. package/scripts/brain-stamp.mjs +94 -0
  63. package/scripts/brain-state.mjs +212 -0
  64. package/scripts/build-bundle.mjs +522 -0
  65. package/scripts/build-concepts.mjs +132 -0
  66. package/scripts/build-l2.mjs +71 -0
  67. package/scripts/build-primer.mjs +73 -0
  68. package/scripts/build-symbols.mjs +68 -0
  69. package/scripts/calibrate-router.mjs +97 -0
  70. package/scripts/capability-audit.mjs +321 -0
  71. package/scripts/capability-registry.mjs +876 -0
  72. package/scripts/check-indexation.mjs +108 -0
  73. package/scripts/check-legibility.mjs +189 -0
  74. package/scripts/ci/build-fixture-kb.mjs +67 -0
  75. package/scripts/ci/learning-replay-codex-adapter.mjs +62 -0
  76. package/scripts/ci/learning-replay-recorder.mjs +59 -0
  77. package/scripts/ci/mutate-hook-timeout.mjs +70 -0
  78. package/scripts/ci/stranger-fixture-stage.mjs +17 -0
  79. package/scripts/ci/stranger-scenario.mjs +228 -0
  80. package/scripts/ci/stranger-timeout.mjs +25 -0
  81. package/scripts/ci-verdict.mjs +29 -0
  82. package/scripts/claims-verify.mjs +710 -0
  83. package/scripts/clear-claude-tmp.sh +31 -0
  84. package/scripts/console-engine.mjs +434 -0
  85. package/scripts/console-engine.test.mjs +125 -0
  86. package/scripts/corpus-qa.mjs +250 -0
  87. package/scripts/correction-detect-embed.mjs +346 -0
  88. package/scripts/correction-detect-measure.mjs +270 -0
  89. package/scripts/correction-detect.mjs +686 -0
  90. package/scripts/count-chunks.mjs +54 -0
  91. package/scripts/described-questions.json +30 -0
  92. package/scripts/design-grade.mjs +58 -0
  93. package/scripts/dev-plugin-link.sh +105 -0
  94. package/scripts/distill-project.mjs +200 -0
  95. package/scripts/doc-currency.mjs +801 -0
  96. package/scripts/eval-brain.mjs +244 -0
  97. package/scripts/fix-metaharness-memretrieve.mjs +121 -0
  98. package/scripts/full-hints.mjs +87 -0
  99. package/scripts/gate.sh +39 -0
  100. package/scripts/gates.mjs +146 -0
  101. package/scripts/gen-console-images.mjs +54 -0
  102. package/scripts/gen-images.mjs +47 -0
  103. package/scripts/git-clone-refresh.mjs +52 -0
  104. package/scripts/git-hooks/pre-push +126 -0
  105. package/scripts/goal-match.mjs +398 -0
  106. package/scripts/goldie-research.mjs +223 -0
  107. package/scripts/goldie-weekly.sh +67 -0
  108. package/scripts/health-repair.mjs +250 -0
  109. package/scripts/helix-scenario-questions.json +10 -0
  110. package/scripts/ingest-gists.mjs +230 -0
  111. package/scripts/ingest-meeting.mjs +115 -0
  112. package/scripts/ingest-repo.mjs +79 -0
  113. package/scripts/install-npx-witness.sh +49 -0
  114. package/scripts/issue-fix.mjs +639 -0
  115. package/scripts/issue-watch.mjs +276 -0
  116. package/scripts/issue4-close-note.md +31 -0
  117. package/scripts/key-canary.mjs +91 -0
  118. package/scripts/latency-to-surface.mjs +233 -0
  119. package/scripts/learning-enable.mjs +380 -0
  120. package/scripts/learning-replay.mjs +1570 -0
  121. package/scripts/learnings.mjs +62 -0
  122. package/scripts/lesson-gate.mjs +680 -0
  123. package/scripts/lesson-lifecycle.mjs +449 -0
  124. package/scripts/lesson-promote.mjs +262 -0
  125. package/scripts/lesson-ratify.mjs +98 -0
  126. package/scripts/lesson-seed.mjs +252 -0
  127. package/scripts/lesson-store.mjs +447 -0
  128. package/scripts/loop-checkpoint.mjs +86 -0
  129. package/scripts/memdb-health.sh +14 -0
  130. package/scripts/memory-doctor.mjs +271 -0
  131. package/scripts/model-catalog.mjs +79 -0
  132. package/scripts/nightly-controller.mjs +66 -0
  133. package/scripts/nightly-gists.sh +72 -0
  134. package/scripts/nightly-wrapper.sh +180 -0
  135. package/scripts/notify.sh +12 -0
  136. package/scripts/npx-witness.sh +56 -0
  137. package/scripts/onboarding-console.mjs +2749 -0
  138. package/scripts/private-fence.mjs +69 -0
  139. package/scripts/proactivity-metrics.mjs +118 -0
  140. package/scripts/proof-questions.json +56 -0
  141. package/scripts/prove.mjs +95 -0
  142. package/scripts/proxy/claude-proxied.sh +57 -0
  143. package/scripts/proxy/proxy-revert.sh +59 -0
  144. package/scripts/proxy/proxy-up.sh +60 -0
  145. package/scripts/proxy/proxy-verify.mjs +142 -0
  146. package/scripts/published-surface-probe.mjs +241 -0
  147. package/scripts/qe/card-lane-gate.mjs +162 -0
  148. package/scripts/qe/session-start-gate.mjs +229 -0
  149. package/scripts/qe/ux-suite.mjs +323 -0
  150. package/scripts/reconcile-project.mjs +0 -0
  151. package/scripts/record-lesson.mjs +113 -0
  152. package/scripts/refresh-model-catalog.mjs +99 -0
  153. package/scripts/release-proof.mjs +9 -0
  154. package/scripts/release-vector.mjs +281 -0
  155. package/scripts/release.mjs +395 -0
  156. package/scripts/remedy-registry.mjs +247 -0
  157. package/scripts/rerank-cap-eval.mjs +265 -0
  158. package/scripts/rerank-cap-warm-ab.mjs +129 -0
  159. package/scripts/route-cheap.mjs +20 -15
  160. package/scripts/router-utilization.mjs +182 -0
  161. package/scripts/routing-flywheel.mjs +596 -0
  162. package/scripts/rvf-generation.mjs +104 -0
  163. package/scripts/rvf-index-audit.mjs +138 -0
  164. package/scripts/self-update.mjs +508 -0
  165. package/scripts/selfcheck.mjs +7 -1
  166. package/scripts/sign-bundle.mjs +69 -0
  167. package/scripts/signal-watch.mjs +171 -0
  168. package/scripts/stack-sync.mjs +469 -0
  169. package/scripts/stamp-existing-rvf-generations.mjs +53 -0
  170. package/scripts/stamp-sweep.mjs +144 -0
  171. package/scripts/status-honesty.mjs +102 -0
  172. package/scripts/sync-version.mjs +217 -0
  173. package/scripts/token-report.mjs +102 -0
  174. package/scripts/top100-benchmark.mjs +479 -0
  175. package/scripts/top100-corpus.mjs +112 -0
  176. package/scripts/top100-semantic-assertions.mjs +449 -0
  177. package/scripts/update-apply.mjs +9 -0
  178. package/scripts/upgrade-notice.mjs +14 -0
  179. package/scripts/verify-bundle.mjs +51 -0
  180. package/scripts/verify-channels.mjs +184 -0
  181. package/scripts/verify-model-catalog.mjs +104 -0
  182. package/scripts/verify-nightly-close-issue4.sh +31 -0
  183. package/scripts/version.mjs +40 -0
  184. package/scripts/wired-check.mjs +864 -0
  185. package/plugin/scripts/finalize-token-meter.mjs +0 -25
@@ -0,0 +1,449 @@
1
+ // Deterministic answer-content requirements for every source question in the top-100 corpus.
2
+ // Clauses are ANDed; alternatives inside one `anyOf` are ORed. Product names alone never count.
3
+
4
+ const clause = (label, ...anyOf) => Object.freeze({ label, anyOf: Object.freeze(anyOf) });
5
+
6
+ export const TOP100_SEMANTIC_ASSERTIONS = Object.freeze({
7
+ 'n-01': [
8
+ clause('index', 'hnsw', 'hierarchical navigable small world'),
9
+ clause('single-file storage', 'single file', 'one file', '.rvf'),
10
+ ],
11
+ 'n-02': [
12
+ clause('explanation', 'feature attribution', 'causal chain', 'explainable recall'),
13
+ ],
14
+ 'n-03': [
15
+ clause('swarm topology', 'mesh', 'hierarchical', 'ring'),
16
+ ],
17
+ 'n-04': [
18
+ clause('automatic test generation', 'generate tests', 'test generation', 'automatically write tests'),
19
+ ],
20
+ 'n-05': [
21
+ clause('branching mechanism', 'copy-on-write', 'cow branch', 'fork a vector store'),
22
+ clause('recovery', 'roll back', 'rollback', 'discard a branch'),
23
+ ],
24
+ 'n-06': [
25
+ clause('cache role', 'vector cache', 'read cache', 'cached vector'),
26
+ clause('witness role', 'witness-anchored', 'witness chain', 'verifiable retrieval'),
27
+ ],
28
+ 'n-07': [
29
+ clause('feedback loop', 'self-aware feedback loop', 'meta-cognitive', 'self-monitoring'),
30
+ clause('behavior change', 'self-modification', 'policy adaptation', 'strategy adaptation'),
31
+ ],
32
+ 'n-08': [
33
+ clause('post-quantum cryptography', 'ml-kem', 'ml-dsa', 'post-quantum cryptography', 'quantum-resistant'),
34
+ ],
35
+ 'n-09': [
36
+ clause('autonomy', 'autonomous agents', 'self-governing agents', 'autonomy loop'),
37
+ clause('governance', 'rule-based governance', 'spending limits', 'risk thresholds'),
38
+ ],
39
+ 'n-10': [
40
+ clause('declarative programming', 'declarative framework', 'composable modules', 'llm signatures'),
41
+ clause('typescript runtime', 'typescript', 'javascript implementation'),
42
+ ],
43
+ 'n-11': [
44
+ clause('low-latency tools', 'aggressive caching', 'cache-first pattern', 'cached access', 'low-latency ai tool', 'seconds to milliseconds'),
45
+ clause('resilience', 'circuit-breaker', 'graceful degradation', 'dependable under failure'),
46
+ ],
47
+ 'n-12': [
48
+ clause('prompt compression', 'compress prompts', 'prompt compression', 'shrink prompts'),
49
+ clause('token reduction', 'token reduction', 'reduce token usage', 'lower token costs'),
50
+ ],
51
+ 'n-13': [
52
+ clause('specification phase', 'specification'),
53
+ clause('pseudocode phase', 'pseudocode'),
54
+ clause('architecture phase', 'architecture'),
55
+ clause('refinement phase', 'refinement'),
56
+ clause('completion phase', 'completion'),
57
+ ],
58
+ 'n-14': [
59
+ clause('webassembly support', 'webassembly', 'wasm'),
60
+ ],
61
+ 'n-15': [
62
+ clause('hidden solution', 'conformance firewall', 'never sees the gold fix', 'without the gold fix'),
63
+ clause('verification', 'security regression test', 'fail-to-pass', 'project-specific test'),
64
+ ],
65
+ 'n-16': [
66
+ clause('open implementation', 'open-source implementation', 'open source implementation'),
67
+ clause('cli compatibility', 'claude-code-compatible cli', 'claude code cli'),
68
+ ],
69
+ 'n-17': [
70
+ clause('visual retrieval', 'visual retrieval', 'image semantic search', 'text-to-image search'),
71
+ clause('local execution', 'on-device clip', 'client-side', 'no data upload'),
72
+ ],
73
+ 'n-18': [
74
+ clause('project scaffolding', 'create-sparc', 'project scaffolding'),
75
+ clause('agent tooling', 'roo code', 'clinerules', 'mcp wizard'),
76
+ ],
77
+ 'n-19': [
78
+ clause('hypervisor isolation', 'microhypervisor', 'hardware-grade partition', 'secure hardware partition'),
79
+ clause('tenant boundary', 'multi-tenant', 'isolated guest', 'untrusted agent workload'),
80
+ ],
81
+ 'n-20': [
82
+ clause('radio sensing', 'channel state information', 'wifi sensing', 'csi'),
83
+ clause('camera-free detection', 'camera-free', 'without a camera', 'radio alone'),
84
+ ],
85
+ 'n-21': [
86
+ clause('mutation target', 'planner', 'retry policy', 'model routing', 'structured policies'),
87
+ clause('fixed model', 'freeze the model', 'without swapping out the model', 'harness around it'),
88
+ ],
89
+ 'n-22': [
90
+ clause('harness evolution', 'evolve the harness', 'harness variants', 'darwin mode'),
91
+ clause('model remains fixed', 'model remains fixed', 'freeze the model', 'does not retrain the model', 'without swapping out the model'),
92
+ ],
93
+ 'n-23': [
94
+ clause('cross-session persistence', 'across sessions', 'survives restarts', 'persistent memory'),
95
+ clause('project memory store', '.swarm/memory.db', 'project memory', 'memory store'),
96
+ ],
97
+ 'n-24': [
98
+ clause('browser binding', 'wasm bindings', 'in-browser', 'webassembly'),
99
+ clause('vector search', 'vector search', 'nearest-neighbor', 'similarity search'),
100
+ ],
101
+ 'n-25': [
102
+ clause('anthropic provider', 'anthropic'),
103
+ clause('openrouter provider', 'openrouter'),
104
+ clause('gemini provider', 'gemini'),
105
+ ],
106
+ 'n-26': [
107
+ clause('graph memory', 'graph queries', 'causal graph', 'n-ary hyperedge', 'relationship queries'),
108
+ ],
109
+ 'n-27': [
110
+ clause('cog architecture', 'cog-as-plugin', 'one crate per capability', 'self-contained apps'),
111
+ clause('target runtime', 'rust cog', 'arm cross-compile', 'aarch64', 'armv7'),
112
+ ],
113
+ 'n-28': [
114
+ clause('public support scope', 'firmware downloads', 'installation', 'upgrade instructions', 'onboarding'),
115
+ clause('issue path', 'issue tracker', 'report issues'),
116
+ ],
117
+
118
+ 'agentdb-q1': [
119
+ clause('durable agent memory', 'persistent memory', 'survives across sessions', 'long-term agent memory'),
120
+ clause('query model', 'vector search', 'graph relationships', 'structured agent state'),
121
+ ],
122
+ 'agentdb-q2': [
123
+ clause('cognitive container', '.rvf cognitive container', 'single-file .rvf'),
124
+ clause('episodic memory', 'reflexion', 'episodic memory'),
125
+ clause('causal graph', 'causal graph', 'graph relationships'),
126
+ clause('skill library', 'skill library'),
127
+ clause('learning system', 'reasoningbank', 'self-learning bandit', 'thompson sampling'),
128
+ ],
129
+ 'agentdb-q7': [
130
+ clause('self-learning search', 'self-learning vector search', 'feedback learning', 'learning rate'),
131
+ clause('working example', 'three lines', 'create database', 'vector search'),
132
+ ],
133
+ 'ruflo-q1': [
134
+ clause('orchestration purpose', 'agent orchestration', 'coordinate swarms', 'multi-agent coordination'),
135
+ clause('developer audience', 'coding agents', 'software development', 'developers'),
136
+ ],
137
+ 'ruflo-q2': [
138
+ clause('swarm definition', 'agents working', 'coordinated agents', 'agent swarm'),
139
+ clause('hierarchical topology', 'hierarchical'),
140
+ clause('mesh topology', 'mesh'),
141
+ clause('ring topology', 'ring'),
142
+ clause('star topology', 'star'),
143
+ ],
144
+ 'ruflo-q8': [
145
+ clause('project store', '.swarm/memory.db', 'project memory'),
146
+ clause('store operation', 'memory store', 'store memory'),
147
+ clause('search operation', 'memory search', 'search memory'),
148
+ ],
149
+ 'rulake-q1': [
150
+ clause('cache layer', 'vector cache', 'working-memory layer', 'read cache'),
151
+ clause('verifiable recall', 'witness-anchored', 'provenance-verifiable', 'deterministic recall'),
152
+ ],
153
+ 'rulake-q2': [
154
+ clause('witness bundle', 'witness-anchored bundle', 'witness anchored bundle'),
155
+ clause('one-bit cache', 'rabitq', '1-bit cache', 'one-bit cache'),
156
+ clause('backend federation', 'backendadapter', 'backend adapter', 'federation'),
157
+ clause('freshness', 'freshness mode', 'fresh', 'eventual', 'frozen'),
158
+ ],
159
+ 'ruvector-q1': [
160
+ clause('vector database', 'vector database', 'similarity search', 'nearest-neighbor'),
161
+ clause('local storage', '.rvf', 'on-disk store', 'zero-server'),
162
+ ],
163
+ 'ruvector-q2': [
164
+ clause('self-learning', 'sona', 'self-learning'),
165
+ clause('binary format', 'rvf format', '.rvf'),
166
+ clause('index', 'hnsw'),
167
+ clause('quantization', 'quantization tier', 'int8', 'sq8'),
168
+ clause('graph intelligence', 'graph intelligence', 'graph relationship'),
169
+ ],
170
+ 'ruview-q1': [
171
+ clause('wifi sensing', 'wifi sensing', 'channel state information', 'csi'),
172
+ clause('human signal', 'human presence', 'pose', 'breathing', 'heart rate'),
173
+ ],
174
+ 'ruview-q2': [
175
+ clause('csi', 'channel state information', 'csi'),
176
+ clause('sensor', 'esp32'),
177
+ clause('pose estimation', 'wifi-densepose', 'pose estimation'),
178
+ clause('container', 'rvf cognitive container', 'cognitive container'),
179
+ ],
180
+
181
+ 'ho-01': [
182
+ clause('on-disk approximate search', 'hnsw', 'approximate-nearest-neighbor', 'ann search'),
183
+ clause('no database server', 'zero-server', 'no server', 'single file'),
184
+ ],
185
+ 'ho-02': [
186
+ clause('isolated experiment', 'copy-on-write', 'sandbox risky', 'branch memory'),
187
+ clause('discard or recover', 'discard', 'roll back', 'rollback'),
188
+ ],
189
+ 'ho-03': [
190
+ clause('test generation', 'generate tests', 'test generation'),
191
+ clause('coverage analysis', 'coverage gap', 'untested code'),
192
+ ],
193
+ 'ho-04': [
194
+ clause('cost-aware routing', 'cost routing', 'cheapest model', 'reduce model cost'),
195
+ clause('quality protection', 'quality bar', 'without sacrificing quality', 'escalate'),
196
+ ],
197
+ 'ho-05': [
198
+ clause('spec-to-code phases', 'specification', 'pseudocode', 'architecture', 'refinement', 'completion'),
199
+ clause('quality gates', 'quality gate', 'review gate'),
200
+ ],
201
+ 'ho-06': [
202
+ clause('structured state', 'structured agent state', 'persistent structured storage'),
203
+ clause('relationships', 'graph relationships', 'causal graph', 'relationship queries'),
204
+ ],
205
+ 'ho-07': [
206
+ clause('read cache', 'vector cache', 'read cache', 'cached reads'),
207
+ clause('repeated lookup speed', 'sub-millisecond', 'faster repeated', 'cache hit'),
208
+ ],
209
+ 'ho-08': [
210
+ clause('rust neural network', 'neural network library written in rust', 'in-rust ml', 'rust neural'),
211
+ clause('no python', 'without shipping python', 'no python'),
212
+ ],
213
+ 'ho-09': [
214
+ clause('post-quantum security', 'post-quantum', 'quantum-resistant', 'ml-kem', 'ml-dsa'),
215
+ clause('node communication', 'secure messaging', 'agent-to-agent messaging', 'peer-to-peer'),
216
+ ],
217
+ 'ho-10': [
218
+ clause('harness evolution', 'evolve the harness', 'harness variants', 'darwin mode'),
219
+ clause('fixed model', 'model remains fixed', 'freeze the model', 'without swapping out the model'),
220
+ ],
221
+ 'ho-11': [
222
+ clause('multi-agent coordination', 'coordinate swarms', 'multi-agent coordination', 'agents working in parallel'),
223
+ clause('shared work', 'share state', 'shared state', 'shared memory'),
224
+ ],
225
+ 'ho-12': [
226
+ clause('real vulnerability', 'real cve', 'real security vulnerabilities', 'publicly disclosed'),
227
+ clause('proof of fix', 'security regression test', 'fail-to-pass', 'project-specific test'),
228
+ ],
229
+
230
+ 'd-01': [
231
+ clause('binary container', '.rvf', 'binary container'),
232
+ clause('portable single file', 'single file', 'one binary file', 'copy around'),
233
+ ],
234
+ 'd-02': [
235
+ clause('causal explanation', 'causal chain', 'explainable recall', 'feature attribution'),
236
+ ],
237
+ 'd-03': [
238
+ clause('specialized fleet', 'specialized agents', 'agent roles', 'agent swarm'),
239
+ clause('shared state', 'share state', 'shared state', 'persistent context'),
240
+ ],
241
+ 'd-04': [
242
+ clause('automatic unit tests', 'generate tests', 'unit test generation', 'automatically write tests'),
243
+ clause('risk focus', 'risk-based', 'riskiest', 'risk-weighted'),
244
+ ],
245
+ 'd-05': [
246
+ clause('checkpoint', 'checkpoint', 'copy-on-write', 'cow branch'),
247
+ clause('instant recovery', 'roll back instantly', 'instantly roll back', 'instant rollback', 'discard a branch'),
248
+ ],
249
+ 'd-06': [
250
+ clause('read-through vector cache', 'read-through cache', 'vector cache', 'read cache'),
251
+ clause('latency', 'sub-millisecond', 'cached access'),
252
+ ],
253
+ 'd-07': [
254
+ clause('divergence detection', 'divergence detection', 'novelty detection'),
255
+ clause('self-modification safety', 'self-modification', 'meta-cognitive', 'safeguard'),
256
+ ],
257
+ 'd-08': [
258
+ clause('post-quantum communication', 'post-quantum', 'quantum-resistant', 'ml-kem', 'ml-dsa'),
259
+ clause('distributed routing', 'dag-based communication', 'anonymous routing', 'multi-hop routing'),
260
+ ],
261
+ 'd-09': [
262
+ clause('declarative llm programs', 'declarative framework', 'composable modules', 'llm signatures'),
263
+ clause('typescript', 'typescript', 'javascript implementation'),
264
+ clause('optimization', 'automatically optimized', 'optimizer', 'auto-tune prompts'),
265
+ ],
266
+ 'd-10': [
267
+ clause('instruction compression', 'compress system prompts', 'compress instructions', 'prompt compression'),
268
+ clause('meaning preservation', 'preserving their meaning', 'without changing behavior', 'without losing'),
269
+ ],
270
+ 'd-11': [
271
+ clause('phased method', 'specification', 'pseudocode', 'architecture', 'refinement', 'completion'),
272
+ clause('phase gates', 'quality gates', 'review gates'),
273
+ ],
274
+ 'd-12': [
275
+ clause('embedded classifier', 'small neural network', 'small trainable', 'embedded classifier'),
276
+ clause('rust runtime', 'written in rust', 'in-rust ml'),
277
+ clause('no python', 'without shipping python', 'no python'),
278
+ ],
279
+ 'd-13': [
280
+ clause('security benchmark', 'real cve', 'security vulnerabilities'),
281
+ clause('passing criterion', 'security regression test', 'fail-to-pass', 'project-specific test'),
282
+ ],
283
+ 'd-14': [
284
+ clause('cheap-first routing', 'cheap model', 'cheapest model', 'cost-aware escalation'),
285
+ clause('failure escalation', 'when the cheaper model gives up', 'demonstrable failure', 'escalate'),
286
+ ],
287
+ 'd-15': [
288
+ clause('risk ranking', 'rank untested code by risk', 'risk-based test prioritization', 'risk-weighted'),
289
+ clause('coverage gap', 'coverage gap', 'untested code'),
290
+ ],
291
+ 'd-16': [
292
+ clause('hypervisor partition', 'microhypervisor', 'hardware-grade partition', 'secure hardware partition'),
293
+ clause('tenant isolation', 'multi-tenant', 'isolated guest', 'strict isolation'),
294
+ ],
295
+ 'd-17': [
296
+ clause('prebuilt roles', 'ready-to-run specialized agents', 'coder', 'reviewer', 'architect'),
297
+ clause('spawnable fleet', 'spawn agents', 'agent swarm', '54+'),
298
+ ],
299
+ 'd-18': [
300
+ clause('evidence-backed promotion', 'replayable receipt', 'receipt-backed', 'independently benchmarked'),
301
+ clause('reversibility', 'roll back', 'rollback', 'reversible'),
302
+ ],
303
+ 'd-19': [
304
+ clause('cross-session state', 'across sessions', 'persistent memory', 'survives restarts'),
305
+ clause('decisions retained', 'project memory', 'reasoning memory', 'carry decisions'),
306
+ ],
307
+ 'd-20': [
308
+ clause('ranking adaptation', 'tunes its own ranking', 'self-learning', 'ranking weights'),
309
+ clause('proof gate', 'proven improvements', 'benchmark', 'quality gate'),
310
+ ],
311
+
312
+ 's-01': [
313
+ clause('local semantic index', 'on-device semantic search', 'local vector', 'hnsw'),
314
+ clause('offline operation', 'zero-server', 'zero server round-trips', 'no server'),
315
+ ],
316
+ 's-02': [
317
+ clause('durability', 'survives restarts', 'persistent memory', 'across sessions'),
318
+ clause('recall justification', 'explainable recall', 'feature attribution', 'causal chain'),
319
+ ],
320
+ 's-03': [
321
+ clause('generated tests', 'generate tests', 'test generation'),
322
+ clause('changed-code risk', 'risk-based', 'riskiest changed code', 'risk-weighted'),
323
+ ],
324
+ 's-04': [
325
+ clause('coordinated agents', 'coordinate swarms', 'multi-agent coordination', 'coordinated roles'),
326
+ clause('shared state', 'shared state', 'share state', 'persistent context'),
327
+ ],
328
+ 's-05': [
329
+ clause('isolated ingest', 'sandbox risky ingest', 'copy-on-write', 'branch memory'),
330
+ clause('instant rollback', 'instant rollback', 'roll back', 'discard a branch'),
331
+ ],
332
+ 's-06': [
333
+ clause('cached vector reads', 'vector cache', 'read cache', 'cached reads'),
334
+ clause('cryptographic verification', 'witness', 'provenance-verifiable', 'cryptographically verifiable'),
335
+ ],
336
+ 's-07': [
337
+ clause('quantum resistance', 'post-quantum', 'quantum-resistant', 'ml-kem', 'ml-dsa'),
338
+ clause('mesh communications', 'secure mesh', 'secure messaging', 'agent-to-agent messaging'),
339
+ ],
340
+ 's-08': [
341
+ clause('instruction compression', 'compress instructions', 'compress system prompts', 'prompt compression'),
342
+ clause('behavior preserved', 'without changing behavior', 'preserving their meaning', 'without losing'),
343
+ ],
344
+ 's-09': [
345
+ clause('requirements-to-completion', 'specification', 'requirements', 'completion'),
346
+ clause('hard gates', 'quality gates', 'review gates'),
347
+ ],
348
+ 's-10': [
349
+ clause('real vulnerability patches', 'real cve', 'real security vulnerabilities', 'patching agent'),
350
+ clause('objective closure', 'security regression test', 'resolve-per-dollar', 'fail-to-pass'),
351
+ ],
352
+ 's-11': [
353
+ clause('small classifier', 'small trainable classifier', 'small neural network', 'embedded classifier'),
354
+ clause('low-memory rust', 'written in rust', 'low-memory embedded', 'in-rust ml'),
355
+ clause('no python', 'without shipping python', 'no python'),
356
+ ],
357
+ 's-12': [
358
+ clause('policy evolution', 'planner', 'retry policies', 'model routing'),
359
+ clause('replayable evidence', 'replayable receipts', 'receipt-backed', 'auditor could replay'),
360
+ ],
361
+ 's-13': [
362
+ clause('cheap first', 'cheap model', 'cheapest model', 'cost-aware escalation'),
363
+ clause('measured escalation', 'demonstrable failure', 'demonstrably fails', 'quality bar'),
364
+ ],
365
+ 's-14': [
366
+ clause('composable programs', 'composable modules', 'declarative framework', 'llm signatures'),
367
+ clause('optimizers', 'optimizer', 'automatically optimized', 'auto-tune prompts'),
368
+ clause('typescript', 'typescript', 'javascript implementation'),
369
+ ],
370
+ 's-15': [
371
+ clause('ready roles', 'ready-to-run specialized agents', 'coder', 'reviewer', 'architect'),
372
+ clause('mesh orchestration', 'mesh', 'agent swarm', 'swarm coordination'),
373
+ clause('provider cost', 'multiple model providers', 'cost tracking', 'openrouter', 'gemini'),
374
+ ],
375
+ 's-16': [
376
+ clause('bare-metal isolation', 'microhypervisor', 'hardware-grade partition', 'secure hardware partition'),
377
+ clause('tenant boundary', 'multi-tenant', 'strict isolation', 'untrusted workload'),
378
+ ],
379
+ 's-17': [
380
+ clause('living decisions', 'living plans', 'architecture decision record', 'adr tooling'),
381
+ clause('implementation drift', 'implementation drifts', 'drift detection', 'match implementation', 'code does another', 'checked against reality'),
382
+ ],
383
+ 's-18': [
384
+ clause('copy-on-write tenants', 'copy-on-write', 'cow branch', 'fork a vector store'),
385
+ clause('tiny branch cost', '162 bytes', 'constant time and size', 'tiny storage overhead'),
386
+ ],
387
+ 's-19': [
388
+ clause('independent benchmark', 'independently benchmarked', 'fixed benchmark', 'frozen benchmark', 'benchmark immutability', 'parent and child each scored', 'quality gate', 'benchmark the parent versus the child'),
389
+ clause('signed evidence', 'signed', 'witness', 'receipt-backed'),
390
+ clause('reversible change', 'reversible', 'roll back', 'rollback'),
391
+ ],
392
+ 's-20': [
393
+ clause('multiple providers', 'multiple model providers', 'anthropic', 'openrouter', 'gemini'),
394
+ clause('per-task budget', 'max cost per task', 'per-task cost budget', 'cost ceiling'),
395
+ ],
396
+
397
+ 'agentdb-q9': [
398
+ clause('database class', 'rvf database'),
399
+ clause('node backend', 'nodebackend', 'node backend', 'native (n-api)', 'native n-api'),
400
+ clause('wasm backend', 'wasmbackend', 'wasm backend'),
401
+ clause('runtime resolution', "resolvebackend('auto')", 'resolvebackend("auto")', 'backend resolved at runtime', 'auto-detects native or wasm'),
402
+ ],
403
+ 'agentdb-q12': [
404
+ clause('speed claim', '150x faster', '150× faster'),
405
+ clause('quality claim', '36% search quality', '+36%', 'feedback learning'),
406
+ clause('benchmark method', 'hnsw vs brute force', 'backend comparison', 'benchmark harness'),
407
+ ],
408
+ 'ruflo-q10': [
409
+ clause('mcp definition', 'mcp tool', 'tool definition', 'tools/list'),
410
+ clause('registration code', 'register tool', 'registertool', 'tools/call', 'tool registry'),
411
+ ],
412
+ 'ruflo-q12': [
413
+ clause('package identity', '@claude-flow/neural'),
414
+ clause('neural algorithms', 'actor-critic', 'a2c', 'decision transformer', 'q-learning', 'ppo'),
415
+ ],
416
+ 'rulake-q9': [
417
+ clause('substrate decision', 'rvdna v2', 'rvdna substrate', 'rvdna-backend'),
418
+ clause('accepted status', 'status: accepted', 'accepted'),
419
+ clause('implementation scope', 'scaffolded', 't0 hot-tier', 'hot-tier only', 'v0.0.1'),
420
+ ],
421
+ 'ruvector-q10': [
422
+ clause('canonical format', 'canonical binary format', 'rvf is canonical'),
423
+ clause('first superseded decision', 'adr-001'),
424
+ clause('second superseded decision', 'adr-018'),
425
+ ],
426
+ 'ruvector-q12': [
427
+ clause('npm package', 'npm ruvector', 'package ruvector', 'npm install ruvector', 'ruvector npm package'),
428
+ clause('core crate', 'ruvector-core'),
429
+ clause('workspace size', '100+ crates', 'more than 100 crates', 'over 100 crates', '~110 directories', 'about 110 directories'),
430
+ ],
431
+ 'ruview-q9': [
432
+ clause('proposal status', 'status: proposed', 'proposal stage', 'proposed'),
433
+ clause('csi persistence', 'persist ephemeral csi', 'csi data', 'csi features'),
434
+ clause('cognitive container', 'rvf cognitive container', 'cognitive containers'),
435
+ ],
436
+ });
437
+
438
+ export function semanticAssertionsFor(sourceId) {
439
+ return TOP100_SEMANTIC_ASSERTIONS[sourceId] ?? null;
440
+ }
441
+
442
+ export function semanticAssertionCompleteness(sourceIds) {
443
+ const expected = [...new Set(sourceIds)];
444
+ const expectedSet = new Set(expected);
445
+ const actual = Object.keys(TOP100_SEMANTIC_ASSERTIONS);
446
+ const missing = expected.filter((sourceId) => !TOP100_SEMANTIC_ASSERTIONS[sourceId]);
447
+ const unexpected = actual.filter((sourceId) => !expectedSet.has(sourceId));
448
+ return { complete: missing.length === 0 && unexpected.length === 0, missing, unexpected };
449
+ }
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ // Thin repo-side wrapper: the REAL Stable Spine engine ships inside the plugin payload
3
+ // (plugin/scripts/update-apply.mjs) so every install path carries it. This wrapper exists for
4
+ // maintainers working in the repo and for the checkpoint/CI entry point.
5
+ import { spawnSync } from 'node:child_process';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ const ENGINE = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'plugin', 'scripts', 'update-apply.mjs');
9
+ process.exit(spawnSync(process.execPath, [ENGINE, ...process.argv.slice(2)], { stdio: 'inherit' }).status ?? 1);
@@ -273,6 +273,18 @@ export function noticeFor(version) {
273
273
  ``,
274
274
  ` · Finer-grained control over which parts run, and where they run.`,
275
275
  ``,
276
+ ` · Source-grounded answers now run through RuVector RVF knowledge stores and cite the`,
277
+ ` underlying source instead of relying on model memory.`,
278
+ ``,
279
+ ` · Claude Code and Codex are first-class hosts, kept on one Stable Spine so updates,`,
280
+ ` hooks, skills and the search runtime converge on the same active generation.`,
281
+ ``,
282
+ ` · The Console makes the installed stack, AgentDB learning, controls and reversible`,
283
+ ` actions visible in one place.`,
284
+ ``,
285
+ ` · Agentic-QE, harness scoring and cost-aware routing are exposed as explicit workflows`,
286
+ ` rather than hidden implementation details.`,
287
+ ``,
276
288
  `Where it runs, and who decides:`,
277
289
  ``,
278
290
  ` Normally this happens on a per-user basis, which lets learning, intelligence, access and`,
@@ -290,6 +302,8 @@ export function noticeFor(version) {
290
302
  ` Prefer to look first? npx ruvnet-brain --what-changed lists every piece currently on this`,
291
303
  ` machine and where each one lives. It reads; it changes nothing.`,
292
304
  ``,
305
+ ` Full ${release} highlights: npx ruvnet-brain --whats-new`,
306
+ ``,
293
307
  `You will see this at most once per feature release. Dismiss it and this release goes quiet.`,
294
308
  `Dismiss twice and it stops asking altogether — two declines is an answer, and we will take it.`,
295
309
  ``,
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ // scripts/verify-bundle.mjs — verify a downloaded bundle against the shipped Ed25519 public key.
3
+ //
4
+ // The installer calls this BEFORE extracting the ~512 MB zip into the user's Claude Code config.
5
+ // Trust root = keys/ruvnet-brain-signing.pub.pem, which ships INSIDE the npm package — so the key
6
+ // the installer trusts travels with the installer, not with the (possibly-tampered) download.
7
+ //
8
+ // Dependency-free (node:crypto). Exit 0 = verified; non-zero = fail-closed (caller must NOT extract).
9
+ //
10
+ // Usage (also importable): node scripts/verify-bundle.mjs <bundle.zip> <bundle.zip.sig>
11
+ // Returns/echoes { ok, reason }. If the .sig is absent, ok:false with a clear reason (fail-closed).
12
+
13
+ import crypto from 'node:crypto';
14
+ import fs from 'node:fs';
15
+ import path from 'node:path';
16
+ import { fileURLToPath } from 'node:url';
17
+
18
+ const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
19
+ const PUB_PATH = process.env.RUVNET_SIGNING_PUB || path.join(ROOT, 'keys', 'ruvnet-brain-signing.pub.pem');
20
+
21
+ const sha256 = (buf) => crypto.createHash('sha256').update(buf).digest('hex');
22
+
23
+ /**
24
+ * `pubPath` defaults to the repo's committed trust root and should stay that way in production.
25
+ * It is overridable ONLY so the test can bring an ephemeral keypair: signing requires the private
26
+ * key, which CI must never hold, and a test that can't run in CI is a test that stops protecting
27
+ * anything. (CI was red for days on exactly this: `sign-bundle.mjs` → "no signing key".)
28
+ */
29
+ export function verifyBundle(bundlePath, sigPath = `${bundlePath}.sig`, pubPath = PUB_PATH) {
30
+ try {
31
+ if (!fs.existsSync(pubPath)) return { ok: false, reason: `no public key at ${path.relative(ROOT, pubPath)}` };
32
+ if (!fs.existsSync(bundlePath)) return { ok: false, reason: `bundle not found: ${bundlePath}` };
33
+ if (!fs.existsSync(sigPath)) return { ok: false, reason: `signature missing: ${path.basename(sigPath)} (fail-closed — refusing to trust an unsigned bundle)` };
34
+ const digest = sha256(fs.readFileSync(bundlePath));
35
+ const sig = fs.readFileSync(sigPath);
36
+ const pub = crypto.createPublicKey(fs.readFileSync(pubPath, 'utf8'));
37
+ const ok = crypto.verify(null, Buffer.from(digest, 'hex'), pub, sig);
38
+ return ok ? { ok: true, reason: `signature valid (sha256 ${digest.slice(0, 12)}…)` } : { ok: false, reason: 'signature does NOT match — bundle may be tampered' };
39
+ } catch (e) {
40
+ return { ok: false, reason: `verify error: ${e.message}` };
41
+ }
42
+ }
43
+
44
+ // CLI
45
+ if (import.meta.url === `file://${process.argv[1]}`) {
46
+ const [bundle, sig] = process.argv.slice(2);
47
+ if (!bundle) { console.error('Usage: node scripts/verify-bundle.mjs <bundle.zip> [<bundle.zip.sig>]'); process.exit(2); }
48
+ const r = verifyBundle(bundle, sig);
49
+ console.log(`${r.ok ? '✓' : '✗'} ${r.reason}`);
50
+ process.exit(r.ok ? 0 : 1);
51
+ }