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.
Files changed (40) hide show
  1. package/README.md +1 -1
  2. package/bin/install.mjs +47 -92
  3. package/bin/nightly-refresh.mjs +20 -34
  4. package/kb/download-retry.mjs +97 -0
  5. package/kb/forge-update.mjs +12 -10
  6. package/kb/verify-citation.mjs +10 -13
  7. package/package.json +2 -1
  8. package/plugin/.claude-plugin/plugin.json +1 -1
  9. package/plugin/.codex-plugin/plugin.json +1 -1
  10. package/plugin/scripts/automatic-update.mjs +125 -0
  11. package/plugin/scripts/completion-claim-evidence.mjs +9 -4
  12. package/plugin/scripts/continuation-gate.mjs +34 -10
  13. package/plugin/scripts/continuation-objective.mjs +45 -10
  14. package/plugin/scripts/continuity-journal.mjs +11 -11
  15. package/plugin/scripts/ground-ruvnet.sh +3 -0
  16. package/plugin/scripts/grounding-code-projection.mjs +6 -1
  17. package/plugin/scripts/grounding-turn-evidence.mjs +2 -2
  18. package/plugin/scripts/grounding-turn-gate.mjs +8 -14
  19. package/plugin/scripts/grounding-turn-mark.mjs +106 -20
  20. package/plugin/scripts/hijack-ruvnet.sh +4 -4
  21. package/plugin/scripts/hook-input.mjs +1 -1
  22. package/plugin/scripts/host-update.mjs +16 -15
  23. package/plugin/scripts/lesson-presentation.mjs +2 -1
  24. package/plugin/scripts/nightly-scheduler.mjs +34 -7
  25. package/plugin/scripts/project-progression-hook.mjs +22 -10
  26. package/plugin/scripts/project-progression-producer.mjs +11 -1
  27. package/plugin/scripts/project-progression-store.mjs +3 -0
  28. package/plugin/scripts/project-transition-hook.mjs +7 -1
  29. package/plugin/scripts/ruvnet-gate1-pattern.mjs +33 -0
  30. package/plugin/scripts/session-snapshot-hook.mjs +4 -3
  31. package/plugin/scripts/session-start-core.mjs +3 -1
  32. package/plugin/scripts/turn-capture-privacy.mjs +202 -0
  33. package/plugin/scripts/turn-outcome-capture.mjs +28 -13
  34. package/plugin/scripts/user-settings.mjs +23 -1
  35. package/scripts/brain-grade-groundtruth.mjs +1 -0
  36. package/scripts/brain-score.mjs +11 -11
  37. package/scripts/issue-watch.mjs +21 -10
  38. package/scripts/model-weekly-cycle.mjs +45 -9
  39. package/scripts/record-lesson.mjs +13 -7
  40. 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 { resolveRuflo, RUFLO_MISSING } from '../plugin/scripts/ruflo-bin.mjs';
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
- execFileSync(RUFLO, args, { cwd: dir, encoding: 'utf8', timeout: 60000,
70
- shell: process.platform === 'win32', env: { ...process.env, RUFLO_DAEMON_AUTOSTART: '0' } });
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).includes(value);
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 capture status",
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
  ]