Skip to content

feat(pr-pipeline): start the issue lane on the Work status field_added trigger beside the label #13484

Closed

Description

@kyle-sexton

Refs #7577

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.

Done when

Blocked by #13483: readers must trust the field before the field starts the lane. A workflow edit, so it goes to the Automation Lanes builder.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 5, 2026
  2. github-actions commented on Nov 5, 2026

    @github-actions
    Contributor

    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.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 5, 2026
  4. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 5, 2026
  5. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 5, 2026
  6. melodic-automation-lanes commented on Nov 5, 2026

    @melodic-automation-lanes
    Contributor

    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).

  7. melodic-automation-lanes commented on Nov 5, 2026

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: admission moved the issue to status: confirmed; its comment says why.

  8. 8 remaining items

  9. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 6, 2026
  10. self-assigned this
    on Nov 6, 2026
  11. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  12. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    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'.

  13. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    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.

  14. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    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.

  15. removed
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Nov 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

priority: mediumReal value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

Fields

Work status

agent-ready

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions