@surlymochan/evalid 0.4.1 → 0.5.0
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 +8 -0
- package/RELEASE_NOTES.md +14 -0
- package/docs/launch-dossier.md +2 -2
- package/package.json +1 -1
- package/xflow/atoms/j6_cr_review.py +39 -0
- package/xflow/yolo/SKILL.md +8 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ All notable changes to this project are documented here. Detailed notes live in
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.5.0] - 2026-11-06
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **CR review seal partition (issue #5, P1-2)**: the J6 review proof (`cr/review-0.json`) now splits the changed files into `sealed_unchanged` (bytes still identical to the green TDD proof's sealed hashes) and `seal_drifted`, with a `reread_count`. The yolo skill's verify-consistency guidance uses the partition so the review pass re-reads only drifted files instead of everything the gate already verified. Reporting only — verdicts are unchanged, and without a green seal the partition is `null` and everything is re-read.
|
|
12
|
+
- **Bench Verified set extended to 15 instances (issue #5, P2-2)**: `bench/swebench/instances.json` grows from 12 to 15, adding sympy-15599, sympy-19040 and sympy-24213, and a structural validation of the instance set (`bench/swebench/test_instances.py`) now runs in CI. Gold-patch checks for the three new instances stay pending the benchmark environment.
|
|
13
|
+
- **Bench report aggregates median (IQR) (issue #5, P2-1)**: `bench/swebench/report.py` now aggregates per-arm wall-clock, token and cost results with q1/median/q3 and presents them as median (IQR); reps isolation and the aggregation itself are pinned by `bench/swebench/test_reps_report.py`. Live multi-rep runs stay pending the benchmark environment.
|
|
14
|
+
- **P0-2 acceptance pinned against saved pre-fix patches (issue #5, P0-2)**: regression tests in `bench/swebench/test_diff_filter.py` run the saved pre-fix patches through the evidence filter (`specs/`, `.xflow/`, `.as-xflow/` excluded from solution patches). The saved 9.7 MB evidence-laden patch filters down to 4.3 KB, and every saved patch lands under the 200 KB acceptance line.
|
|
15
|
+
|
|
8
16
|
## [0.4.1] - 2026-11-06
|
|
9
17
|
|
|
10
18
|
### Fixed
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
|
+
## 0.5.0 - Review re-reads only drifted files; the bench set grows to 15
|
|
4
|
+
|
|
5
|
+
Minor release. One product change — the CR review now spends its re-reads only where the seal says bytes moved — plus three bench-hygiene landings from the issue #5 backlog, each pinned by tests rather than by a live run.
|
|
6
|
+
|
|
7
|
+
**Review re-reads only drifted files (#32, issue #5 P1-2).** The J6 review proof (`cr/review-0.json`) now carries a seal partition: every changed file is classified `sealed_unchanged` (bytes still identical to the green TDD proof's sealed hashes) or `seal_drifted`, with a `reread_count`. The yolo verify-consistency guidance consumes the partition, so the review pass re-reads only the drifted files instead of everything the gate already verified. This is reporting only — verdicts are unchanged, and without a green seal the partition is `null` and everything is re-read, exactly as before.
|
|
8
|
+
|
|
9
|
+
**The Verified bench set grows from 12 to 15 instances (#30, issue #5 P2-2).** `bench/swebench/instances.json` adds sympy-15599, sympy-19040 and sympy-24213, and a structural validation of the instance set (`bench/swebench/test_instances.py`) now runs in CI, so a malformed instance entry fails the build instead of a bench run. Gold-patch checks for the three new instances are pending the benchmark environment.
|
|
10
|
+
|
|
11
|
+
**Bench reports now aggregate as median (IQR) (#31, issue #5 P2-1).** `bench/swebench/report.py` aggregates per-arm wall-clock, token and cost results with q1/median/q3 and presents them in median (IQR) form. Reps isolation — repeat runs of the same cell never share grading state — and the aggregation itself are pinned by `bench/swebench/test_reps_report.py`.
|
|
12
|
+
|
|
13
|
+
**P0-2 acceptance is now pinned by regression tests (#29, issue #5 P0-2).** The evidence exclusion itself landed earlier (solution patches drop `specs/`, `.xflow/` and `.as-xflow/`); what was missing was a test that would notice if it regressed. `bench/swebench/test_diff_filter.py` now runs the saved pre-fix patches through the filter: the saved 9.7 MB evidence-laden patch comes out at 4.3 KB, and every saved patch lands under the 200 KB acceptance line.
|
|
14
|
+
|
|
15
|
+
Acceptance debt, stated plainly: the live-run acceptance for P1-2, P2-1 and P2-2 — multi-rep bench runs on the restored environment, including the wall-clock/token lines from issue #5 and gold checks for the new instances — is still pending the benchmark environment. No performance numbers are claimed in this release; what shipped is the reporting, the larger instance set, and the tests that pin their behaviour.
|
|
16
|
+
|
|
3
17
|
## 0.4.1 - Failed runs report phase costs; Node 24 test counts fail closed
|
|
4
18
|
|
|
5
19
|
Patch release. Two fixes, both about the gate trusting evidence it had not actually read.
|
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-05T19:40:37.700Z
|
|
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.
|
|
120
|
+
- Package name/version: @surlymochan/evalid@0.5.0
|
|
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.
|
|
3
|
+
"version": "0.5.0",
|
|
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",
|
|
@@ -26,6 +26,11 @@ Checks (findings are structured JSON, severity fail | warn):
|
|
|
26
26
|
(--max-files / --max-lines, or status.json cr_max_files /
|
|
27
27
|
cr_max_lines). Over budget is a warn with a split-the-spec
|
|
28
28
|
recommendation; over 2x budget fails.
|
|
29
|
+
5. Seal partition (reporting only, never a verdict input) - the proof
|
|
30
|
+
splits the changed files into those still byte-identical to the
|
|
31
|
+
green TDD seal (file_hashes in tdd/green-0.json) and those that
|
|
32
|
+
drifted or were never sealed. A review pass re-reads only the
|
|
33
|
+
drifted set; the sealed set is exactly what the TDD gate verified.
|
|
29
34
|
|
|
30
35
|
Self-contained on purpose: this atom does not import tdd_lib so it can
|
|
31
36
|
run standalone in a reviewed tree. The file/symbol/assertion semantics
|
|
@@ -36,6 +41,7 @@ directory is excluded from the reviewed diff.
|
|
|
36
41
|
"""
|
|
37
42
|
import argparse
|
|
38
43
|
import fnmatch
|
|
44
|
+
import hashlib
|
|
39
45
|
import json
|
|
40
46
|
import os
|
|
41
47
|
import re
|
|
@@ -200,6 +206,38 @@ def assertion_delta(project_root: Path, diff_ref: str, test_files: list, deleted
|
|
|
200
206
|
return added, removed
|
|
201
207
|
|
|
202
208
|
|
|
209
|
+
def seal_partition(project_root: Path, change_dir: Path, files: list):
|
|
210
|
+
"""Split changed files by whether they still match the green seal.
|
|
211
|
+
|
|
212
|
+
The green TDD proof (tdd/green-0.json) records the sha256 of every
|
|
213
|
+
file I6a sealed when the proof was produced (issue #5, P1-2). A
|
|
214
|
+
changed file whose current bytes still hash to the sealed value is
|
|
215
|
+
byte-for-byte what the TDD gate verified, so a review pass does not
|
|
216
|
+
need to re-read it; anything else — drifted after the seal, or never
|
|
217
|
+
sealed — must be re-read. Returns None when no usable green seal
|
|
218
|
+
exists (the review then re-reads everything).
|
|
219
|
+
"""
|
|
220
|
+
green = read_json(change_dir / "tdd" / "green-0.json")
|
|
221
|
+
hashes = green.get("file_hashes")
|
|
222
|
+
if not isinstance(hashes, dict) or not hashes:
|
|
223
|
+
return None
|
|
224
|
+
sealed, drifted = [], []
|
|
225
|
+
for relative in files:
|
|
226
|
+
full = project_root / relative
|
|
227
|
+
digest = None
|
|
228
|
+
if full.is_file():
|
|
229
|
+
digest = hashlib.sha256(full.read_bytes()).hexdigest()
|
|
230
|
+
if digest is not None and hashes.get(relative) == digest:
|
|
231
|
+
sealed.append(relative)
|
|
232
|
+
else:
|
|
233
|
+
drifted.append(relative)
|
|
234
|
+
return {
|
|
235
|
+
"sealed_unchanged": sealed,
|
|
236
|
+
"seal_drifted": drifted,
|
|
237
|
+
"reread_count": len(drifted),
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
|
|
203
241
|
def tokenize(text: str) -> set:
|
|
204
242
|
tokens = set()
|
|
205
243
|
for raw in re.findall(r"[A-Za-z_][A-Za-z0-9_]*", text):
|
|
@@ -416,6 +454,7 @@ def main() -> None:
|
|
|
416
454
|
"changed_files": all_files,
|
|
417
455
|
"code_files": code_files,
|
|
418
456
|
"test_files": test_files,
|
|
457
|
+
"seal_partition": seal_partition(project_root, change_dir, all_files),
|
|
419
458
|
"spec_aligned_files": aligned_files,
|
|
420
459
|
"assertions": {"added": added_assertions, "removed": removed_assertions},
|
|
421
460
|
"budget": budget,
|
package/xflow/yolo/SKILL.md
CHANGED
|
@@ -61,6 +61,14 @@ pass that writes the plan also writes the failing test, so `tdd-red` only
|
|
|
61
61
|
runs and seals it — no second exploration pass, and the issue/branch
|
|
62
62
|
ceremony no longer sits between planning and the red proof.
|
|
63
63
|
|
|
64
|
+
In `verify-consistency`, run the deterministic gates first. The J6 proof
|
|
65
|
+
(`specs/changes/${CHANGE_ID}/cr/review-0.json`) carries a `seal_partition`:
|
|
66
|
+
files whose bytes still match the green proof's sealed hashes
|
|
67
|
+
(`sealed_unchanged`) are exactly what the TDD gate verified — the review
|
|
68
|
+
pass does not re-read them. Only `seal_drifted` files (changed after the
|
|
69
|
+
green seal, or never sealed) get a fresh read. When `seal_partition` is
|
|
70
|
+
null there is no green seal to trust, and the review re-reads everything.
|
|
71
|
+
|
|
64
72
|
The workflow YAML is the canonical execution source for atom order, gates, and
|
|
65
73
|
artifact checks. This skill only explains the contract.
|
|
66
74
|
|