ruflo 3.32.34 → 3.32.36

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ruflo",
3
- "version": "3.32.34",
3
+ "version": "3.32.36",
4
4
  "description": "Ruflo - Enterprise AI agent orchestration platform. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration",
5
5
  "main": "bin/ruflo.js",
6
6
  "type": "module",
@@ -40,7 +40,7 @@
40
40
  "package:rvf": "bash src/scripts/package-rvf.sh"
41
41
  },
42
42
  "dependencies": {
43
- "@claude-flow/cli": "^3.32.34"
43
+ "@claude-flow/cli": "^3.32.36"
44
44
  },
45
45
  "optionalDependencies": {},
46
46
  "overrides": {
@@ -1,4 +1,6 @@
1
- FROM node:20-slim
1
+ # Node 24 is Active LTS through April 2028. Keep this pinned to a
2
+ # supported LTS line; test-security-lock.js fails if it drifts to EOL.
3
+ FROM node:24-slim
2
4
 
3
5
  WORKDIR /app
4
6
 
@@ -11,6 +11,7 @@
11
11
  * 4. `requireAuth` uses `timingSafeEqual` (constant-time compare)
12
12
  * 5. `executeTool` denies terminal_execute unless `MCP_ENABLE_TERMINAL === "true"` (Phase 1d + 2a)
13
13
  * 6. CORS respects `MCP_CORS_ORIGIN` allowlist (Phase 3b)
14
+ * 9. Both production images use the supported Node 24 LTS line (#2847)
14
15
  *
15
16
  * Runs offline (no server, no deps). CI-safe.
16
17
  *
@@ -26,6 +27,10 @@ const BRIDGES = [
26
27
  path.join(HERE, "index.js"), // ruflo/src/mcp-bridge/index.js
27
28
  path.join(HERE, "..", "ruvocal", "mcp-bridge", "index.js"), // ruvocal variant (deployed)
28
29
  ];
30
+ const DOCKERFILES = [
31
+ path.join(HERE, "Dockerfile"),
32
+ path.join(HERE, "..", "ruvocal", "mcp-bridge", "Dockerfile"),
33
+ ];
29
34
 
30
35
  const CHECKS = [
31
36
  {
@@ -91,6 +96,24 @@ for (const bridge of BRIDGES) {
91
96
  }
92
97
  }
93
98
 
99
+ for (const dockerfile of DOCKERFILES) {
100
+ if (!fs.existsSync(dockerfile)) {
101
+ console.error(`FAIL: Dockerfile missing: ${dockerfile}`);
102
+ hardFail = true;
103
+ continue;
104
+ }
105
+ const source = fs.readFileSync(dockerfile, "utf-8");
106
+ const rel = path.relative(path.join(HERE, "..", ".."), dockerfile);
107
+ console.log(`\n# ${rel}`);
108
+ if (/^FROM\s+node:24(?:[.-][^\s]+)?\s*$/m.test(source)) {
109
+ console.log(" ✓ 9. supported-node-lts-runtime (#2847)");
110
+ } else {
111
+ console.log(" ✗ 9. supported-node-lts-runtime (#2847)");
112
+ console.log(" hint: production images must use the supported node:24 LTS line");
113
+ hardFail = true;
114
+ }
115
+ }
116
+
94
117
  if (hardFail) {
95
118
  console.error("\nADR-166 security lock FAILED — a load-bearing control was removed or drifted.");
96
119
  process.exit(1);
@@ -1,4 +1,6 @@
1
- FROM node:20-slim
1
+ # Node 24 is Active LTS through April 2028. Keep this pinned to a
2
+ # supported LTS line; test-security-lock.js fails if it drifts to EOL.
3
+ FROM node:24-slim
2
4
 
3
5
  WORKDIR /app
4
6