Skip to content

Harden the round cap and release 1.6.0 - #4

Merged
andreidavid merged 1 commit into
mainfrom
hardening-1.6.0
Jul 24, 2026
Merged

Harden the round cap and release 1.6.0#4
andreidavid merged 1 commit into
mainfrom
hardening-1.6.0

Conversation

@andreidavid

Copy link
Copy Markdown
Owner

Follow-up to #1 and #2 (thanks @martingtobias for both).

Round-counter staleness. The round counter introduced in #2 was only cleared on PASS or at the cap, so a saga abandoned mid-loop (interrupt, kill switch, manual fix outside a session) left the count behind in .git, and unrelated FAILs later resumed from it — tripping the cap prematurely and demoting fresh findings to advisory. The counter is now stamped with the epoch of the last FAIL (<count> <epoch>); a stamp older than an hour, a bare pre-stamp count, or a stamp from the future (clock stepped backward, e.g. a restored VM snapshot) all read as a fresh saga.

capped in history. A FAIL demoted to advisory at the round cap now logs "capped": true, so history consumers can tell it apart from a FAIL that actually blocked. The cap message also reports the real round number instead of assuming it equals the cap.

Docs and release. README documents CODEX_REVIEW_MAX_ROUNDS, the session-scoped fix loop, the round-count state file and its staleness rule, and a cost section stating the real per-saga bound; CHANGELOG gets a 1.6.0 section crediting both contributed PRs; version bumped in both manifests.

Tests: 63/63 (three new staleness cases — expired stamp, legacy bare count, future stamp), shellcheck clean, claude plugin validate passing.

Dogfooding note: the future-stamp guard exists because this plugin's own post-commit review flagged the missing lower bound on the first version of this commit.

🤖 Generated with Claude Code

Round-counter staleness: the counter is now stamped with the epoch of
the last FAIL ("<count> <epoch>"); a stamp older than an hour -- or a
bare pre-stamp count, or a stamp from the future (clock stepped
backward) -- reads as a fresh saga. Without this, a count abandoned
mid-saga (interrupt, kill switch, manual fix outside a session) leaked
into unrelated future FAILs and tripped the cap early.

History entries gain "capped": true on a FAIL demoted to advisory at
the round cap, so it can be told apart from a FAIL that blocked. The
cap message reports the actual round number instead of assuming it
equals the cap.

README catches up with #1 and #2: CODEX_REVIEW_MAX_ROUNDS in the
config table, session-scoped fix loop, the round-count state file and
its staleness rule, and a cost section that states the real per-saga
bound. CHANGELOG for 1.6.0 credits both contributions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@andreidavid
andreidavid merged commit ad65cf2 into main Jul 24, 2026
2 checks passed
@martingtobias

martingtobias commented Jul 26, 2026 via email

Copy link
Copy Markdown
Contributor

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.

2 participants