ruvnet-brain 4.5.9 → 4.5.10
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 +1 -1
- package/bin/install.mjs +47 -92
- package/bin/nightly-refresh.mjs +20 -34
- package/kb/download-retry.mjs +97 -0
- package/kb/forge-update.mjs +12 -10
- package/kb/verify-citation.mjs +10 -13
- package/package.json +2 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/scripts/automatic-update.mjs +125 -0
- package/plugin/scripts/completion-claim-evidence.mjs +9 -4
- package/plugin/scripts/continuation-gate.mjs +34 -10
- package/plugin/scripts/continuation-objective.mjs +45 -10
- package/plugin/scripts/continuity-journal.mjs +11 -11
- package/plugin/scripts/ground-ruvnet.sh +3 -0
- package/plugin/scripts/grounding-code-projection.mjs +6 -1
- package/plugin/scripts/grounding-turn-evidence.mjs +2 -2
- package/plugin/scripts/grounding-turn-gate.mjs +8 -14
- package/plugin/scripts/grounding-turn-mark.mjs +106 -20
- package/plugin/scripts/hijack-ruvnet.sh +4 -4
- package/plugin/scripts/hook-input.mjs +1 -1
- package/plugin/scripts/host-update.mjs +16 -15
- package/plugin/scripts/lesson-presentation.mjs +2 -1
- package/plugin/scripts/nightly-scheduler.mjs +34 -7
- package/plugin/scripts/project-progression-hook.mjs +22 -10
- package/plugin/scripts/project-progression-producer.mjs +11 -1
- package/plugin/scripts/project-progression-store.mjs +3 -0
- package/plugin/scripts/project-transition-hook.mjs +7 -1
- package/plugin/scripts/ruvnet-gate1-pattern.mjs +33 -0
- package/plugin/scripts/session-snapshot-hook.mjs +4 -3
- package/plugin/scripts/session-start-core.mjs +3 -1
- package/plugin/scripts/turn-capture-privacy.mjs +202 -0
- package/plugin/scripts/turn-outcome-capture.mjs +28 -13
- package/plugin/scripts/user-settings.mjs +23 -1
- package/scripts/brain-grade-groundtruth.mjs +1 -0
- package/scripts/brain-score.mjs +11 -11
- package/scripts/issue-watch.mjs +21 -10
- package/scripts/model-weekly-cycle.mjs +45 -9
- package/scripts/record-lesson.mjs +13 -7
- package/scripts/release-qualification-contract.mjs +31 -1
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
import { execFileSync } from 'node:child_process';
|
|
20
20
|
import fs from 'node:fs';
|
|
21
21
|
import path from 'node:path';
|
|
22
|
-
import {
|
|
22
|
+
import { randomUUID } from 'node:crypto';
|
|
23
|
+
import { resolveRuflo, rufloInvocation, RUFLO_MISSING } from '../plugin/scripts/ruflo-bin.mjs';
|
|
23
24
|
|
|
24
25
|
const arg = (name, def = '') => {
|
|
25
26
|
const i = process.argv.indexOf(`--${name}`);
|
|
@@ -60,21 +61,26 @@ const value = [
|
|
|
60
61
|
worked ? `WORKED: ${worked}` : null,
|
|
61
62
|
critique ? `CRITIQUE: ${critique}` : null,
|
|
62
63
|
`OUTCOME: ${outcome}`,
|
|
64
|
+
`RECORDING: ${randomUUID()}`, // binds the read-back to THIS canonical lesson write
|
|
63
65
|
].filter(Boolean).join(' ');
|
|
64
66
|
|
|
65
67
|
// Every `ruflo` invocation auto-starts a project background daemon unless this is set (verified
|
|
66
68
|
// live: ~/.npm-global/lib/node_modules/ruflo/node_modules/@claude-flow/cli/dist/src/services/
|
|
67
69
|
// daemon-autostart.js:85) — recording a lesson has no business leaving one running.
|
|
68
|
-
const ruflo = (args) =>
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
const ruflo = (args) => {
|
|
71
|
+
const invocation = rufloInvocation(RUFLO, args);
|
|
72
|
+
return execFileSync(invocation.executable, invocation.args, {
|
|
73
|
+
cwd: dir, encoding: 'utf8', timeout: 60000, shell: false,
|
|
74
|
+
env: { ...process.env, RUFLO_DAEMON_AUTOSTART: '0' },
|
|
75
|
+
});
|
|
76
|
+
};
|
|
71
77
|
|
|
72
78
|
console.log(`\nRecording lesson into ${path.basename(dir)}/.swarm/memory.db (namespace: ${ns})`);
|
|
73
79
|
console.log(` key: ${key}`);
|
|
74
80
|
|
|
75
81
|
// 1a. STORE (native, signal namespace) — L1 content + L2 embedding
|
|
76
82
|
try {
|
|
77
|
-
ruflo(['memory', 'store', '-k', key, '-n', ns, '--value', value]);
|
|
83
|
+
ruflo(['memory', 'store', '-k', key, '-n', ns, '--value', value, '--path', db]);
|
|
78
84
|
} catch (e) {
|
|
79
85
|
console.error(' store FAILED:', String(e.stdout || e.message).split('\n')[0]);
|
|
80
86
|
process.exit(1);
|
|
@@ -91,7 +97,7 @@ try {
|
|
|
91
97
|
let stored = false;
|
|
92
98
|
try {
|
|
93
99
|
const back = ruflo(['memory', 'retrieve', '-k', key, '-n', ns, '--value-only', '--path', db]);
|
|
94
|
-
stored = String(back)
|
|
100
|
+
stored = String(back) === value;
|
|
95
101
|
} catch (e) {
|
|
96
102
|
console.error(' round-trip FAILED:', String(e.stdout || e.message).split('\n')[0]);
|
|
97
103
|
}
|
|
@@ -133,6 +139,6 @@ console.log(
|
|
|
133
139
|
// DERIVED, not asserted (F15): the closing line reports exactly what was verified, never more. The
|
|
134
140
|
// old line claimed "captured, refined, and recall-verified" even when distill failed and recall
|
|
135
141
|
// didn't return the key — asserted prose over an honest exit code.
|
|
136
|
-
const parts = ['captured', distillOk ? 'refined' : 'NOT refined (distill failed)', recalled ? 'recall-verified' : 'recall NOT verified'];
|
|
142
|
+
const parts = [stored ? 'captured' : 'capture NOT verified', distillOk ? 'refined' : 'NOT refined (distill failed)', recalled ? 'recall-verified' : 'recall NOT verified'];
|
|
137
143
|
console.log(`\nDone. Lesson is ${parts.join(', ')}.\n`);
|
|
138
144
|
process.exit(stored ? 0 : 1);
|
|
@@ -1,6 +1,34 @@
|
|
|
1
1
|
// Reviewed stabilization release boundaries. Legacy tests remain developer diagnostics.
|
|
2
2
|
export const RELEASE_REQUIREMENTS = Object.freeze({
|
|
3
3
|
"source": [
|
|
4
|
+
{
|
|
5
|
+
"id": "installer-release-argument-safety",
|
|
6
|
+
"reason": "Incomplete named releases refuse before network or settings writes; valid named releases and installer help retain their contracts",
|
|
7
|
+
"files": ["tests/unit/install-release-fallback.test.mjs"]
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "honest-currency-lesson-and-metrics-evidence",
|
|
11
|
+
"reason": "Foreign KB roots remain isolated; panel currency derives from measured completion rather than checkout time; exact lesson readback binds this shell-free write; public metrics never fabricate performance or a competing product score",
|
|
12
|
+
"files": ["tests/unit/forge-currency-selected-root.test.mjs", "tests/unit/brain-score-producer.test.mjs", "tests/unit/brain-grade-groundtruth-timestamp.test.mjs", "tests/unit/record-lesson.test.mjs", "tests/unit/lesson-presentation-budget.test.mjs", "tests/unit/metrics-truth.test.mjs", "tests/unit/issue-watch-retry.test.mjs"]
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "automatic-update-source-and-transport",
|
|
16
|
+
"reason": "Captured owner policy never falls back on read failures; installed-only automation avoids npx; transient GET and body failures retry without weakening trust; POSIX executable aliases retain interpreter identity",
|
|
17
|
+
"files": ["tests/unit/automatic-update.test.mjs", "tests/unit/download-retry.test.mjs"],
|
|
18
|
+
"platformFiles": {
|
|
19
|
+
"linux": ["tests/unit/automatic-update-node-alias.test.mjs"],
|
|
20
|
+
"macos": ["tests/unit/automatic-update-node-alias.test.mjs"]
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "customer-scope-and-session-ownership",
|
|
25
|
+
"reason": "Captured assistant commitments retain their actual session owner and honest noncompleted states; scoped grounding retains strict conservative evidence under contention; legacy guidance never suppresses a tool call",
|
|
26
|
+
"files": ["tests/unit/continuation-commitment-ownership.test.mjs"],
|
|
27
|
+
"platformFiles": {
|
|
28
|
+
"linux": ["tests/unit/grounding-scope.test.mjs", "tests/unit/hijack-no-defer.test.mjs"],
|
|
29
|
+
"macos": ["tests/unit/grounding-scope.test.mjs", "tests/unit/hijack-no-defer.test.mjs"]
|
|
30
|
+
}
|
|
31
|
+
},
|
|
4
32
|
{
|
|
5
33
|
"id": "bounded-advocacy-and-write-grounding",
|
|
6
34
|
"reason": "Explicit document meaning requests retain corroboration; literal searches stay silent; POSIX complete-write exemptions preserve executable and managed-store grounding",
|
|
@@ -145,9 +173,11 @@ export const RELEASE_REQUIREMENTS = Object.freeze({
|
|
|
145
173
|
},
|
|
146
174
|
{
|
|
147
175
|
"id": "canonical-memory-privacy",
|
|
148
|
-
"reason": "Canonical project isolation, persisted consent and truthful
|
|
176
|
+
"reason": "Canonical project isolation, persisted consent, excluded-resource privacy before recording, immutable delivery refusal and truthful terminal failure status",
|
|
149
177
|
"files": [
|
|
150
178
|
"tests/unit/turn-outcome-capture.test.mjs",
|
|
179
|
+
"tests/unit/turn-capture-content-privacy.test.mjs",
|
|
180
|
+
"tests/integration/project-progression-hook.test.mjs",
|
|
151
181
|
"tests/unit/turn-journal-platform.test.mjs",
|
|
152
182
|
"tests/unit/project-store-resolver.test.mjs"
|
|
153
183
|
]
|