Skip to content

v0.12.0

Latest

Choose a tag to compare

@zw008 zw008 released this 10 Aug 06:48
· 2 commits to main since this release

Fixed

  • An undetermined outcome no longer exits as a plain failure. A write whose response was lost carries both error and outcomeUnknown, and the harness deliberately judges unknown first when writing the audit row — the change may have taken effect, so a blind retry could apply it twice. The CLI guard judged error first, so the audit said "may have taken effect" while the exit status told a script it had not happened. The two layers now agree (exit 2, not 1), and a test pins the ordering so it cannot silently flip back.
  • The CLI reported a refused or failed governed write as a success. 16 write call sites printed the governed twin's payload and exited 0 whatever it said — and @tool_errors flattens every refusal, guard rejection and upstream failure into {"error": ...} rather than raising, so nothing downstream of a && chain or a CI step could tell a blocked write from a landed one. The dry-run path already exited non-zero, which made the asymmetry worse: the preview was stricter than the write it previews. Results now route through a checked() helper — exit 1 on an error payload, exit 2 on an undetermined outcome, unchanged on success. This defect class had been fixed repo-by-repo several times and kept coming back; an audit across the whole line found it live in 18 of the 24 tools at once (87 call sites), so each tool now carries an invariant test that fails if any future CLI command prints a governed result without checking it.