Skip to content

chore(pr-pipeline): retire issue status labels after the Work status cutover #13486

Closed

Description

@kyle-sexton

Refs #7577

Slice 5 of 5 of #7577: label to Work status field cutover.

Outcome

Issue status lives only in the Work status field. Issue status labels are no longer written or read, and the lane starts only on the field trigger. Labels stay for pull requests.

Decisions

Done when

  • gh issue list --label agent-ready --state open --json number --jq length returns 0, and the migration comment lists the same issues with field value agent-ready (work-items: work-item status as a field with labels as fallback #7577 done-when 2).
  • work-resolve-issue.yml no longer triggers on labeled for agent-ready. It starts on a Work status agent-ready field event from a listed human or from the lanes App (Q1, option (a)), and the App's restarts are field writes.
  • No .github or plugin code writes a queue-state issue status label (status: ready, status: confirmed, needs-triage, agent-ready). Hold labels stay as holds on top of the field, and removing a hold label when its hold lifts is out of scope (owner Q13 (a), 2026-11-07).

Blocked by #13485: labels come off only after the migration recount.

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: none

    Size: Medium
    Complexity: Medium
    Uncertainty: Known
    Flags: none
    Blocked by: #13485

    I understood this as the last slice of #7577: move issue status fully to the Work status field. That means no queue-state label writes, and the lane starts on the agent-ready field event instead of the label.

    The newest recorded decision is:

    Decision recorded.
    Owner, 2026-11-07 in the hub session, answering "Q13: does done-when 3 cover hold labels like status: needs-decision and status: needs-info?" with option (a), verbatim: "go with recommendations".

    Done-when 3 covers the queue-state status labels only (status: ready, status: confirmed, needs-triage, agent-ready). Hold labels stay as holds on top of the Work status field, as the merged reader keeps them (.github/actions/resolve-config/read-status.mjs:3, :36-53). Code that removes a hold label when its hold lifts (intake-triage refine.mjs, intake-reenter reenter.mjs:414) stays, because without it a held issue never releases. Moving holds to the field only is hardening-pass work.

    • No .github or plugin code writes a queue-state issue status label (status: ready, status: confirmed, needs-triage, agent-ready); hold-label lifts are out of scope.

    Posted by the github-support hub session on the owner's answer. This was generated by AI.

    #13486 (comment) is not the decision above. The decision comment is by kyle-sexton on this issue.

    That decision settles the open scope questions. No duplicates found. The first done-when item, the label count, needs a host run and waits on #13485.

    Automated triage. A maintainer reviews it.

  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: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.
    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; it carries host-run. 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. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Before the status labels retire, the lanes App needs a field path into work-resolve-issue, and that path needs a token broker change first. That change is the owner's security call.

    • feat(pr-pipeline): start the issue lane on the Work status field_added trigger beside the label #13484 starts work-resolve-issue on issues: field_added for listed human senders only (hub decision H72, option a). The App's Work status writes start nothing.
    • For App mints, the broker's issue lane admits only the App's own agent-ready labeled event. melodic-software/azure-iac authorize.mjs:176-186 states the invariant that the caller runs only on that event.
    • Once labels retire, the App can no longer start runs through a label. authorize.mjs would then have to admit an App field_added event that sets Work status to agent-ready. Changing that invariant loosens a security control, which is the owner's decision. No lane makes it.

    Raised by lane 2 while building #13484.

  9. 49 remaining items

  10. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded.
    Owner, 2026-11-07 in the hub session, answering "Q13: does done-when 3 cover hold labels like status: needs-decision and status: needs-info?" with option (a), verbatim: "go with recommendations".

    Done-when 3 covers the queue-state status labels only (status: ready, status: confirmed, needs-triage, agent-ready). Hold labels stay as holds on top of the Work status field, as the merged reader keeps them (.github/actions/resolve-config/read-status.mjs:3, :36-53). Code that removes a hold label when its hold lifts (intake-triage refine.mjs, intake-reenter reenter.mjs:414) stays, because without it a held issue never releases. Moving holds to the field only is hardening-pass work.

    • No .github or plugin code writes a queue-state issue status label (status: ready, status: confirmed, needs-triage, agent-ready); hold-label lifts are out of scope.

    Posted by the github-support hub session on the owner's answer. This was generated by AI.

  11. github-actions commented on Nov 7, 2026

    @github-actions
    Contributor

    The triage sweep dispatched intake triage for this issue (dispatch 1; 2 runs that reach intake, or 6 dispatches, hand it to a maintainer).

  12. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    Done-when graded on main 1151ade253 (2026-11-07 20:3xZ). All three met; closing.

    1. Met. gh issue list --label agent-ready --state open --json number --jq length returns 0. The migration record on work-items: work-item status as a field with labels as fallback #7577 (issuecomment-6711985883) says none moved. The one issue at S4 start, fix(skills): keep an unsubstituted ${user_config.medium} out of the view resolver command #13955, had field value agent-ready and closed through its own lane PR.

    2. Met.

    3. Met for this repository, which configures the field. A grep of .github and plugins on main finds no code path that writes status: ready, status: confirmed, needs-triage or agent-ready while a Work status field is configured. The PRs:

      What remains, by design:

      • Hold-label lifts (refine.mjs:799,890 and reenter.mjs:414), out of scope per owner Q13 (a) (issuecomment-6712509164).
      • The source-control plugin's fallback for repositories with no Work status field (babysit_verify_evidence.py:5468-5515 and babysit_postmerge.py:4038), which runs only when issue_status/status is unset. The plugin serves repositories and trackers without this field, and this issue's plan left plugin scope to be decided separately (issuecomment-6690412281).

    The text freeze keeps its strength. Runs anchor on a hashed lanes-App admission record, or on a listed human's own field set. readEditsSince still decides first. poteto's independent security review passed (#13998 issuecomment-6711104275).

  13. removed
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Nov 7, 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: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.

Type

Fields

Work status

confirmed

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions