@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 +12 -0
- package/dist/.build-id +1 -1
- package/dist/holmes/review/test-runner.js +12 -6
- package/package.json +1 -1
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
|
-
|
|
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.
|
|
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",
|