diff --git a/plugins/work-items/.claude-plugin/plugin.json b/plugins/work-items/.claude-plugin/plugin.json index 47a4327b6d..25cfba1785 100644 --- a/plugins/work-items/.claude-plugin/plugin.json +++ b/plugins/work-items/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "work-items", - "version": "0.21.0", + "version": "0.21.1", "description": "Manages development work items through a provider-neutral tracker seam that ships with the plugin (bundled dispatcher plus github and local-markdown adapters; seam plugin-dir canonical, adapters consumer-local-first): dashboard, taxonomy-labeled creation, a race-safe assignee-plus-lease claim protocol, recurring-schedule checks, TODO scanning, stale-lease auditing, plan decomposition into vertical-slice items, and raw-intake triage (issues and unsolicited PRs through raw, verified, briefed, autonomous-eligible states). The re-runnable setup skill binds the provider (.work-item-tracker.json), seeds the recurring-schedule seam (.github/recurring-schedule.json), and remaps canonical role labels.", "author": { "name": "Melodic Software", diff --git a/plugins/work-items/CHANGELOG.md b/plugins/work-items/CHANGELOG.md index b56af27155..348758612a 100644 --- a/plugins/work-items/CHANGELOG.md +++ b/plugins/work-items/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to the `work-items` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.21.1] + +### Fixed + +- **Triage SKILL state machine + attention view reconciled with live labels (`#817`).** The + attention view's bucket list named only `status:needs-triage`, leaving a repo that files raw + intake on the priority axis (`priority:needs-triage`, per `#802`'s dual-axis Scope wording) + invisible to the no-arg attention view; the bucket now names both axes. Separately, + `status:needs-decision` was already referenced by the closing invariant as a routing outcome + that clears the raw marker, but was never introduced as a side exit in the state machine itself + (unlike `needs-info`, human-gated, and close) — it is now documented alongside them in the + side-exits sentence and the state diagram. Doc-only; no routing logic changed. + ## [0.21.0] ### Added diff --git a/plugins/work-items/skills/triage/SKILL.md b/plugins/work-items/skills/triage/SKILL.md index b3be191807..f2351cd553 100644 --- a/plugins/work-items/skills/triage/SKILL.md +++ b/plugins/work-items/skills/triage/SKILL.md @@ -50,7 +50,7 @@ State names follow the plugin's vocabulary and the canonical roles ([`${CLAUDE_P | **briefed** | brief posted + `status:ready` | Fully specified as a behavioral contract (per [`${CLAUDE_PLUGIN_ROOT}/reference/agent-brief.md`](${CLAUDE_PLUGIN_ROOT}/reference/agent-brief.md)) | | **autonomous-eligible** | role label (default `agent-ready`) | Briefed AND delegable — eligible for autonomous pickup from the frontier | -Side exits from any state: `status:needs-info` (returns to raw when the reporter replies), the human-gated role label (default `needs-human`), or close (wontfix / duplicate / already implemented). +Side exits from any state: `status:needs-info` (returns to raw when the reporter replies), `status:needs-decision` (awaiting a human or maintainer judgment call), the human-gated role label (default `needs-human`), or close (wontfix / duplicate / already implemented). **A briefed item takes one of three exits**, distinguished by the decision its brief carries: @@ -64,6 +64,7 @@ raw → verified → briefed | | ├→ decision-defaulted → autonomous-eligible + status:ready + "Decision defaulted: … — veto before merge" | | └→ human-gated (role label, default needs-human) — briefed for a human | └→ status:needs-info → raw (on reporter reply) + ├→ status:needs-decision: awaiting a human or maintainer judgment call └→ close: wontfix | duplicate | already implemented ``` @@ -74,7 +75,7 @@ Claiming stays coordination state, not a label — assignee + lease via the seam Show three buckets (oldest first, one-line summaries): 1. **Unlabeled** — never triaged -2. **`status:needs-triage`** — explicitly tagged for evaluation +2. **Raw marker** — `status:needs-triage` / `priority:needs-triage`, whichever axis the repo files it under — explicitly tagged for evaluation 3. **`status:needs-info` with reporter activity** — reporter replied since last triage note; ready for re-evaluation List open items and filter into buckets programmatically (adapter: "List items", bare read). When the repo treats external PRs as a request surface, include them and tag each line `[PR]` or `[issue]` — but surface only *external* PRs (a collaborator's in-flight PR is not triage work; this filter is discovery-only, and an explicitly named PR is always triaged regardless of author). Present as a compact table.