Skip to content

fix(odd-status): recompute the verdict with the package's own script on the checkout instead of reading it from the model's answer - #52

Merged
using-system merged 1 commit into
mainfrom
fix/odd-status-bind-verdict
Sep 19, 2026
Merged

using-system merged 1 commit into
mainfrom
fix/odd-status-bind-verdict

Conversation

@using-system

Copy link
Copy Markdown
Owner

What

The gate is bound to the package's computation. The run's JSON block gains a flags array (the flags it passed to odd_status.py --render); the verdict step runs the script the setup deployed (get-status/scripts/odd_status.py under the CLI's skills directory) again on the checkout and takes status and todo from that rendering, never from a line of the model's answer. What the run reports bounds the recomputation this far and no further:

  • the scope (--service, --stack, --env) is kept only where each value is a whole word of the prompt input; an empty prompt takes no scope; a scope that matches no stored report (the script's own matched count) is refused;
  • the run's rulings (--ruled, --runtime, --non-runtime) are its own judgment and are dropped; the log and the summary say how many;
  • anything else (--repo, --repository, --today, ...) is refused; --render, --x v and --x=v inside one string are normalised.

A refused flag or scope, a script not found or failing is an error and the step fails whatever fail-on says. The log and the step summary print recomputed with ... and say when the answer's own verdict line differs from the recomputed one; the summary carries the package's rendering. action.yml, odd-status/README.md and the root catalog say so; the README states the binding holds against text, not against a run's shell.

Why

Closes #44. The design and its three amendments (prompt-bounded scope, rulings out of the gate, fail closed on an empty match) are recorded on the issue.

How to test

221 tests off the runner (a fake package script under a temporary HOME; the regression case the issue asks for: the answer says ok, the memory renders error, exit 1). On the runner, tests/odd-status/test_runner.py gains a case asserting STATUS equals the verdict line of a fresh odd_status.py --render on the checkout, on the real package, in every odd-status cell. Also verified by hand against the installed package: --service <name> --full renders, --service the is refused.

Review

Review subagent: green after four rounds (the scope narrowing and the rulings, the substring bound, --full on the fact-sheet run). Security review: no findings after the same rounds.

🤖 Generated with Claude Code

…on the checkout instead of reading it from the model's answer

Closes #44

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@using-system
using-system merged commit e2b4032 into main Sep 19, 2026
16 checks passed
@using-system
using-system deleted the fix/odd-status-bind-verdict branch September 19, 2026 21:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(odd-status): the status output is the model's verdict line, not the package's computed verdict the docs describe

1 participant