Reconcile the three fail-closed point-of-use rules with the shared retry
directive, completing the class. ce-code-review, ce-doc-review, and ce-optimize
recorded a reviewer or experiment as failed on any non-capacity dispatch
failure, so a literal model could drop a required reviewer without attempting
the corrected call — the same layer disagreement this PR fixes for the four
sites that inline instead.
Relying on the directive outranking skill prose is what failed originally, and
the eval's middle arm showed a prose/directive disagreement producing the wrong
behavior. Reconciling is the coherent end state, not precedence.
An enumeration over all fifteen directive-carrying skills finds no further
sites: the remaining matches are ce-doc-review's cross-model route rule and
ce-optimize's judge independence gate, both different mechanisms.
Claude-Session: https://claude.ai/code/session_016qdsfbEGDYydomeEUCZ3NF
- Bound the correction by what the harness named rather than by argument
optionality. A rejected *required* field (a hyphenated persona label used as
a required task name, say) was uncorrectable under "only the rejected
optional arguments", so the agent could still spend the inline fallback and
lose the independent context this change exists to preserve. The semantic
invariant — prompt, scope, and required capabilities intact — is what bounds
the retry, not optionality.
- Pin the capacity exclusion in the emitted stdout too, closing the same
demote-into-a-comment hole the correctable-invocation pin already covers.
Claude-Session: https://claude.ai/code/session_016qdsfbEGDYydomeEUCZ3NF
- Exclude capacity/active-agent-limit rejections from the correction retry;
ten of the fifteen dispatch skills have no local backpressure prose, so the
shared directive was their only guard against a queued reviewer being
"corrected" and retried once instead of waiting for a slot.
- Restore the "because the call itself was malformed" qualifier that an earlier
tightening pass dropped, which is what let the pre-launch rule read as
covering any pre-launch rejection.
- Narrow the two remaining inline-on-dispatch-failure clauses to match:
ce-brainstorm's claim verifier and ce-ideate's post-ideation verifier.
- Pin the capacity exclusion in the parity test.
Claude-Session: https://claude.ai/code/session_016qdsfbEGDYydomeEUCZ3NF
A dispatch the harness rejects before any agent launches is a malformed
call, not a failed pass. The shared SUBAGENT_AUTHORIZATION directive drew
no such line: it told every dispatch skill to take the workflow's fallback
"rather than retrying". In Codex, where Multi-Agent V2 spawn_agent no
longer accepts a per-child model override, ce-simplify-code's three
reviewers collapsed into one inline pass over a single rejected argument.
Carve the pre-launch case out of the shared directive: correct or drop
only the rejected optional arguments, keep the prompt, scope, and required
capabilities intact, and retry once. Failures after launch are excluded,
and capacity backpressure is untouched. This narrows the repo's own
deviation from the upstream wording rather than widening it, and the
authorization assertion the directive exists for is byte-identical.
ce-simplify-code and ce-explain are the only skills that inline on a
non-capacity failure, so their local clauses are reconciled to match; the
rest fail the reviewer closed and need no change. Those two edits ship
together because an eval showed they are coupled: with the reconciled
prose but without the post-launch exclusion, Claude retried a post-launch
failure as an invocation error, which stock does not do.
Claude-Session: https://claude.ai/code/session_016qdsfbEGDYydomeEUCZ3NF