Conversation
fix: verify remote release promotion before success (#211)
…effort The local-agent review loop built one blanket EFFORT_FLAG=(--effort <level>) for every reviewer CLI. That flag is only valid for claude and grok: codex (0.149.1) has no --effort at any level -- not top-level, not on `review`, not on `exec` -- and exits 2 with "unexpected argument '--effort' found" before the review starts. Its reasoning effort is a config value, set via the top-level override -c model_reasoning_effort=<level>. agy (1.1.22) treats --effort as mutually exclusive with --model, and this loop always pins --model for agy. Every combination is rejected, at every level including ones agy itself offers. agy encodes effort as a model variant, so it is resolved by picking from the `agy models` roster at run time -- the roster and level names change between releases, so nothing is hardcoded. Either way the reviewer never ran, and its slot in the merge gate was filled by a launch failure rather than a verdict. The deeper fix is the dispatch shape: effort was assigned generically and then clobbered per agent, so the fallthrough for any CLI nobody wrote a branch for was --effort. That fallthrough is what broke both. It is now a case over REVIEW_AGENT that fails closed -- an unrecognized agent gets no flag and keeps prompt-advisory effort, because a wrong flag is not a weaker review, it is a non-zero exit. A new effort-carrier table replaces the same rule restated across six places.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Highlights
~effort=<level>now actually reaches codex and agy — before this, it silently killed them. Reasoning effort was passed to every reviewer as--effort <level>, a flag onlyclaudeandgrokaccept. codex and agy both reject it and exit non-zero before the review starts, so the reviewer's slot in the merge gate held a launch failure rather than a verdict.--effortgenerically then overrode it per agent, so any CLI without an explicit branch inherited the wrong flag — exactly how codex and agy broke. An unrecognized reviewer now gets no flag and keeps prompt-advisory effort./do:releaseverifies main actually reached release before reporting success, and recovers cleanly from interrupted runs.Reasoning-effort carriers
Verified against the installed CLIs, not inferred from
--help:codex --effort max …error: unexpected argument '--effort' foundagy --effort maxinvalid --effort "max" (valid: low, medium, high)agy --model "Gemini 3.5 Flash (High)" --effort low--effort is not supported for model …codex -c model_reasoning_effort=max … review --base mainreasoning effort: maxagy --model gemini-3.5-flash-lowlow-c model_reasoning_effort=<level>(config override; no--effortexists at any level).--effortas mutually exclusive with--model, which the loop always pins. Since the default model is itself an effort variant,agy~effort=failed 100% of the time at every level. Effort is a model variant there, resolved from theagy modelsroster at run time — nothing hardcoded, since the roster and level names change between releases.Release promotion (#211, #213)
/do:releaseconfirms the source branch actually promoted to the target on the remote rather than trusting an exit status; interrupted runs preserve state across retries and checkpoint handoff is idempotent.Test plan
npm test— 397 pass, 0 fail.reasoning effort: max, which the old form never reached.