Skip to content

ci(codex-review): stop requiring the VERDICT trailer — the model omits it - #134

Merged
topcoder1 merged 1 commit into
mainfrom
fix/codex-verdict-trailer-optional
Jul 28, 2026
Merged

ci(codex-review): stop requiring the VERDICT trailer — the model omits it#134
topcoder1 merged 1 commit into
mainfrom
fix/codex-verdict-trailer-optional

Conversation

@topcoder1

Copy link
Copy Markdown
Owner

#133 made the VERDICT: trailer mandatory. It failed the first real PR it ran on.

The evidence

topcoder1/domain-rank#82, run 30330151877, 2026-07-28T04:57Z. The prompt asking for the trailer is verifiably in that run's log:

Then END YOUR RESPONSE with a final line that is EXACTLY one of:
  VERDICT: CLEAN

gpt-5.6-sol at reasoning=low answered:

No regressions found in the requested coverage, state-mutation, or contract-drift axes.

No trailer. The gate logged Verdict: state=no_verdict; enforcing=true and reddened a clean PR.

Compliance with a free-text output contract cannot be assumed. That is now measured rather than argued — and it is the second time this gate has been corrected by real data instead of reasoning.

What fails now

Only signals that have actually proven reliable:

Everything else passes, with a ::warning:: when the trailer is absent, so report-only callers make the fleet-wide compliance rate visible. That warning is what would justify requiring the trailer later, if compliance turns out to be high on other models.

The prompt still asks for the trailer and it is still read from the final line when present. It is a bonus signal now, not a gate.

The accepted risk, stated plainly

A finding phrased in neither form is missed. I am not going to pretend otherwise, and the selftest asserts it by name (off-format finding is missed (accepted risk)) rather than quietly dropping the case.

Every rule that caught that case also failed clean PRs, because the two are indistinguishable without reading English — "The new fallback branch has no test." and "Looks good to me." are both trailer-less prose. Blocking correct work is what gets a gate switched off, and then nothing is reviewed at all. A miss still reaches a human through the review comment.

This is the honest trade, and #82 is the reason it is made in this direction.

Verification

  • 36 selftest assertions executing the real script. The chore(deps): bump actions/setup-python from 5 to 6 #82 verdict is replayed verbatim as the anchor case.
  • Full suite 45 passed; actionlint, shellcheck, prettier clean.
  • Mutation-tested: findings-ignored → 8 failures, REGRESSION-trailer-ignored → 1, no_verdict-opened → 5. Restored byte-identical.

Codex rounds: 2

Auto-merge rationale: manual merge — PRs to ci-workflows are always manual merge, and this touches .github/workflows/** on a reusable consumed by 27 repos via @main. Behavior is unchanged for every caller that does not set fail_on_regression: true; only domain-rank does, on an open PR.

🤖 Generated with Claude Code

…s it

#133 made the trailer mandatory. It failed the first real PR it ran on.

topcoder1/domain-rank#82, run 30330151877 at 2026-07-28T04:57Z. The prompt
asking for the trailer is in that run's log. gpt-5.6-sol at reasoning=low
answered:

  "No regressions found in the requested coverage, state-mutation, or
   contract-drift axes."

with no trailer. The gate logged `state=no_verdict; enforcing=true` and
reddened a clean PR. Compliance with a free-text output contract cannot be
assumed, and that is now measured rather than argued.

The failure signals are the ones that have actually proven reliable:

  - a `regression:` line. Three for three on real findings (#74, #79, #82).
  - an explicit `VERDICT: REGRESSION` trailer, when the model complies.
  - no output at all: empty, whitespace-only, missing file, or the
    workflow's own no-parseable-verdict sentinel. A review that did not
    happen must never read as "nothing found".

Everything else passes, with a `::warning::` when the trailer is missing so
report-only callers make the fleet-wide compliance rate visible — which is
what would justify requiring it later.

The prompt still asks for the trailer, and it is still read from the final
line when present. It is a bonus signal now, not a gate.

ACCEPTED AND ASSERTED: a finding phrased in neither form is missed. Every
rule that caught that case also failed clean PRs, because the two are
indistinguishable without reading English — "The new fallback branch has no
test." and "Looks good to me." are both trailer-less prose. Blocking correct
work is what gets a gate switched off, and then nothing is reviewed at all;
a miss still reaches a human through the review comment. The selftest names
these cases as known misses rather than quietly dropping them.

Codex rounds: 2

Refs: topcoder1/domain-rank#80

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@cursor

cursor Bot commented Jul 28, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actions github-actions Bot added the risk:blocked Risk class: blocked label Jul 28, 2026
@github-actions

Copy link
Copy Markdown

Risk class: blocked — manual merge required.

This PR touches one of the blocked path categories from .github/risk-paths.yml (Dockerfiles, docker-compose, .github/workflows/**, **/.env*, **/secrets*, infra/, terraform/, k8s/, or the classifier config itself).

Auto-merge is refused by claude-author-automerge.yml. A maintainer should review the diff and click "Squash and merge" themselves.

(This is a policy notice, not a code-quality failure. The classify job itself does not fail — required CI checks remain authoritative for "is the code green.")

@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown

Coverage Floor — mode: enforce

metric value
measured 100.0%
floor (current) 99.0%
target 100.0%
last bumped 2026-05-12

@claude

claude Bot commented Jul 28, 2026

Copy link
Copy Markdown

No issues found. The trailer→bonus-signal change is sound: sentinel and empty/missing-file cases still route to no_verdict (fail-closed), findings still outrank a CLEAN trailer, and the new clean-fallthrough behavior is the deliberate, well-tested point of the PR. Default report-only callers keep exit 0.

@topcoder1
topcoder1 merged commit f144222 into main Jul 28, 2026
15 of 16 checks passed
@topcoder1
topcoder1 deleted the fix/codex-verdict-trailer-optional branch July 28, 2026 05:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:blocked Risk class: blocked

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant