Repository navigation
v1.4.4
This release fixes six findings from the 2026-10-10 audit, plus three defects found in its review, each with a regression test. Most of it makes accepted mean more: checks that passed only because of an uncommitted file, approvals given against an older spec, and one fix settling several different findings no longer count.
Highlights
- Checks with untracked files present do not cover the delivered commit.
run-checksnow recordsuntracked_beforeanduntracked_after(the??lines ofgit status --porcelain --untracked-files=all). An untracked file present before the checks makes themchecks_unclean, so the run isunverified, notaccepted; a file only the checks themselves create is a warning.check-verifycompares the new lists. Ignored files are not covered. - Approvals record the spec.
ledger reviewedtakes an optional SPEC argument (-for none) and recordsspec_sha256; on resume, an approval whose spec changed is stale. An approval from before 1.4.4 records no spec, so in a run with a spec it is reviewed again once, also after a later launch's setup or a removed spec. The 9-argument form still works. - Distinct findings on one line stay separate. The final review merges findings only when location and issue text match; different issues at one place keep their own ids (
same_locationlinks them), so fixing one cannot settle another. - Reserved ids are rejected. Task and lane ids that are JavaScript property names (
__proto__,constructor,toString, ...) are refused at validation, and id lookups use own properties only. - run-report shows damaged transcripts.
unreadable_lines(per agent and in total) counts lines that are not valid JSON or not valid UTF-8; such an agent's totals are partial (output_tokensunavailable, the lower bound inoutput_tokens_min). A U+2028 inside a string is read correctly. - The installer fails safely.
settings.jsonmust hold exactly one JSON object: an empty file, several documents, an array or invalid JSON stop both uninstall and update before anything is removed or replaced.
Behaviour change to know
Earlier steps of a run (integration, the e2e and post-integrate hooks, the final fixer) run the project's checks in the feature checkout. If those checks write files that are not gitignored (coverage output, test results), the files are still there when verify runs, and the run comes back unverified with checks_unclean. Ignore known disposable output in .gitignore; never ignore source a check needs. reference.md "Report" describes the guarantee and its limits.
Testing
node tests/run-tests.mjs: 842 tests, 830 pass, 12 skipped, 0 fail on Windows locally; CI passed on Ubuntu (Node 22 and 24), macOS and Windows.- Built by parallel-lanes run r144 (1.4.3 engine): 9 tasks in 5 lanes, 28 agents, 51 min, accepted with check-verify
match. An outside review then reproduced three more defects (legacy approvals regaining validity after a later setup, empty or multi-document settings passing validation, invalid UTF-8 hiding lost counts); all three are fixed here with tests.
Compatibility
- run-checks output, verify results and run-report output gain fields; existing fields keep their meaning.
- Verify evidence written by an older run-checks (no untracked lists) is
checks_uncleanunder 1.4.4. - Resuming a run started before 1.4.4 that has a spec reviews its earlier approvals once more.
Upgrade
In your clone:
git pull && bash install.shThen start a new session, or run /clear, so the skill and hooks reload. Do not install while a parallel-lanes run is in progress: its agents use the installed helper scripts.