ruvnet-brain 4.5.12 → 4.5.13
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/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/scripts/model-managed-workflow-service.mjs +4 -1
- package/scripts/release-qualification-contract.mjs +1 -0
- package/scripts/release-transaction-provider.mjs +10 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Created: 2026-06-29 22:36:38 EDT
|
|
|
7
7
|
|
|
8
8
|
# 🧠 RuvNet Brain
|
|
9
9
|
|
|
10
|
-
### 🧠 RuvNet Brain — [](https://github.com/stuinfla/ruvnet-brain/blob/main/plugin/.claude-plugin/plugin.json)
|
|
11
11
|
|
|
12
12
|
**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.**
|
|
13
13
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ruvnet-brain",
|
|
3
|
-
"version": "4.5.
|
|
3
|
+
"version": "4.5.13",
|
|
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 77 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 a UserPromptSubmit retrieve-and-inject grounding hook and a PreToolUse write gate that refuses ungrounded rUv-product code until search_ruvnet has been consulted (ADR-0012 / ADR-067).",
|
|
4
|
-
"version": "4.5.
|
|
4
|
+
"version": "4.5.13",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Stuart Kerr"
|
|
7
7
|
},
|
|
@@ -54,7 +54,10 @@ export async function managedRoute({ originalPrompt, taskFacts, harness, feedbac
|
|
|
54
54
|
const stronger = decision.model === priorDecision.model
|
|
55
55
|
? efforts.indexOf(decision.effort) > efforts.indexOf(priorDecision.effort)
|
|
56
56
|
: classes.indexOf(decision.taskClass) > classes.indexOf(priorDecision.taskClass);
|
|
57
|
-
|
|
57
|
+
const hardContinuation = priorDecision.taskClass === 'hard' && decision.taskClass === 'hard'
|
|
58
|
+
&& ['harness', 'provider', 'model', 'effort'].every((field) => decision[field] === priorDecision[field]);
|
|
59
|
+
assert(stronger || hardContinuation, 'No stronger eligible owner-approved native repair route; same or weaker route refused');
|
|
60
|
+
if (hardContinuation) decision.reason += '; bounded scoped repair at approved hard allocation';
|
|
58
61
|
}
|
|
59
62
|
return decision;
|
|
60
63
|
}
|
|
@@ -80,6 +80,7 @@ export const RELEASE_REQUIREMENTS = Object.freeze({
|
|
|
80
80
|
"tests/unit/protected-release-invocation.test.mjs",
|
|
81
81
|
"tests/unit/release-identity-invariants.test.mjs",
|
|
82
82
|
"tests/unit/release-transaction.test.mjs",
|
|
83
|
+
"tests/unit/release-transaction-provider-buffer.test.mjs",
|
|
83
84
|
"tests/unit/prepublication-evidence.test.mjs",
|
|
84
85
|
"tests/unit/candidate-host-evidence.test.mjs",
|
|
85
86
|
"tests/unit/host-install-matrix-concurrency.test.mjs",
|
|
@@ -24,6 +24,13 @@ export const ASSET_DOWNLOAD_TIMEOUT_MS = Number(process.env.RUVNET_RELEASE_ASSET
|
|
|
24
24
|
const command = (name, args, options = {}) => execFileSync(name, args, {
|
|
25
25
|
encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], timeout: 30_000, maxBuffer: 32 * 1024 * 1024, ...options,
|
|
26
26
|
}).trim();
|
|
27
|
+
|
|
28
|
+
// The 683MB 4.5.12 payload outlasted metadata's 30s budget despite completing remotely.
|
|
29
|
+
// Size uploads independently at 1MiB/s, capped at ten minutes per file; no added retry.
|
|
30
|
+
export function assetUploadTimeoutMs(bytes) {
|
|
31
|
+
if (!Number.isSafeInteger(bytes) || bytes < 0) throw new Error('Safe asset byte count required');
|
|
32
|
+
return Math.max(30_000, Math.min(600_000, Math.ceil(bytes / (1024 * 1024)) * 1000));
|
|
33
|
+
}
|
|
27
34
|
const json = (name, args, options) => JSON.parse(command(name, args, options));
|
|
28
35
|
// ADR-086 S1: `releases/latest` is the customer download pointer and is a corpus generation on any
|
|
29
36
|
// night a corpus round shipped. Every question this provider asks is about the CODE generation, so
|
|
@@ -436,7 +443,9 @@ export function liveReleaseProvider({ root = process.cwd() } = {}) {
|
|
|
436
443
|
}
|
|
437
444
|
continue;
|
|
438
445
|
}
|
|
439
|
-
command('gh', ['release', 'upload', draft.tag, file, '--repo', REPO]
|
|
446
|
+
command('gh', ['release', 'upload', draft.tag, file, '--repo', REPO], {
|
|
447
|
+
timeout: assetUploadTimeoutMs(fs.statSync(file).size),
|
|
448
|
+
});
|
|
440
449
|
}
|
|
441
450
|
},
|
|
442
451
|
|