Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugins/work-items/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
13 changes: 13 additions & 0 deletions plugins/work-items/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions plugins/work-items/skills/triage/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand All @@ -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
```

Expand All @@ -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.
Expand Down
Loading