Repository navigation
fix(ci): resolve the release lane's model through a lane slot and queue every run - #12736
Conversation
…ue every run Refs: #7407 The upstream-apply-changelog model job called resolve-config with `model-route: resolve-issue`, which resolve-config refuses: resolve-issue is a skill activity's route, not a run route, so every release run failed before the model. The lane now has an `apply-changelog` skill slot (harness-ops:changelog, effect read, route code-fix), and the job resolves it with `lane` + `activity`, as push-branches and publish do. Later steps also wait on its `applies` output, so disabling the slot stops the model. The workflow's concurrency group now sets `queue: max`, so a newer run no longer cancels a pending one and two dispatches in quick succession both run. callers.test.mjs runs resolve-config's own entry point over every resolve-config step of the workflow on schedule and workflow_dispatch; it fails on the old step with the live error. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01VcupojVgxFqBnrah9DwFLE
…ream-apply-changelog-route
…angelog-route # Conflicts: # .github/actions/resolve-config/lane-grants.json
…ream-apply-changelog-route
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-review reviewed Code review: no findingsI read every hunk of all 5 changed files. I also checked the resolver code the change depends on and the rest of What the change does
What I checked
Verification. The PR's test results (918/918 pass, and the resolved Closing issue. The PR only references #7407 ( Spend. With |
|
claude-security-review reviewed Security review: no findingsI read all 5 changed files in full. Nothing in this pull request widens a trust control or reaches a leak, a compromise or a charge. Controls checked
Not checked: the PR deletes no instruction text and changes no plugin manifest, so the instruction-surface and manifest checks did not apply. Usage, not a finding: PR description: no instructions aimed at this review. critical-findings: 0 |
Refs: #7407
Summary
The release intake lane (
upstream-apply-changelog.yml, from #12508) cannot process any release. Its model step calls resolve-config withmodel-route: resolve-issue, and resolve-config rejects that becauseresolve-issueis not one of its run routes (.github/actions/resolve-config/resolve.mjs:20). Every run that reached the model leg failed with "resolve-issueis not a run route": 41565429093, 41566462920, 41567290470.The workflow's concurrency also kept GitHub's default
queue: single, which cancels a pending run when a newer one queues. That breaks #7407's acceptance item "two releases in quick succession produce two queued runs, and neither run is cancelled" (workflow syntax,concurrency.queue).Fix
docs/conventions/pr-pipeline.yamlgets a new skill activity,apply-changelog(harness-ops:changelog,apply --ci,effect: read). It becomes the lane's first slot, routed to thecode-fixprofile thatresolve-issuepointed at. The model step resolves it in lane + activity mode, as push-branches and publish already do. NoRUN_ROUTESor broker change. The broker loadsresolve.mjsfrom this repository's main (azure-iac ADR 0002), so the old "pinned resolver" comment was stale and is replaced.lane-grants.jsonadds"apply-changelog": "read".lane-grants.test.mjsrequires every resolved slot to be listed. It is a read grant and no mint names it.steps.models.outputs.applies == 'true', soenabled: falseon the slot stops the model.concurrencyaddsqueue: max, aspr-feedback-dispatch.ymldoes. Queued schedule ticks stay cheap: each is a gate-only run of at most 11 REST calls that skips a done release, and the 24 h start cap (3) stops a retaken failed release before the model.Verification
callers.test.mjstest: it runs resolve-config's ownmain()over each resolve-config step's inputs onscheduleandworkflow_dispatch(any GitHub call throws), and asserts that the model step yields a model, effort and max-turns. It fails with the live error on the old step and passes on the new one.node --testover.github/actions/resolve-config/*.test.mjsandupstream-apply-changelog.test.mjs: 918/918 pass.scripts/check-affected.sh --base origin/main --no-fetch: 11 passed, 4 skipped. actionlint runs in CI only;queueis already used in this repository's workflows.{"profile":"code-fix","model":"opus","effort":"high","max-turns":75}.Related
.github/actions/resolve-config/, which may sit on the merge lane's risk floor.🤖 Generated with Claude Code
https://claude.ai/code/session_01VcupojVgxFqBnrah9DwFLE