Repository navigation
feat(pr-pipeline): route lane models by role, falling back to opus - #8722
Conversation
A models profile may now name a multi-agent role (role, workload, effort-role) in place of a model. resolve-config reads the base's plugins/multi-agent/reference/defaults.yaml and resolves the role's model and effort from it. inherit, a missing role map or role, and any value that is not an alias (default, a model ID) run on opus. The schema refuses model and effort keys on a role profile, so a role route can never carry default or a model ID. fix-ci routes to code-fix: a worker on code at the verifier's effort, 75 turns. resolve.mjs gains no import, and the role sits on a profile, not the route, so the broker's pinned loadConfig still accepts the config. New resolve-config output applied-by-patch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015WJUza2M1rzSUKQrtdWrXw
A role whose model resolves to fable or best now runs on opus, like any other value outside the routed aliases, so CI never picks Fable on its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015WJUza2M1rzSUKQrtdWrXw
A role map that parses but cannot convert (a YAML alias, which the reader refuses) no longer throws out of resolve and fails every slot of the lane; role routes fall back to opus as with no role map. The live route test now requires one of haiku, sonnet or opus. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015WJUza2M1rzSUKQrtdWrXw
…l-routes # Conflicts: # docs/conventions/pr-pipeline.yaml
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-security-review reviewed Security review: PR #8722 at 3ffd62cFindings: 0. No security issues found. Role profiles resolve their model and effort from
Manifest items: the diff touches no Instruction-surface deletions: none. The README and YAML comment edits only add text or reword it without softening any rule. I did not read the instruction exception register, because no standing instruction was deleted or narrowed. |
|
claude-review reviewed Code review: #8722 at 3ffd62cFindings: 0. No inline comments were posted. I did not run the test suite, so the PR's "483 of 483 pass" and "0 grant differences" are author-claimed and unverified by me. Closing issue: the PR says "No related issue", so there are no acceptance criteria to check. Rules and manifests: no What I checked:
Latent risk (not a finding): the sparse-checkout callers ( Merge hold: the PR body says the merge waits for Phase 5b ( |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No related issue: Phase 5a of the lane-funding write-lane plan (model routing that fix-ci needs before it moves to run-claude-cli).
Broker pin: melodic-software/azure-iac#69
Hold: the merge waits for Phase 5b (fix-ci onto run-claude-cli), so both land back to back. On its own, this change moves fix-ci to opus at high effort on the subscription.
Summary
Lanes get their model from a role instead of a fixed model id. A profile names a
role, aworkloadand aneffort-role. resolve-config resolves them throughplugins/multi-agent/reference/defaults.yamlon the base. A route never resolves to an empty model,default,inherit, a model id or the frontier tier.code-fixprofile: roleworker, workloadcode, effort-roleverifier, max-turns 75.models.routes.fix-ci: code-fix. The route stays a plain profile name, which the token broker's pinned reader requires.inherit, an absent or unreadable role map, and any role that resolves outsidehaiku,sonnetoropusall fall back toopus.applied-by-patchoutput. It is written only when the selected activity setsapplied-by.patch.Fix
.github/actions/resolve-config/resolve.mjs: role-profile resolution (roleMapOf,roleModels,ROUTED_ALIASES,FALLBACK_MODEL). It adds no import..github/actions/resolve-config/resolve-config.mjs,action.yml: theapplied-by-patchoutput.docs/conventions/pr-pipeline.yaml: thecode-fixprofile and thefix-ciroute.docs/conventions/pr-pipeline/pr-pipeline.schema.json: role profiles take nomodeloreffort..github/actions/resolve-config/models.test.mjs: 26 new tests..changes/pr-pipelinefragment.Verification
node --test --test-concurrency=1 '.github/actions/resolve-config/**/*.test.mjs': 483 of 483 pass.uv run --with pyyaml bash scripts/check-affected.sh --tests: exit 0.--model opus --max-turns 75 --effort high, or to--model opus --max-turns 75when the base has no role map. Every other slot and run route is unchanged.Related
🤖 Generated with Claude Code
https://claude.ai/code/session_015WJUza2M1rzSUKQrtdWrXw