Skip to content

feat(work-items): setup writes the binding to the convention home and migrates the JSON file #11879

Description

@kyle-sexton

Problem

/work-items:setup apply writes .work-item-tracker.json and its gitignored overlay.

Origin: Q534, Q551; ADR 0075 fix 11.

Fix

Setup writes the binding into <home>/work-items.yaml and the overlay into
<home>/work-items.local.yaml. When it finds the old JSON files, it copies their keys over, announces
it, and leaves the JSON files in place: babysit-prs, autonomy resolve-prerequisites and the work,
triage, attend-queue and track preflights still read only the JSON file. Removing it is the held
#7578 slice that removes the old file (K25 in the split), after the reader migrations land.
check reports a repository whose binding exists only in the JSON file.

Done when

  • The setup skill and its check and overlay references name the new files; no setup text tells a user to write .work-item-tracker.json.
  • A test migrates a fixture JSON binding plus overlay to YAML and leaves the JSON files unchanged; it passes under scripts/run-test-file.sh.
  • bash plugins/skill-quality/scripts/check-skill.sh plugins/work-items/skills exits 0 and bash scripts/check-changelog-fragments.sh passes with a work-items fragment.

Parent: #7578

Activity

  1. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 1, 2026
  2. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 1, 2026
  3. github-actions commented on Nov 1, 2026

    @github-actions
    Contributor
    No description provided.
  4. github-actions commented on Nov 1, 2026

    @github-actions
    Contributor
    No description provided.
  5. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 1, 2026
  6. melodic-automation-lanes commented on Nov 1, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped partway through this issue and needs a person.

    Reason: security

    Why, in the run's own words:

    security-risk: deleting .work-item-tracker.json, as this issue's done-when requires, weakens the babysit-prs autonomous merge hold until readers outside setup move to <home>/work-items.yaml. babysit_merge.human_gated_label (plugins/source-control/skills/babysit-prs/scripts/babysit_merge.py:254, via babysit_postmerge._role_label) reads the human-gated label only from .work-item-tracker.json, and when the file is missing it uses the default needs-human. A consumer that remaps human-gated in config.role_labels would lose that merge hold once setup migrates and removes the JSON. babysit_merge_policy.admission_label (line 2319) reads the same file. The removal also breaks functional readers: the work, triage and attend-queue binding preflights (work/SKILL.md:237 and :285, triage/SKILL.md:157, attend-queue/SKILL.md:155, track/SKILL.md:29 and the due, recheck and audit actions) check only .work-item-tracker.json, so a migrated repo would look unbound. plugins/autonomy/skills/setup/scripts/resolve-prerequisites.mjs:209 would report the tracker binding missing. A person needs to decide the order: land the reader migrations (other slices under #7578?) before this one, or have this slice keep the JSON file, or refuse to remove it while config.role_labels is set, until they land.

    What the run says it did not do:

    • Removal of the legacy JSON is unsafe to ship until babysit-prs (babysit_merge.py, babysit_merge_policy.py, babysit_postmerge.py), autonomy resolve-prerequisites.mjs and the work, triage, attend-queue and track skills' binding and role-label preflights read <home>/work-items.yaml. Those readers
    • migrate-binding.test.sh was not executed: this lane allows no interpreter or test runner, so 'passes under scripts/run-test-file.sh' is left to the PR's CI. The subagent review traced every assertion by reading.
    • bash plugins/skill-quality/scripts/check-skill.sh plugins/work-items/skills was not run directly: no wrapper exists for it here. check-affected skipped its changed-skills step ('runs the checked tree's own skill-quality code'), so it is left to the PR's CI.
    • tidy: skipped because the change exceeds the 300-changed-line cutoff (225 tracked lines plus three new files).
    • Stale .work-item-tracker.json mentions remain outside the setup skill: reference/label-taxonomy.md:29, tracker-seam.md:167, seeds/gitea/README.md:15, seeds/linear/README.md:15, README.md, and the reader skills listed in the reason. These belong with the reader migration.
    • The working tree also shows untracked .bash_profile, .bashrc, .gitconfig, .idea, .mcp.json, .profile, .ripgreprc, .vscode, .zprofile and .zshrc at the checkout root. This run did not create them (they look like sandbox artifacts), and they are not part of this change.
    • Build and test step (verify) not run beyond the lint checks above, for the same no-interpreter reason.

    Partial work is on the branch work-resolve-issue/issue-11879-41313108155-1. A retry continues from it while it is not behind the default branch, and otherwise starts fresh from the default branch; delete the branch first to always start fresh.

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

    To retry, remove needs-human and add agent-ready again.

  7. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Re-scoped after the lane stop on run 41313108155: setup now copies the JSON binding to YAML and keeps .work-item-tracker.json, because babysit-prs, resolve-prerequisites and the work, triage, attend-queue and track preflights still read only the JSON file. Removing the JSON is the held #7578 slice that removes the old file, after the reader migrations. The stop was an ordering question inside the parent's split, not a secret, account or billing risk, so it goes back to the lanes.

  8. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Nov 1, 2026
  9. github-actions commented on Nov 1, 2026

    @github-actions
    Contributor
    No description provided.
  10. github-actions commented on Nov 1, 2026

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

    @melodic-automation-lanes
    Contributor

    This run started fresh from the default branch instead of resuming work-resolve-issue/issue-11879-41313108155-1, which is behind it. That branch keeps the earlier run's commits until the next run on this issue deletes it, when no pull request uses it.

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

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions