Repository navigation
lanes: make the automation lanes reusable by any repository #7656
Description
No related issue: a new owner goal, recorded 2026-10-16. Refs #7555.
Goal (owner)
Every repository in the organization, and any public consumer, can opt into the same automation lanes this repository runs: issue to PR, unblocking items when a blocker closes, the PR pipeline, and merge. The lanes should be generic and configurable, with no copy per repository.
What exists today
melodic-software/ci-workflows(public) already ships reusable workflows for intake triage, the review lanes (pr-review,pr-review-security), checks, Dependabot auto-merge and the standards sync.- The lanes still local to this repository are
work-resolve-issue,work-unblock,pr-merge,pr-unblock/pr-refineandpr-run-activity-*. Their actions live under.github/actions/and.github/scripts/. They are already config-driven throughdocs/conventions/pr-pipeline.yaml. - Portability blockers:
- The lanes token broker (azure-iac) pins repository ids and exact caller workflow paths, and it requires the caller file to be byte-equal to the copy on
main. - Lane admission reads this repository's
.github/standards/trusted-actors/trusted-actors.json. - Some scripts assume this repository's layout.
- The lanes token broker (azure-iac) pins repository ids and exact caller workflow paths, and it requires the caller file to be byte-equal to the copy on
Outcome
A design, then slices, that move the lane workflows and actions into ci-workflows as reusable workflows driven by each consumer's own convention config. The broker must accept a consumer's caller without a broker code change for each repository, and a consumer must be able to adopt one lane at a time.
Not now
The owner asked that this not derail the current epic. Design starts after Phase 9 (verifier-gated merge) settles the merge lane's shape. Automation Lanes owns the lanes and the broker.
Activity
github-actions commentedon Oct 16, 2026
Proposed work class: work-class: structural
Basis: automated intake triage; the lanes App applied this class.
Size: Medium
Complexity: Medium
Uncertainty: Knowable
Flags: none
Blocked by: none
Understood: the goal is a design, then per-lane slices, that move the lanes into ci-workflows as reusable workflows that each consumer configures. The owner's decision settles the trust-model question.
That decision settles the open questions. The start condition also holds, since ADR 0082 is accepted.
Automated triage, applied by the lanes App.
kyle-sexton commentedon Oct 24, 2026
Released for re-triage under the owner's 2026-10-24 rule: an issue stops for a person only for an intent or vision question, a security call, a host or attended run, or spend outside prepaid credit. The hold label came off and intake triage runs again now; it re-applies a hold, with a numbered question, when one of those applies.
To hold this issue again, add
needs-human(orstatus: needs-decision) and say why in a comment.melodic-automation-lanes commentedon Oct 24, 2026
Not admitted to the issue lane: no trusted-human acceptance criteria: a listed human must put the confirmed
- [ ]criteria in the body or post them as their own comment, or, on an issue a listed human filed, intake's newest refinement comment must hold them unedited; Size large: the split into sub-issues at intake is pending (owner Q93). Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).10 remaining items
melodic-automation-lanes commentedon Oct 26, 2026
The work-resolve-issue lane stopped on its funding (
funding: no credit or a disabled key), not on this issue. It keepsagent-ready; once the lane is funded again, a person removes and addsagent-readyto restart it.Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40354698247
kyle-sexton commentedon Oct 26, 2026
Design for criterion 1: decisions taken on the evidence. The design is ADR 0085
(
docs/adr/0085-run-org-lanes-from-ci-workflows-under-one-lanes-app-with-central-grants.md, in thepull request that delivers criterion 1). The open questions the draft raised were decided as
recommended, under the owner's standing rule to decide on facts and loosen no security boundary:
repository's main, plus optional additions in its grant row. ADR 0049 Decision 1 already
requires one central list every lane reads.
central grant file. ci-workflows does not join the trust root.
BROKER_ALLOWED_REPOSITORY_IDSconstant, the central grant row, and the github-iac
LanesBrokerClientRepositoriesentry. Thethird exists because the broker denies a repository with no kill-switch variable
(azure-iac
kill-switch.mjs:51-54), and that variable comes from the github-iac entry(
OrgCiRouting.cs:91-98). A missing row denies; it never widens. The allowlist row is a codeconstant (azure-iac
BrokerConstants.cs:79), so each admission is still an azure-iac pullrequest and an owner-run deploy. Consumers do not join
trust-root: today it adds no effective rule over the organizationbaseruleset(github-iac
OrgRulesets.cs:79-105against:152-187).UNIVERSAL_REFUSEclass inpatch-rules, so no lane patch can change them. Every lane modelactivity is
effect: read, so lanes change files only through scripted patches.Corrected premise. The decision says the broker "keeps reading grants from this repository's
main (
authorize.mjs:6-8)". Those lines cover the resolve-config code only. The broker reads grantdata and trusted actors from the caller's own main (azure-iac
authorize.mjs:260-268,298, the latter throughreadTipFiles), andclaims.mjs:232-235requires the caller's own workflow. Central reading is anew one-time broker change, sliced as the azure-iac prerequisite, with a matching amendment to
github-iac ADR 0015 Decisions 2 and 5.
Slices to file under this issue: three prerequisites (the central grant file, the broker change,
the shared reusables and resolve-config move), then one per lane: work-unblock, intake-triage,
work-resolve-issue, pr-refine, pr-unblock, pr-merge.
melodic-automation-lanes commentedon Oct 28, 2026
The work-resolve-issue lane stopped partway through this issue and needs a person.
Why, in the run's own words:
What the run says it did not do:
Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40612270273
To retry, remove
needs-humanand addagent-readyagain.kyle-sexton commentedon Oct 29, 2026
Re-triage: decompose from ADR 0085's Migration section. The design is merged:
docs/adr/0085-run-org-lanes-from-ci-workflows-under-one-lanes-app-with-central-grants.md, accepted 2026-10-26. It covers criteria 1 to 4 of the owner's decision (#7656 (comment)). Criterion 5, filing the slices, is what remains, and it is tracker work, not a lane change. Nothing here goes to the owner. The owner already decided the trust model, and each admission deploy stays a step the owner runs, as ADR 0085 Decision 7 records.The Migration order is sequential. Steps 1 and 3 can start now, and Automation Lanes builds both under this issue (no child issues), because both change lane trust controls. Each later step is filed in the repository it changes once the steps before it close:
log-api-budgetoutput for this repository's lanes and pr-pipeline-sandbox's lanes, and post it here. A host session reads the run logs. This step gates only step 8..github/actions/resolve-config/, with rows that reproduce today's grants for this repository and pr-pipeline-sandbox. Add the grant file and the trusted-actor list to a newUNIVERSAL_REFUSEclass and to thepatch-rules.schema.jsonenum (Decision 6). Also correct ADR 0085's decision link, which points to the deleted duplicate (issuecomment-6418743610), to issuecomment-6418576234. Built now by Automation Lanes' builder, since it changes a lane trust control.request-lane-token,check-kill-switch, the trusted-trigger gate and resolve-config, with a token-source input. This fixes the layout assumptions in fix(source-control): review-venue.sh gives absent, stale and healthy for the same repository minutes apart #9086 and fix(source-control): review-venue misses review lanes that call pr-review-cli.yml #9601. Filed when 4 closes.work-unblock,intake-triage,work-resolve-issue,pr-refine,pr-unblock,pr-merge. Each one changes.github/workflowscallers, so it goes to the builder. Filed one at a time as the previous lane lands.This issue closes when step 8 lands.