ruvnet-brain 4.5.2 → 4.5.4
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 +2 -2
- package/bin/install.mjs +9 -4
- package/kb/lifecycle-evidence-retention.mjs +56 -2
- package/kb/verify-citation.mjs +48 -27
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/hooks/codex-hooks.json +40 -3
- package/plugin/hooks/hook-contracts.json +218 -19
- package/plugin/hooks/hooks.json +51 -2
- package/plugin/scripts/agentdb-recall.mjs +297 -0
- package/plugin/scripts/continuity-hook-policy.mjs +9 -0
- package/plugin/scripts/continuity-journal.mjs +51 -52
- package/plugin/scripts/ground-ruvnet.sh +17 -3
- package/plugin/scripts/hook-shim.mjs +4 -30
- package/plugin/scripts/project-capture-queue.mjs +333 -0
- package/plugin/scripts/project-progression-contract.mjs +1 -1
- package/plugin/scripts/project-progression-hook.mjs +3 -3
- package/plugin/scripts/project-progression-outbox.mjs +19 -4
- package/plugin/scripts/project-progression-producer.mjs +53 -28
- package/plugin/scripts/project-progression-session-start.mjs +44 -4
- package/plugin/scripts/project-progression-store.mjs +14 -0
- package/plugin/scripts/project-store-resolver.mjs +16 -7
- package/plugin/scripts/project-transition-hook.mjs +204 -0
- package/plugin/scripts/session-snapshot-hook.mjs +46 -274
- package/plugin/scripts/session-start-budget.mjs +2 -2
- package/plugin/scripts/session-start-core.mjs +5 -0
- package/plugin/scripts/turn-outcome-capture.mjs +246 -70
- package/plugin/scripts/turn-transport-journal.mjs +106 -0
- package/scripts/learning-replay-cli.mjs +15 -0
- package/scripts/learning-replay.mjs +1 -1
- package/scripts/nightly-wrapper.sh +5 -5
- package/scripts/release-qualification-contract.mjs +87 -0
- package/scripts/release-qualification.mjs +10 -1
- package/scripts/wired-check.mjs +1 -0
|
@@ -62,6 +62,62 @@ export const RELEASE_REQUIREMENTS = Object.freeze({
|
|
|
62
62
|
"files": [
|
|
63
63
|
"tests/unit/ux-render-best-of-n.test.mjs"
|
|
64
64
|
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "canonical-memory-privacy",
|
|
68
|
+
"reason": "Canonical project isolation, persisted consent and truthful capture status",
|
|
69
|
+
"files": [
|
|
70
|
+
"tests/unit/turn-outcome-capture.test.mjs",
|
|
71
|
+
"tests/unit/turn-journal-platform.test.mjs",
|
|
72
|
+
"tests/unit/project-store-resolver.test.mjs"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "lossless-lifecycle-retention",
|
|
77
|
+
"reason": "Evidence compaction preserves tokens, private state and atomic transaction recovery",
|
|
78
|
+
"files": [
|
|
79
|
+
"tests/unit/lifecycle-evidence-retention.test.mjs",
|
|
80
|
+
"tests/unit/update-storage-transaction.test.mjs"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "causal-learning-proof",
|
|
85
|
+
"reason": "Recorded learning evidence rejects forged, absent and mismatched causal transcripts",
|
|
86
|
+
"files": [
|
|
87
|
+
"tests/unit/learning-replay-proof.test.mjs"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "qualification-topology",
|
|
92
|
+
"reason": "Release promotion consumes qualified exact-source receipts and preserves required contexts",
|
|
93
|
+
"files": [
|
|
94
|
+
"tests/unit/qualify-once-workflow.test.mjs"
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "managed-memory-test-safety",
|
|
99
|
+
"reason": "Only managed project memory is accessed and tests cannot target owner stores",
|
|
100
|
+
"files": [
|
|
101
|
+
"tests/unit/no-real-store-path-in-tests.test.mjs",
|
|
102
|
+
"tests/unit/managed-memory-no-raw-sql.test.mjs"
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "citation-producer-boundaries",
|
|
107
|
+
"reason": "Actual CLI, card and MCP outputs reject document-injected citation headers; packed verifier and source mutants bind the changed boundary",
|
|
108
|
+
"files": [
|
|
109
|
+
"tests/unit/verify-citation.test.mjs",
|
|
110
|
+
"tests/unit/citation-producers.test.mjs",
|
|
111
|
+
"tests/mutation/citation-binding-mutation.test.mjs"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "pending-memory-durability",
|
|
116
|
+
"reason": "Complete outbox tails replay and accepted pending journal events survive capacity pressure without silent deletion",
|
|
117
|
+
"files": [
|
|
118
|
+
"tests/unit/project-progression-outbox.test.mjs",
|
|
119
|
+
"tests/unit/project-progression-durability.test.mjs"
|
|
120
|
+
]
|
|
65
121
|
}
|
|
66
122
|
],
|
|
67
123
|
"integration": [
|
|
@@ -92,6 +148,37 @@ export const RELEASE_REQUIREMENTS = Object.freeze({
|
|
|
92
148
|
"files": [
|
|
93
149
|
"tests/integration/uninstall-footprint.test.mjs"
|
|
94
150
|
]
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"id": "canonical-memory-native-boundary",
|
|
154
|
+
"reason": "POSIX registered recall and capture use canonical project stores; global Ruflo prerequisites and real-process privacy/readback probes fail closed",
|
|
155
|
+
"files": [
|
|
156
|
+
"tests/unit/agentdb-recall.test.mjs",
|
|
157
|
+
"tests/unit/session-start-core-parity.test.mjs",
|
|
158
|
+
"tests/unit/learning-replay.test.mjs",
|
|
159
|
+
"tests/integration/continuity-journal.test.mjs",
|
|
160
|
+
"tests/integration/changed-memory-process-probes.test.mjs",
|
|
161
|
+
"tests/unit/managed-memory-boundary.test.mjs"
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "automatic-memory-transition-durability",
|
|
166
|
+
"reason": "Reviewed POSIX automatic boundary capture, complete history, consent suspension, first-start recovery and data-only turn replay; real global Ruflo and filesystem prerequisites are required",
|
|
167
|
+
"files": [
|
|
168
|
+
"tests/unit/project-transition-hook.test.mjs",
|
|
169
|
+
"tests/unit/turn-transport-security.test.mjs",
|
|
170
|
+
"tests/unit/turn-durable-transport.test.mjs",
|
|
171
|
+
"tests/integration/automatic-progression-continuation.test.mjs",
|
|
172
|
+
"tests/integration/capture-consent-boundary.test.mjs",
|
|
173
|
+
"tests/integration/session-start-turn-replay.test.mjs"
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "pending-continuity-capacity",
|
|
178
|
+
"reason": "POSIX non-root permission refusal, capacity-pressure reporting and recovery preserve all accepted pending continuity events",
|
|
179
|
+
"files": [
|
|
180
|
+
"tests/unit/continuity-journal-bounds.test.mjs"
|
|
181
|
+
]
|
|
95
182
|
}
|
|
96
183
|
]
|
|
97
184
|
});
|
|
@@ -80,7 +80,7 @@ export function runQualification({ suite = 'source', platform = PLATFORM, report
|
|
|
80
80
|
const execute = (name, args) => {
|
|
81
81
|
const run = spawnSync(process.execPath, ['scripts/ci/step-watchdog.mjs', '--name', name,
|
|
82
82
|
'--timeout-ms', '900000', '--receipt-dir', temp, '--', process.execPath, ...args],
|
|
83
|
-
{ cwd: root, env: { ...process.env, ...(suite === 'integration' ? { RUVNET_REQUIRE_CODEX_DISCOVERY: '1' } : {}) },
|
|
83
|
+
{ cwd: root, env: { ...process.env, ...(suite === 'integration' ? { RUVNET_REQUIRE_CODEX_DISCOVERY: '1', RUVNET_REQUIRE_LEARNING_REPLAY: '1' } : {}) },
|
|
84
84
|
stdio: 'inherit' });
|
|
85
85
|
const ok = !run.error && run.status === 0;
|
|
86
86
|
results.push({ name, status: ok ? 'PASS' : 'FAIL', exitCode: run.status });
|
|
@@ -89,6 +89,15 @@ export function runQualification({ suite = 'source', platform = PLATFORM, report
|
|
|
89
89
|
let failure = null;
|
|
90
90
|
try {
|
|
91
91
|
if (suite === 'source') {
|
|
92
|
+
// Fail early when the current filesystem cannot support required adversarial link fixtures.
|
|
93
|
+
execute('release-filesystem-prerequisite', ['--input-type=module', '-e',
|
|
94
|
+
`import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path';
|
|
95
|
+
const root=fs.mkdtempSync(path.join(os.tmpdir(),'qualification-link-'));
|
|
96
|
+
try { const file=path.join(root,'target'); const link=path.join(root,'link');
|
|
97
|
+
fs.writeFileSync(file,'required link fixture'); fs.symlinkSync(file,link,'file');
|
|
98
|
+
if(!fs.lstatSync(link).isSymbolicLink() || fs.readFileSync(link,'utf8')!=='required link fixture')
|
|
99
|
+
throw new Error('required file-symlink fixture is unavailable');
|
|
100
|
+
} finally { fs.rmSync(root,{recursive:true,force:true}); }`]);
|
|
92
101
|
execute('release-version', ['scripts/sync-version.mjs', '--check']);
|
|
93
102
|
execute('release-source-identity', ['scripts/convergence-manifest.mjs']);
|
|
94
103
|
execute('automatic-hook-retirement', ['scripts/hook-retirement-check.mjs']);
|
package/scripts/wired-check.mjs
CHANGED
|
@@ -70,6 +70,7 @@ const argv = process.argv.slice(2);
|
|
|
70
70
|
* every entry on every run, below, so they cannot rot unseen.
|
|
71
71
|
*/
|
|
72
72
|
const STANDALONE = [
|
|
73
|
+
['full-suite-gate', 'explicit historical developer diagnostic; reviewed requirement-bound qualification owns promotion, so no automatic release caller'],
|
|
73
74
|
['spike-run', 'ADR-086 Step 14 oracle feasibility-spike driver, run by hand against disposable snapshots outside the checkout. '
|
|
74
75
|
+ 'It is deliberately NOT imported by the pipeline: Step 14 only proves or disproves that a trustworthy unattended label '
|
|
75
76
|
+ 'producer exists, and Step 15 owns any prepareCorpusCandidate wiring. The three modules it drives (source-units, '
|