@surlymochan/evalid 0.5.5 → 0.5.7
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 +11 -0
- package/README.md +1 -0
- package/RELEASE_NOTES.md +18 -0
- package/docs/launch-dossier.md +2 -2
- package/package.json +5 -3
- package/src/core/workflow-loader.js +31 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,17 @@ All notable changes to this project are documented here. Detailed notes live in
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.5.7] - 2026-11-08
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **c8 coverage config (#52)**: the repo previously had no coverage tooling. Added `c8` (^12.0.0) as a dev-dependency, `.c8rc.json` (covers `src/**` and `bin/**`, excludes `test/**`, reports to `coverage/`), and `npm run coverage`; `test/coverage-config.test.js` pins the wiring with 3 assertions; `coverage/` added to `.gitignore`; README dev-commands block gains one line. No runtime behavior changes. Test evidence: `npm run coverage` 372 tests / 372 pass / 0 fail (baseline 369, +3 new); measured coverage 84.64% statements / 62.73% branches / 94.02% functions, `coverage/lcov.info` generated. No bench numbers are involved; the bench-number acceptance for P1-2 / P1-3 / P2-1 / P2-3 still awaits the MiniMax full-matrix batch.
|
|
12
|
+
|
|
13
|
+
## [0.5.6] - 2026-11-07
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- **Playwright 1.59.1 → 1.65.0 (#49)**: dev-dependency bump; paired Chromium 158.0.8127.18 (build 1254) verified locally. Test evidence: `npm test` 363 tests / 362 pass / 0 fail / 1 skipped (pre-existing); `drift:scan` + `pack:check` green.
|
|
17
|
+
- **js-yaml 4.1.1 → 5.5.0 (major) (#50)**: dependency upgraded; the repo's only production use is `yaml.load` in `src/core/workflow-loader.js` (default schema) plus test-only loads of the two shipped workflows. Migration verified item by item before upgrading (2026-11-07, v4 vs v5 parsers run side by side): both `workflows/yolo.yaml` and `workflows/corps.yaml` parse deep-equal; scalar resolution is unchanged (`on`/`yes` stay strings, `017` stays decimal 17, `0o17` stays octal 15, `1:30` stays a string, anchors/aliases still resolve, duplicate keys still throw); empty input now throws `expected a document, but the input is empty` instead of returning `undefined` (the loader threw either way, the message is better). One real break, handled explicitly: v5's default CORE_SCHEMA no longer resolves the `<<` merge key — a merge key now survives as a literal `"<<"` property, and the loader rejects it with an actionable error ("Inline the merged mapping instead") instead of a confusing schema-validation failure. Pinning `YAML11_SCHEMA` was considered and rejected: it restores additive merging but flips scalars (`on`/`yes` → `true`, `017` → 15, `1:30` → 90) and throws on merge-with-override. The import form also changed with v5 (flat named exports, no default export): the four `import yaml from 'js-yaml'` sites now use `import * as yaml from 'js-yaml'`, call sites unchanged. Pinned by `test/workflow-loader-yaml5.test.js` (7 tests). No bench numbers are involved; the bench-number acceptance for P1-2 / P1-3 / P2-1 / P2-3 still awaits the MiniMax full-matrix batch.
|
|
18
|
+
|
|
8
19
|
## [0.5.5] - 2026-11-07
|
|
9
20
|
|
|
10
21
|
### Fixed
|
package/README.md
CHANGED
|
@@ -304,6 +304,7 @@ evalid aims to complement prompt-level workflow kits and spec tools, not replace
|
|
|
304
304
|
npm ci
|
|
305
305
|
npx playwright install chromium # browser-evidence tests
|
|
306
306
|
npm test # 270+ tests
|
|
307
|
+
npm run coverage # same suite with a c8 coverage report in coverage/
|
|
307
308
|
npm run drift:scan # docs/skill/workflow drift checks
|
|
308
309
|
npm run pack:check # what would be published
|
|
309
310
|
```
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
|
+
## 0.5.7 - Coverage config (c8)
|
|
4
|
+
|
|
5
|
+
Patch release. One addition since 0.5.6, verified by the full test suite.
|
|
6
|
+
|
|
7
|
+
**c8 coverage config (#52).** The repo previously had no coverage tooling. Added `c8` (^12.0.0) as a dev-dependency, `.c8rc.json` (covers `src/**` and `bin/**`, excludes `test/**`), and `npm run coverage`, pinned by `test/coverage-config.test.js` (3 assertions). Measured on the merged tree: 372 tests / 372 pass / 0 fail; coverage 84.64% statements / 62.73% branches / 94.02% functions. No runtime behavior changes.
|
|
8
|
+
|
|
9
|
+
Acceptance debt, stated plainly: the bench-number acceptance for P1-2, P1-3, P2-1 and P2-3 — the wall-clock/token/resolved lines from issue #5 — still awaits the MiniMax full-matrix batch (15 instances × 4 arms × reps 3), which is stopped on MiniMax Token Plan quota exhaustion. No bench numbers are claimed in this release.
|
|
10
|
+
|
|
11
|
+
## 0.5.6 - Playwright 1.65.0; js-yaml 5.5.0
|
|
12
|
+
|
|
13
|
+
Patch release. Two dependency upgrades since 0.5.5, both verified by the full test suite (`npm run verify` exit 0 on the merged tree).
|
|
14
|
+
|
|
15
|
+
**Playwright 1.59.1 → 1.65.0 (#49).** Dev-dependency bump; paired Chromium 158.0.8127.18 (build 1254) verified locally.
|
|
16
|
+
|
|
17
|
+
**js-yaml 4.1.1 → 5.5.0 (#50).** Major upgrade, verified item by item before merging: both shipped workflows parse deep-equal under v4 and v5, scalar resolution is unchanged, and the one real break — v5 no longer resolves the `<<` merge key — is handled explicitly: the workflow loader now rejects a literal `<<` key with an actionable error telling the author to inline the merged mapping, instead of a confusing schema-validation failure. Pinned by `test/workflow-loader-yaml5.test.js` (7 tests).
|
|
18
|
+
|
|
19
|
+
Acceptance debt, stated plainly: the bench-number acceptance for P1-2, P1-3, P2-1 and P2-3 — the wall-clock/token/resolved lines from issue #5 — still awaits the MiniMax full-matrix batch (15 instances × 4 arms × reps 3), which is running. No bench numbers are claimed in this release.
|
|
20
|
+
|
|
3
21
|
## 0.5.5 - Package entry restored; dead code removed
|
|
4
22
|
|
|
5
23
|
Patch release. Two small fixes since 0.5.4, both verified by the full test suite (`npm run verify` exit 0 on the merged tree).
|
package/docs/launch-dossier.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# evalid Launch Dossier
|
|
2
2
|
|
|
3
|
-
Generated: 2026-11-
|
|
3
|
+
Generated: 2026-11-07T17:29:14.617Z
|
|
4
4
|
Mode: post_publish
|
|
5
5
|
Verdict: conditionally ready: engine and adoption evidence are strong, registry publication remains required for a splash launch
|
|
6
6
|
Launch ready: not yet
|
|
@@ -117,7 +117,7 @@ Evidence:
|
|
|
117
117
|
- Adoption records: 1; status: pass
|
|
118
118
|
- Goal audit: pass; goal: Keep evalid credible as an open-source agent delivery runtime: repo-owned workflow contracts, executable verification gates, durable project context, and honest benchmark evidence.
|
|
119
119
|
- Package evidence: missing; source: registry_json
|
|
120
|
-
- Package name/version: @surlymochan/evalid@0.5.
|
|
120
|
+
- Package name/version: @surlymochan/evalid@0.5.7
|
|
121
121
|
|
|
122
122
|
## Passing Evidence
|
|
123
123
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@surlymochan/evalid",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.7",
|
|
4
4
|
"description": "Claimed != verified: a runtime verification layer for coding agents. It seals each test run and replays it from a clean snapshot, with a zero-judge gate pipeline (spec clarification, code review, TDD proof) and the xflow CLI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
"scripts": {
|
|
63
63
|
"start": "node bin/xflow.js serve",
|
|
64
64
|
"test": "node scripts/run-tests.mjs",
|
|
65
|
+
"coverage": "c8 node scripts/run-tests.mjs",
|
|
65
66
|
"drift:scan": "node --test test/workflow-drift-scan.test.js",
|
|
66
67
|
"doctor": "node bin/xflow.js doctor",
|
|
67
68
|
"verify": "npm test",
|
|
@@ -77,9 +78,10 @@
|
|
|
77
78
|
},
|
|
78
79
|
"dependencies": {
|
|
79
80
|
"ajv": "^8.12.0",
|
|
80
|
-
"js-yaml": "^
|
|
81
|
+
"js-yaml": "^5.5.0"
|
|
81
82
|
},
|
|
82
83
|
"devDependencies": {
|
|
83
|
-
"
|
|
84
|
+
"c8": "^12.0.0",
|
|
85
|
+
"playwright": "^1.65.0"
|
|
84
86
|
}
|
|
85
87
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import { readFileSync, existsSync } from 'fs';
|
|
17
17
|
import { resolve, dirname } from 'path';
|
|
18
18
|
import { fileURLToPath } from 'url';
|
|
19
|
-
import yaml from 'js-yaml';
|
|
19
|
+
import * as yaml from 'js-yaml';
|
|
20
20
|
import Ajv from 'ajv';
|
|
21
21
|
|
|
22
22
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -54,6 +54,13 @@ export function load(workflowPath, { skipRuntimeChecks = false } = {}) {
|
|
|
54
54
|
const raw = readFileSync(absPath, 'utf8');
|
|
55
55
|
const workflow = yaml.load(raw);
|
|
56
56
|
|
|
57
|
+
// js-yaml 5 loads with CORE_SCHEMA, which no longer resolves the `<<`
|
|
58
|
+
// merge key: a merge key now survives parsing as a literal "<<" property
|
|
59
|
+
// instead of merging. The schema below (additionalProperties: false)
|
|
60
|
+
// would reject it with a confusing validation error, so fail here with
|
|
61
|
+
// an actionable one. Anchors/aliases still work; only `<<` is affected.
|
|
62
|
+
assertNoMergeKeys(workflow, absPath);
|
|
63
|
+
|
|
57
64
|
// 1. Schema validation
|
|
58
65
|
const schema = loadSchema();
|
|
59
66
|
const ajv = new Ajv({ allErrors: true });
|
|
@@ -108,6 +115,29 @@ export function load(workflowPath, { skipRuntimeChecks = false } = {}) {
|
|
|
108
115
|
|
|
109
116
|
// ─── Runtime checks ──────────────────────────────────────────────────────────
|
|
110
117
|
|
|
118
|
+
/**
|
|
119
|
+
* Reject literal `<<` keys left behind by js-yaml 5's CORE_SCHEMA default,
|
|
120
|
+
* which no longer resolves YAML merge keys. A workflow that relied on
|
|
121
|
+
* merging must inline the merged mapping instead. Walks the whole parsed
|
|
122
|
+
* document so the error names the exact location.
|
|
123
|
+
*/
|
|
124
|
+
function assertNoMergeKeys(value, workflowPath, trail = '$') {
|
|
125
|
+
if (Array.isArray(value)) {
|
|
126
|
+
value.forEach((item, i) => assertNoMergeKeys(item, workflowPath, `${trail}[${i}]`));
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (value && typeof value === 'object') {
|
|
130
|
+
for (const [key, child] of Object.entries(value)) {
|
|
131
|
+
if (key === '<<') {
|
|
132
|
+
throw new Error(
|
|
133
|
+
`Workflow uses a YAML merge key ("<<") at ${trail} in ${workflowPath}, which js-yaml 5 no longer resolves. Inline the merged mapping instead.`
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
assertNoMergeKeys(child, workflowPath, `${trail}.${key}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
111
141
|
import { spawnSync } from 'child_process';
|
|
112
142
|
|
|
113
143
|
function checkBinOnPath(bin, description) {
|