@holmes-lab/holmes-kit 0.3.9 → 0.3.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/CHANGELOG.md CHANGED
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+ <!-- @implements A-SPEC-209 -->
8
+ ## [0.3.10] - 2026-09-01
9
+
10
+ ### Fixed
11
+
12
+ - **`test_run` false red on large suites** (measured on this repo, twice): every runner spawn
13
+ used `execFileSync`'s default 1MB `maxBuffer`, so a full `jest --json` for 289 suites
14
+ (>2MB) died with ENOBUFS and a GREEN suite reported `passed: false` with no failing test
15
+ named — the baseline never recorded, and the new push gate could never be satisfied. All six
16
+ runner spawns (jest/pytest/cargo/java/dotnet/go) now share a 256MB ceiling; regression pinned
17
+ with a >1MB green-output fixture (mutant-checked both ways).
18
+
7
19
  <!-- @implements A-SPEC-209 -->
8
20
  ## [0.3.9] - 2026-09-01
9
21
 
package/dist/.build-id CHANGED
@@ -1 +1 @@
1
- ab67afc-mti0dz4k
1
+ 1085a02-mti0yut3
@@ -52,6 +52,12 @@ const fs = __importStar(require("node:fs"));
52
52
  const os = __importStar(require("node:os"));
53
53
  const path = __importStar(require("node:path"));
54
54
  const python_env_1 = require("./python-env");
55
+ // Runner stdout ceiling. Measured 2026-09-01 on this repo: a full `jest --json` for 289 suites /
56
+ // 4568 tests emits >2MB, and execFileSync's DEFAULT maxBuffer (1MB) kills the child with ENOBUFS —
57
+ // so a GREEN suite reported `passed: false`, twice, with no failing test named (the baseline never
58
+ // recorded and the push gate could never be satisfied). Every runner spawn shares this ceiling:
59
+ // evidence-bearing output must never be truncated into a false red.
60
+ const RUNNER_MAX_BUFFER = 256 * 1024 * 1024;
55
61
  function planTestRun(scope) {
56
62
  if (scope.tier === 'full') {
57
63
  return { mode: 'full', testFiles: [], reason: 'full regression — run the entire suite' };
@@ -233,7 +239,7 @@ function runJest(files, mode, cwd) {
233
239
  ? [...pre, '--silent', '--json', '--runTestsByPath', '--', ...safeFiles]
234
240
  : [...pre, '--silent', '--json'];
235
241
  try {
236
- const out = (0, node_child_process_1.execFileSync)(cmd, args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
242
+ const out = (0, node_child_process_1.execFileSync)(cmd, args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], maxBuffer: RUNNER_MAX_BUFFER });
237
243
  return { passed: true, tail: tailOf(out), executed: parseExecutedCounts(out, cwd) };
238
244
  }
239
245
  catch (e) {
@@ -271,7 +277,7 @@ function runPytest(files, mode, cwd) {
271
277
  }
272
278
  };
273
279
  try {
274
- const out = (0, node_child_process_1.execFileSync)(python, args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
280
+ const out = (0, node_child_process_1.execFileSync)(python, args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], maxBuffer: RUNNER_MAX_BUFFER });
275
281
  return { passed: true, tail: tailOf(out), executed: read() };
276
282
  }
277
283
  catch (e) {
@@ -326,7 +332,7 @@ function runCargo(files, _mode, cwd, opts) {
326
332
  let out = '';
327
333
  let ok = true;
328
334
  try {
329
- out = (0, node_child_process_1.execFileSync)('cargo', ['test'], { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
335
+ out = (0, node_child_process_1.execFileSync)('cargo', ['test'], { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], maxBuffer: RUNNER_MAX_BUFFER });
330
336
  }
331
337
  catch (e) {
332
338
  const err = e;
@@ -419,7 +425,7 @@ function runGradle(files, _mode, cwd, opts) {
419
425
  }
420
426
  let ok = true;
421
427
  try {
422
- (0, node_child_process_1.execFileSync)(cmd, args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
428
+ (0, node_child_process_1.execFileSync)(cmd, args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], maxBuffer: RUNNER_MAX_BUFFER });
423
429
  }
424
430
  catch {
425
431
  ok = false;
@@ -451,7 +457,7 @@ function runDotnet(files, _mode, cwd, opts) {
451
457
  const report = path.join(dir, 'junit.xml');
452
458
  let ok = true;
453
459
  try {
454
- (0, node_child_process_1.execFileSync)('dotnet', ['test', '--logger', `junit;LogFilePath=${report}`], { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
460
+ (0, node_child_process_1.execFileSync)('dotnet', ['test', '--logger', `junit;LogFilePath=${report}`], { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], maxBuffer: RUNNER_MAX_BUFFER });
455
461
  }
456
462
  catch {
457
463
  ok = false;
@@ -498,7 +504,7 @@ function runGo(files, mode, cwd, opts) {
498
504
  const runDir = (dirArg, creditFiles) => {
499
505
  let out = '';
500
506
  try {
501
- out = (0, node_child_process_1.execFileSync)('go', ['test', '-json', dirArg], { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
507
+ out = (0, node_child_process_1.execFileSync)('go', ['test', '-json', dirArg], { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], maxBuffer: RUNNER_MAX_BUFFER });
502
508
  }
503
509
  catch (e) {
504
510
  const err = e;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "//": "@implements A-SPEC-209",
3
3
  "name": "@holmes-lab/holmes-kit",
4
- "version": "0.3.9",
4
+ "version": "0.3.10",
5
5
  "description": "Holmes-Kit — deterministic Agentic Software Engineering (ASE) harness with causal traceability (spec chain + D-CPG + RTM + phase guardrail)",
6
6
  "main": "dist/holmes/mcp/server.js",
7
7
  "types": "dist/holmes/mcp/server.d.ts",