Skip to content

chore(work-items): migrate open issues' status labels into the Work status field #13485

Closed

Description

@kyle-sexton

Refs #7577

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

Outcome

Every open issue in this repository holds its status in the Work status field, set from its labels. This follows the owner's B5 migration decision recorded on #7577: one cut-over, count first, dry run, recount.

Done when

  • Before the cut-over, a comment on work-items: work-item status as a field with labels as fallback #7577 gives the count of open issues by status label and the field value each will get.
  • A dry run lists every write it would make, and nothing is written.
  • After the cut-over, a recount shows every open issue's field matches the status its labels collapse to, with each issue listed.

Blocked by #13484: no migration until its first field-triggered run concludes success.

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: structural
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Medium
    Uncertainty: Knowable
    Flags: none
    Blocked by: #13484

    Understood: this is slice 4 of 5 of #7577. It sets every open issue's Work status field from the state its status labels collapse to. A dry run lists each write, then a recount lists each issue and confirms the match.

    Open items:

    No duplicates found. #13486 and #13483 are sibling slices, not duplicates.

    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: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.
    on Nov 5, 2026
  5. added
    status: needs-decisionAwaiting a human or maintainer judgment call.
    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 yet: blocker #13484 is not closed by a listed human or a merge.

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

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: the issue is at status: ready.

  8. 19 remaining items

  9. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Dry run (done-when 2), 2026-11-06 ~15:10Z, lane 2. The run wrote nothing: it used only read-only gh calls (the issue list, labels, issues/<n>/issue-field-values) against main c019f67. Writes it would make: 0 of 46.

    Count by label: #7577 (comment below this one in time).

    The planned driver called production mirrorIssue with writeStatus stubbed out. The session's permission classifier denied it, so this run collapses the labels by models.issue-status order in jq instead. It compares the field's value and does not check whether a trusted account set that value. sync-status checks that (sync-status.mjs mirrorIssue), and its 04:51Z full sweep found the same result with trust checked: swept 56: wrote 0, unchanged 56, failed 0 (run 42164881498).

    Per issue: number | status labels | collapses to | field | result
    2019|status: confirmed|confirmed|confirmed|match
    4281|status: confirmed|confirmed|confirmed|match
    5696|status: ready|ready|ready|match
    5940|status: confirmed|confirmed|confirmed|match
    6185|status: confirmed|confirmed|confirmed|match
    6634|status: confirmed|confirmed|confirmed|match
    6637|status: confirmed|confirmed|confirmed|match
    7296|status: confirmed|confirmed|confirmed|match
    7407|status: confirmed|confirmed|confirmed|match
    7555|status: ready|ready|ready|match
    7576|status: confirmed|confirmed|confirmed|match
    7577|status: confirmed|confirmed|confirmed|match
    7578|status: ready|ready|ready|match
    7580|status: ready|ready|ready|match
    8282|status: confirmed|confirmed|confirmed|match
    8481|status: confirmed|confirmed|confirmed|match
    8635|status: confirmed|confirmed|confirmed|match
    8651|status: confirmed|confirmed|confirmed|match
    8987|status: confirmed|confirmed|confirmed|match
    9179||needs-triage|needs-triage|match
    9711|status: confirmed|confirmed|confirmed|match
    9766|status: ready|ready|ready|match
    9867||needs-triage|needs-triage|match
    9868||needs-triage|needs-triage|match
    9922||needs-triage|needs-triage|match
    9923||needs-triage|needs-triage|match
    11042|status: confirmed|confirmed|confirmed|match
    11364|status: confirmed|confirmed|confirmed|match
    11393|status: ready,agent-ready|agent-ready|agent-ready|match
    12283|status: ready|ready|ready|match
    12292|status: confirmed|confirmed|confirmed|match
    12468|status: ready|ready|ready|match
    12469|status: ready|ready|ready|match
    12634|status: confirmed|confirmed|confirmed|match
    12737|status: confirmed|confirmed|confirmed|match
    12894|status: confirmed|confirmed|confirmed|match
    13073|status: confirmed|confirmed|confirmed|match
    13077|status: confirmed|confirmed|confirmed|match
    13484|status: confirmed|confirmed|confirmed|match
    13485|status: ready|ready|ready|match
    13486|status: confirmed|confirmed|confirmed|match
    13507|status: confirmed|confirmed|confirmed|match
    13710|status: needs-decision|needs-owner-decision|needs-owner-decision|match
    13711|status: confirmed|confirmed|confirmed|match
    13717|status: confirmed|confirmed|confirmed|match
    13724|status: needs-decision|needs-owner-decision|needs-owner-decision|match
    

    Next: the cut-over is the App's 04:47 UTC full sweep after #13484's first field-triggered run succeeds. The recount repeats this read after that sweep and after the hourly mirror resets #13484's field.

  10. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 6, 2026
  11. github-actions commented on Nov 6, 2026

    @github-actions
    Contributor
    No description provided.
  12. github-actions commented on Nov 6, 2026

    @github-actions
    Contributor

    already-leased: another session holds a live lease on #13485, so run https://github.com/melodic-software/claude-code-plugins/actions/runs/42241726835 ran no model.

  13. melodic-automation-lanes commented on Nov 6, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue run that agent-ready started ended over 3 hours ago with no report and no pull request. work-unblock removed and added agent-ready back to start a fresh run on main's workflow files. If this run ends the same way, it re-fires the issue again, waiting longer each time.

  14. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 6, 2026
  15. github-actions commented on Nov 6, 2026

    @github-actions
    Contributor
    No description provided.
  16. github-actions commented on Nov 6, 2026

    @github-actions
    Contributor

    already-leased: another session holds a live lease on #13485, so run https://github.com/melodic-software/claude-code-plugins/actions/runs/42270135507 ran no model.

  17. removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 6, 2026
  18. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    Recount (done-when 3), 2026-11-07 04:56Z, lane 2: 24 of 24 open issues match. For every open issue, the Work status field equals the state its status labels collapse to.

    • The cut-over: the lanes App's scheduled full sweep at 04:51Z logged swept 24: wrote 0, unchanged 24, failed 0 (49 calls) (run 42340217825).
    • How the recount read state: only read-only gh calls: the open-issue list, each issue's labels, and issues/<n>/issue-field-values for field 48484079. It wrote nothing.
    • Collapse rule: labels collapse by models.issue-status labels and order in docs/conventions/pr-pipeline.yaml at main ff580d7. An issue with no status label collapses to needs-triage.
    • Not checked: as in the dry run, this compares values only. It does not check who set them.
    Per issue: number | status labels | collapses to | field | result
    5696|status: ready|ready|ready|match
    6185|status: confirmed|confirmed|confirmed|match
    7407|status: confirmed|confirmed|confirmed|match
    7555|status: ready|ready|ready|match
    7577|status: confirmed|confirmed|confirmed|match
    7580|status: ready|ready|ready|match
    8635|status: confirmed|confirmed|confirmed|match
    8651|status: confirmed|confirmed|confirmed|match
    9179||needs-triage|needs-triage|match
    9711|status: confirmed|confirmed|confirmed|match
    9867||needs-triage|needs-triage|match
    9868||needs-triage|needs-triage|match
    9922||needs-triage|needs-triage|match
    9923||needs-triage|needs-triage|match
    11364|status: confirmed|confirmed|confirmed|match
    12469|status: ready|ready|ready|match
    12894|status: confirmed|confirmed|confirmed|match
    13485|status: ready|ready|ready|match
    13486|status: confirmed|confirmed|confirmed|match
    13710|status: confirmed|confirmed|confirmed|match
    13717|status: confirmed|confirmed|confirmed|match
    13724|status: confirmed|confirmed|confirmed|match
    13819|status: confirmed|confirmed|confirmed|match
    13847|status: needs-decision|needs-owner-decision|needs-owner-decision|match
    

    Note on closed issues. The sweep lists open issues only, so a closed issue keeps its last field value. Closed #13484 still reads agent-ready, the value of its field-triggered test. That is outside this issue's done-when, which covers open issues. #13486's S3 label strip and S4 are where closed-issue values would matter, if anything reads them.

    Closing as completed. #13486 S2 was waiting on this recount and can now land.

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

ready

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions