Skip to content

work-items: work-item status as a field with labels as fallback #7577

Open
2 of 2 issues completed
Open

Description

@kyle-sexton

Parent

Refs #7555. Source: PLAN Phase 10, topic poteto-review. Thread: Work-item status (fields versus
labels).

Depends on

Outcome

A work item's status lives in one single-valued field when the tracker offers one (the org field
Work status here), with labels as the fallback, detected by the tracker adapter; lanes trigger on
the field change.

Decisions

  • Status set needs-triage, needs-reporter-info, needs-owner-decision, needs-spec,
    agent-ready; Issue Type field, never a type label (D76, Q505). Origin: ours, owner-decided.
  • A single-valued attribute (status) is a field when the tracker offers fields (native first, else a
    created org field); labels where a label fits better (multi-valued tags) and as the fallback
    (user-owned repos, no field access); the adapter detects field availability; prefer the field
    trigger when both work (Q563).
  • Setting: role labels remap for status and pair labels, names per D76, D94 (repo).
  • Q563 probe result (owner sitting, GUIDE 123): GitHub reserves the name status, so the field is
    Work status (single-select, visibility all, the five options above); writes through the
    issue-field-values API succeeded; the Issue events API keeps no value history, so the lane
    triggers on Actions issues: field_added with changes.issue_field_value.from, checked live on
    the first trigger run.
  • Migration (B5, owner): one cut-over, scoped to the open agent-ready issues in this repository,
    count first, dry run, recount; dual-write only if a label reader cannot move in the slice; move
    work-resolve-issue.yml's trigger in the same slice.
  • Rejected: Projects v2 Status (per project, no Actions trigger); Issue Types and state_reason (do
    not model status).

Key interfaces

From the design's contracts, "Pipeline and verdict": "Statuses: needs-triage,
needs-reporter-info, needs-owner-decision, needs-spec, agent-ready; Issue Type field, never a
type label. Status is a field when the tracker offers one (adapter detects), labels as fallback."
"Tracker adapter": "Contract and conformance tests in the work-items tracker contract;
schema_version covers versions."

Variation verdicts: "Work-item status storage: abstract now; tracker adapter; field where offered,
labels as fallback (Q563)."

Slices, filed when this phase starts: status-field-adapter, status-migration.

Done when

  • The tracker test suite and the conformance suite pass for github and local-markdown with
    field detection.
  • After migration, 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.
  • The first field_added trigger run logs a non-empty changes.issue_field_value.from and
    concludes success.

Out of scope

  • Creating or changing org-level issue fields (owner stop).
  • Status writes from decompose and track add before this thread lands.

Activity

  1. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 16, 2026
  2. github-actions commented on Oct 16, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: structural
    Basis: automated intake triage; the lanes App applied this class.

    Size: Large
    Complexity: High
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    Understood: move work-item status into the single-select Work status issue field when the tracker offers one, keep labels as the fallback, detect which applies in the tracker adapter, and move lane triggers to the field change. The decisions, migration plan and done-when items are already specific, so I see no open intent question. The issue names two slices (status-field-adapter, status-migration), so it needs splitting. #7571 is listed as a dependency but I couldn't find it among the open issues I was given, so I recorded no blocker. The last done-when item (the first live field_added run) can only be checked after the trigger moves. I found no likely duplicates.

    Automated triage, applied by the lanes App.

  3. changed the issue type fromtoon Oct 16, 2026
  4. changed the issue type fromtoon Oct 16, 2026
  5. removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 24, 2026
  6. 15 remaining items

  7. added
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    on Nov 1, 2026
  8. github-actions commented on Nov 1, 2026

    @github-actions
    Contributor
    No description provided.
  9. melodic-automation-lanes commented on Nov 1, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped on this issue (split-required): the issue's Size is too large for one run, and intake's split (owner Q93) files its sub-issues.
    Its Size is too large for one run: intake splits it into sub-issues (owner Q93).
    It removed agent-ready and status: ready, so the hourly triage sweep sends it back through intake triage, and it waits on no decision from a person.

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41293757261

  10. removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 1, 2026
  11. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Cordoned: deferred lane redesign. Issue Triage session (agent), with the Automation Lanes session's routing; not an owner decision.

    Every sub-issue here is closed completed (#7600 and #11123 delivered field detection), but two done-when items remain unmet on origin/main:

    1. Open agent-ready issues move to the Work status field, so no agent-ready labels remain.
    2. The issue lane starts from an issue-field trigger, and its first run is recorded. No workflow on main uses such a trigger today; lane runs still start from the agent-ready label.

    This stays open under the After zero milestone rather than closing, because the work has value. Automation Lanes deferred it for three reasons:

    • Rewiring what starts every issue lane during the current maximum-throughput phase risks stalling all lanes, with no throughput gain.
    • Whether GitHub Actions offers an issue-field-changed workflow trigger at all is unverified; that needs a docs check before any build.
    • Migrating open issues off the label while lanes still dispatch on it would break that dispatch.

    When work resumes after zero: confirm the trigger exists in the GitHub Actions docs, then build the trigger change and the migration together.

  12. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    on Nov 1, 2026
  13. added this to the After zero milestone on Nov 1, 2026
  14. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Status note. Issue Triage session (agent).

    The deferral recorded above has ended. The owner's decision, relayed verbatim by the GitHub Support session on 2026-11-01: "Go with recommendations, whatever is native." That makes the org issue field Work status the single source of truth for issue state, with labels kept for pull requests. That is this issue's remaining work. The Automation Lanes session is building it as a staged cutover: align the field's options, dual-write, move readers over with a label fallback, then drop the issue status labels.

    This leaves the After zero milestone. It stays status: confirmed as builder work: the lane trigger change is a workflow edit, which the issue lane does not make.

  15. removed this from the After zero milestone on Nov 1, 2026
  16. added
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    and removed
    needs-specNeeds a Brief or plan before anyone can build it.
    on Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.

    Fields

    Work status

    needs-spec

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions