Skip to content

v1.6.16

Choose a tag to compare

@noderaven noderaven released this 04 Nov 19:26
· 6 commits to main since this release
c208f63

This release makes audit.md shorter to read without dropping a fact. Most of an audit's evidence gaps were one cause repeated under every task, and the plan and spec hashes printed once per task although they belong to the run. The gap list now names each cause once, with the tasks it covers; the hashes print once, in Checks; and each task block lists its own open minors.

Built with subagents (a research pass over the code and all 39 archive folders, two adversarial reviews of the design, an implementer and a reviewer per task, then a whole-branch review), without a parallel-lanes run, and released without a validation run on a real project.

What's changed

  • Evidence gaps by cause. The Evidence gaps section prints one line per cause: the pointer with its array indices as N, the state, the note, and the tasks it covers, (tasks A1, A2, ...), or (run) for a run-level cause, with its values. The header, the Summary and the bottom line say <G> evidence gap(s) in <C> cause(s). When a cause's gaps carry different notes (two shas, say), the line prints the note with its shas as <sha>, so it is true for every task it lists. audit.json keeps gaps value for value and adds gap_causes.
  • The plan and spec hashes once. They print in Checks, labelled by setup event and ledger line, instead of under every task as "launch i". The plan copy note for the section hashes prints there too. Everything that decides a task's committed, reviewed, verified or accepted state stays under the task.
  • Open minors per task. A task block ends with open minors: <id>, <id> for the open task minors whose id names that task, carried minors included. A minor whose id names a batch unit, no task, or more than one task stays under Open work only. When the run's engine records no minors, Open work says so once: open task minors: not recorded by this run's engine.
  • Plainer counts. The final findings read <open> open and <declined> declined final finding(s), no longer one sum. A lower bound reads M open task minor(s) listed (more may be missing) in audit and autopsy, in place of "at least M". Results from older engines with no list of open findings read unavailable open, not 0; the same holds for cannot-verify items. The stdout tasks line uses the bottom line's counts.
  • The override. For a run the user accepted, audit.json's acceptance gains verdict_without_override and verdict_rule_without_override: the verdict audit would give without the override. When it differs from the run's own verdict, the bottom line names it (accepted by user (over unverified: gate mismatch)), and Acceptance adds a line for it.
  • "No final review" prints only when there is none; when audit cannot tell which launch is the latest, Open work says only that.

Measured on the run history

Shipped 1.6.15's audit and this release's audit over fresh copies of the same 39 archive folders:

  • Gaps: 2,740 -> 2,438. The per-task copies of the plan and spec hashes and of the section-hash plan note (336) become 34 run-level gaps; every other gap is the same, value for value.
  • Evidence gaps lines: 2,740 -> 392, one per cause (206 run-level, 186 per task).
  • audit.md: 33,610 -> 29,874 lines over the 39 folders (-11%); the Tasks sections 21,046 -> 19,470.
  • Open minors: all 140 archived open task minors land in their task's block (16 runs); none is left under Open work only. 15 runs say once that their engine recorded none.
  • Older results: 13 runs from engines whose results list no open findings read unavailable open; 1.6.15 printed one open-or-declined count for them.
  • Verdict lines: the same in all 39 runs.

Testing

  • New tests, each failing before its change (or pinning behaviour that was right already, where noted): causes in every task, in some tasks and at run level, with repeated values; a cause with different notes; the moved hashes printed once in Checks and in no task block; open minors placed by id prefix, an exact match over T<id>, the snapshot's task for a carried id, batch units and unknown ids under Open work only; "not recorded" once; no final review and an unknown launch order; the lower-bound form in audit and autopsy; open and declined apart; unavailable counts from an older result; the override with a gate mismatch and with the gate unavailable; a reviewed task with no plan section and an unreadable plan copy (both already right).
  • Tests: full suite on Windows (Python 3.15) at the release head: 1970 tests (1954 pass, 16 skipped, 0 fail).
  • CI: passes on Ubuntu (Node 24, and Node 24 with Python 3.15), macOS (Node 24) and Windows (Node 24, Python 3.12).
  • Not run: a parallel-lanes run with this release installed.

Compatibility

  • audit_version is 2: audit.json gains gap_causes, run.checks.plan_hash, spec_hash and section_hash, acceptance.verdict_without_override and verdict_rule_without_override, and open_work.final.value.carried_minor_tasks and not_recorded; a task's requirement.section_hash is gone.
  • gaps keeps its shape. It counts fewer gaps for older runs (the moved hashes), so tool-outcomes reports smaller gap counts for audits made with this release.
  • autopsy_version is 13; history reruns autopsy on every archived run. autopsy.json's fields are unchanged.
  • Archived audits are not regenerated; run audit again on a run to get the new report.

Upgrade

In your clone:

git pull && bash install.sh