You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(pr-pipeline): start the issue lane on the Work status field_added trigger beside the label #13484
Slice 3 of 5 of #7577: label to Work status field cutover.
Outcome
work-resolve-issue.yml also starts on issues: field_added when the Work status field becomes agent-ready, beside the existing labeled trigger. GitHub documents field_added as firing when a field value is set or updated (Events that trigger workflows, issues, read 2026-11-05).
Change
Add field_added to the workflow's issues types, and gate the jobs on the event's field-value change to agent-ready, so a run fires only on that transition.
Keep the labeled trigger. With both live, one issue can produce two runs, so the concurrency group must collapse them into one.
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Small
Complexity: Medium
Uncertainty: Knowable
Flags: none
Blocked by: none
I understood this as slice 3 of #7577. work-resolve-issue.yml would also start on issues: field_added when the Work status field becomes agent-ready. The existing labeled trigger stays, and the concurrency group collapses a label run and a field run for the same issue into one lane run. The scope and done-when items are exact, so I have no open questions. One done-when item, the first field_added run logging a non-empty changes.issue_field_value.from, can only be checked after the workflow change is live. The issue says it is blocked by #13483. That issue is not in the open-issues list I was given, so I could not confirm its state and list no blocker. I found no duplicate among the open issues.
Not admitted to the issue lane: its body or a criterion names .github/workflows/work-resolve-issue.yml, which the issue lane cannot push (patch-protected-path); a builder session takes it. Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).
The first field_added probe run has a payload (run 42228210010). It came from the lanes App's Work status mirror write on #13710, at 13:46Z.
Key
Value in that run
action
field_added
issue_field.id / .name / .field_type
48484079 / Work status / single_select
issue_field_value.option.id / .name
84879218 / needs-owner-decision
changes.issue_field_value.from.option.id / .name
86380002 / confirmed
sender.type / .id
Bot / 337595936 (the lanes App)
The option sits under option, not under single_select_option as in the REST field-values response. changes.issue_field_value.from is non-empty on an update. The trigger PR gates on issue_field.id, issue_field_value.option.id and sender.type == 'User'.
The trigger shipped in #13716, merged 2026-11-06T14:15Z (949f152). work-resolve-issue.yml on main has types: [labeled, field_added], and the probe workflow is deleted.
What a field change does now (hub decisions H72 and H73): when a listed person sets Work status to agent-ready, admit checks the sender, logs changes.issue_field_value.from, and stops green. The agent-ready label still starts the work. The lanes App's own field writes start nothing. Field writes stay out of the label's concurrency group, so none can replace a waiting label run.
Still open on this issue:
Done-when 1: a listed person sets an issue's Work status field to agent-ready. Any open issue works, since the run only logs and stops. The first such run must log a non-empty changes.issue_field_value.from and conclude success.
Done-when 2: one lane run per issue for a label plus a field change. A field run starts no work job, and the first live field run shows this.
Field-started work (the text-freeze and restart anchors) and the App's field path are owner calls on #13486.
Done. Both criteria are met on main 949f152 (#13716).
Done-when 1: the owner's login set Work status to agent-ready at 15:16:14Z. The first field_added run, run 42241474462, concluded success, and its "Log the Work status change" step logged a non-empty from: {"from":{"option":{"id":86380002,"name":"confirmed"}},"to":{"option":{"id":84879220,"name":"agent-ready"}}}.
Done-when 2: in that run only admit ran. pick-slot, resolve-issue and every later job were skipped, so a field change starts no lane run of its own and work starts only on the agent-ready label. Each issue therefore gets one lane run for a label plus a field change.
Remaining parity (field-started work, the App field path) is tracked on #13486. The hourly mirror resets this issue's field to confirmed from its labels.
Activity
github-actions commentedon Nov 5, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Small
Complexity: Medium
Uncertainty: Knowable
Flags: none
Blocked by: none
I understood this as slice 3 of #7577.
work-resolve-issue.ymlwould also start onissues: field_addedwhen the Work status field becomesagent-ready. The existinglabeledtrigger stays, and the concurrency group collapses a label run and a field run for the same issue into one lane run. The scope and done-when items are exact, so I have no open questions. One done-when item, the firstfield_addedrun logging a non-emptychanges.issue_field_value.from, can only be checked after the workflow change is live. The issue says it is blocked by #13483. That issue is not in the open-issues list I was given, so I could not confirm its state and list no blocker. I found no duplicate among the open issues.Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Nov 5, 2026
Not admitted to the issue lane: its body or a criterion names .github/workflows/work-resolve-issue.yml, which the issue lane cannot push (patch-protected-path); a builder session takes it. Admission takes the issue once each of those is met, when intake triages it again (
.github/actions/resolve-config/admission-rules.json).melodic-automation-lanes commentedon Nov 5, 2026
The latest triage verdict holds nothing: admission moved the issue to
status: confirmed; its comment says why.8 remaining items
kyle-sexton commentedon Nov 6, 2026
ci(pr-pipeline): take the field_added actionlint ignore from standards
fix(actionlint): admit the issues field_added activity type (#952)
kyle-sexton commentedon Nov 6, 2026
The first
field_addedprobe run has a payload (run 42228210010). It came from the lanes App's Work status mirror write on #13710, at 13:46Z.actionfield_addedissue_field.id/.name/.field_type48484079/Work status/single_selectissue_field_value.option.id/.name84879218/needs-owner-decisionchanges.issue_field_value.from.option.id/.name86380002/confirmedsender.type/.idBot/337595936(the lanes App)The option sits under
option, not undersingle_select_optionas in the REST field-values response.changes.issue_field_value.fromis non-empty on an update. The trigger PR gates onissue_field.id,issue_field_value.option.idandsender.type == 'User'.fix(lanes): keep field writes out of the agent-ready label's run group
kyle-sexton commentedon Nov 6, 2026
The trigger shipped in #13716, merged 2026-11-06T14:15Z (949f152).
work-resolve-issue.ymlon main hastypes: [labeled, field_added], and the probe workflow is deleted.What a field change does now (hub decisions H72 and H73): when a listed person sets Work status to
agent-ready, admit checks the sender, logschanges.issue_field_value.from, and stops green. Theagent-readylabel still starts the work. The lanes App's own field writes start nothing. Field writes stay out of the label's concurrency group, so none can replace a waiting label run.Still open on this issue:
agent-ready. Any open issue works, since the run only logs and stops. The first such run must log a non-emptychanges.issue_field_value.fromand concludesuccess.Field-started work (the text-freeze and restart anchors) and the App's field path are owner calls on #13486.
kyle-sexton commentedon Nov 6, 2026
Done. Both criteria are met on main 949f152 (#13716).
field_addedrun, run 42241474462, concludedsuccess, and its "Log the Work status change" step logged a non-emptyfrom:{"from":{"option":{"id":86380002,"name":"confirmed"}},"to":{"option":{"id":84879220,"name":"agent-ready"}}}.admitran.pick-slot,resolve-issueand every later job were skipped, so a field change starts no lane run of its own and work starts only on the agent-ready label. Each issue therefore gets one lane run for a label plus a field change.Remaining parity (field-started work, the App field path) is tracked on #13486. The hourly mirror resets this issue's field to
confirmedfrom its labels.