@chris1807/claude-kit 2.1.52 → 2.1.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -649,7 +649,7 @@ Claude reviews for:
|
|
|
649
649
|
| `/status` | `/status release 24` | Check status of a release, pipeline, work item, or environment |
|
|
650
650
|
| `/plan-backlog` | `/plan-backlog [project]` | Sweep backlog for Dev Ready stories with points and no tasks → propose one child task with hours per story |
|
|
651
651
|
| `/plan-sprint` | `/plan-sprint [project]` | Sweep the current sprint for stories/bugs with no child tasks → propose one child task with hours per item |
|
|
652
|
-
| `/quote-backlog` | `/quote-backlog [project]` | Sweep backlog for unpointed items ready to estimate — stories in `Design Approved`, bugs in `New` (bugs have no design states) → review completeness, check for duplicates, suggest rewrites, propose points + creator comments (10 at a time, approval-gated) |
|
|
652
|
+
| `/quote-backlog` | `/quote-backlog [project]` | Sweep backlog for unpointed items ready to estimate — stories in `Design Approved`, bugs in `New` (bugs have no design states) → review completeness, check for duplicates, suggest rewrites, propose points + creator comments (10 at a time, approval-gated). Also audits the drop-out queue — tagged bugs and stories bounced to Design Review — for items whose creator answered but which nobody returned to the sweep |
|
|
653
653
|
| `/quote` | `/quote AB#1234` | Estimate a work item in story points (senior-calibrated Fibonacci rubric) |
|
|
654
654
|
| `/explain` | `/explain AB#1234` | Summarize and explain a work item in plain language |
|
|
655
655
|
| `/create-work-item` | `/create-work-item [description]` | Interactively draft and create a Feature, Bug, User Story, or Hot Fix — proposes story points (user must agree), creates pointed items in Dev Ready; on a Feature, also drafts its child stories with `Custom.Order` waves |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chris1807/claude-kit",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.53",
|
|
4
4
|
"description": "Claude Code starter kit for Azure DevOps teams — agents, hooks, MCP servers, slash commands, and end-to-end work item → PR → release → deploy workflow automation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -28,6 +28,8 @@ For each qualifying item:
|
|
|
28
28
|
- a **User Story** that **can't be quoted** because information is missing moves back to **Design Review**, so the next sweep doesn't pick it up again while the creator is still working on it;
|
|
29
29
|
- a **Bug** that can't be quoted gets a **`needs-info` tag** instead — its state stays `New`. `New` is the bottom of the Bug workflow, so there is no earlier state to send it back to; the tag is what drops it out of the next sweep. The Step 2 query excludes tagged items, and removing the tag re-queues the bug.
|
|
30
30
|
|
|
31
|
+
Both drop-out mechanisms are **one-way and never expire** — only a human undoing them returns an item to the sweep. **Step 2b** therefore audits the drop-out queue on every run and reports items whose creator has answered but which nobody returned, so answered work can't sit invisible forever. That audit is read-only: it never clears a tag and never moves a story.
|
|
32
|
+
|
|
31
33
|
Treat `$ARGUMENTS` as an optional project name (e.g. `/quote-backlog CSI Development`). If provided, skip the project prompt in Step 1.
|
|
32
34
|
|
|
33
35
|
## `--help`
|
|
@@ -40,6 +42,8 @@ If `$ARGUMENTS` contains `--help` or `-h`, print everything between the two rule
|
|
|
40
42
|
|
|
41
43
|
Reviews each item for completeness and duplicate work, proposes points, and drafts feedback for the item's creator. Max 10 items per run, in backlog-rank order.
|
|
42
44
|
|
|
45
|
+
Every run also audits the drop-out queue — bugs tagged `needs-info` and stories bounced to `Design Review` — and reports any whose creator has since answered but which nobody returned to the sweep. Neither mechanism expires on its own, so those items are otherwise invisible forever.
|
|
46
|
+
|
|
43
47
|
Nothing is written to Azure DevOps until you approve the batch — every option below is a fully reversible choice.
|
|
44
48
|
|
|
45
49
|
| You type | What happens |
|
|
@@ -108,7 +112,7 @@ ORDER BY [Microsoft.VSTS.Common.StackRank] ASC
|
|
|
108
112
|
|
|
109
113
|
> **The state predicate is per-type on purpose — do not collapse it.** `[System.WorkItemType] IN ('User Story', 'Bug') AND [System.State] = 'Design Approved'` is the tempting one-liner and it is **silently wrong**: `Bug` has no `Design Approved` state, so that form returns User Stories only and never surfaces a single bug. It produces no error, just a short result set.
|
|
110
114
|
>
|
|
111
|
-
> The `[System.Tags] NOT CONTAINS 'needs-info'` clause excludes bugs that a previous run sent back to their creator (Step 5.3). Removing the tag re-queues the bug.
|
|
115
|
+
> The `[System.Tags] NOT CONTAINS 'needs-info'` clause excludes bugs that a previous run sent back to their creator (Step 5.3). Removing the tag re-queues the bug — and **removing it is the only thing that does**, which is why Step 2b exists. Nothing expires the tag, so a creator who supplies the missing information and forgets to untag makes the bug invisible to every future sweep.
|
|
112
116
|
>
|
|
113
117
|
> The `[System.IterationPath] = '{project}'` clause restricts results to the **root** iteration — items not yet placed in a sprint. If a project uses a different convention (e.g. an explicit "Backlog" iteration), ask the user to confirm before proceeding.
|
|
114
118
|
>
|
|
@@ -129,6 +133,70 @@ Nothing to quote on the backlog of {project}.
|
|
|
129
133
|
|
|
130
134
|
and stop. **If the user expected items to be there**, confirm the state names with `get_type` before concluding the backlog is clean — an empty result is what a wrong state name looks like.
|
|
131
135
|
|
|
136
|
+
## Step 2b: Audit the drop-out queue for stale items
|
|
137
|
+
|
|
138
|
+
Both drop-out mechanisms from Step 5 are **one-way and have no expiry**: a bug leaves the sweep via the `needs-info` tag, a story leaves via `Design Review`, and the *only* thing that brings either back is a human undoing it. If a creator supplies the missing information but leaves the tag on — or answers in a comment without touching the field, or adds the missing AC without moving the story forward — the item goes invisible to every future sweep, permanently.
|
|
139
|
+
|
|
140
|
+
That is silent starvation, and it is the most likely way this command loses work, because **the failure is indistinguishable from a clean backlog.** Both halves need auditing; fixing only the bug side leaves the same hole open for stories.
|
|
141
|
+
|
|
142
|
+
Run this **regardless of what Step 2 returned** — including when Step 2 returned zero items, which is exactly when starvation is easiest to miss:
|
|
143
|
+
|
|
144
|
+
```sql
|
|
145
|
+
SELECT [System.Id], [System.Title], [System.WorkItemType],
|
|
146
|
+
[System.ChangedDate], [System.ChangedBy], [System.CommentCount]
|
|
147
|
+
FROM WorkItems
|
|
148
|
+
WHERE [System.TeamProject] = '{project}'
|
|
149
|
+
AND [System.Tags] CONTAINS 'needs-info'
|
|
150
|
+
ORDER BY [System.ChangedDate] DESC
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Then two passes — cheap first, precise only where the cheap pass raises a flag:
|
|
154
|
+
|
|
155
|
+
1. **Cheap filter (one batch call).** Fetch `System.ChangedBy` / `System.ChangedDate` for the tagged ids. If an item's most recent change is still the person who applied the tag, nobody has responded — leave it alone.
|
|
156
|
+
2. **Precise check, only for the remainder.** Call `mcp__azure-devops__wit_work_item` (`action: list_revisions`), find the revision where `needs-info` **first appeared**, then scan every **later** revision for one authored by somebody other than the tagger that changed `System.Title`, `Microsoft.VSTS.TCM.ReproSteps`, `System.Description`, `Microsoft.VSTS.Common.AcceptanceCriteria`, or raised `System.CommentCount`. Any such revision means the creator answered and the tag is stale.
|
|
157
|
+
|
|
158
|
+
**Three traps in that check:**
|
|
159
|
+
|
|
160
|
+
- **Bot revisions are noise.** A process automation (an AI work-item reviewer, a quality-score bot) bumps a revision after nearly every human write, so the *latest* revision author is frequently a bot even when a human just acted. Never conclude from the latest author alone — scan the whole range after the tag revision.
|
|
161
|
+
- **A comment counts as a response.** A creator who answers in a comment without editing the field has still supplied the information. Treat a `System.CommentCount` increase after the tag revision as creator activity.
|
|
162
|
+
- **The fix and the untag often land in one revision.** A tidy creator corrects the field *and* drops the tag in a single save, which is the healthy path and needs no report. Only a live tag with later activity behind it is stale.
|
|
163
|
+
|
|
164
|
+
### The story side of the same hole
|
|
165
|
+
|
|
166
|
+
Stories bounced to `Design Review` starve identically, but they **cannot be swept wholesale** — unlike the `needs-info` tag, `Design Review` is a legitimate working state, and most stories sitting in it arrived through the normal design process and are exactly where they belong. Auditing every story in `Design Review` would bury the real signal in noise.
|
|
167
|
+
|
|
168
|
+
Narrow it to the ones *this command* bounced:
|
|
169
|
+
|
|
170
|
+
```sql
|
|
171
|
+
SELECT [System.Id], [System.Title], [System.ChangedDate], [System.ChangedBy]
|
|
172
|
+
FROM WorkItems
|
|
173
|
+
WHERE [System.TeamProject] = '{project}'
|
|
174
|
+
AND [System.WorkItemType] = 'User Story'
|
|
175
|
+
AND [System.State] = 'Design Review'
|
|
176
|
+
AND [Microsoft.VSTS.Scheduling.StoryPoints] = ''
|
|
177
|
+
ORDER BY [System.ChangedDate] DESC
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Then keep only those that reached `Design Review` **from `Design Approved`** (a bounce, not forward design progress) and carry a quote-sweep comment. `System.Reason` on the bouncing revision reads `Moved out of state Design Approved` — check the revision history rather than the current `System.Reason`, which reflects whatever happened last. A story that has had creator activity since that bounce is stale, on the same test as the bug side.
|
|
181
|
+
|
|
182
|
+
If a project's stories routinely round-trip `Design Approved → Design Review` for reasons unrelated to estimating, say so and skip this half rather than reporting noise — the bug-side audit still stands on its own.
|
|
183
|
+
|
|
184
|
+
### Reporting
|
|
185
|
+
|
|
186
|
+
Report stale items **above** the batch, and do not quote them in this run:
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
⚑ Stale drop-outs — answered since they left the sweep, still excluded:
|
|
190
|
+
AB#6440 (Bug) — Mackenzie Luke edited Repro Steps 2026-09-02, needs-info still on
|
|
191
|
+
AB#6443 (Bug) — Mackenzie Luke commented 2026-09-01, needs-info still on
|
|
192
|
+
AB#6461 (Story) — Donna Chen added AC 2026-09-02, still in Design Review
|
|
193
|
+
|
|
194
|
+
Re-quote one with /quote AB#{id}, or return it to the sweep: drop the bug's
|
|
195
|
+
tag / move the story back to Design Approved.
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Never undo the drop-out yourself** — don't clear the tag, don't move the story forward. Both are the creator's signal that the item is ready, and asserting it for them claims knowledge you don't have; the creator may have answered one gap while another remains. Surfacing it is the whole job — a drop-out nobody reverses is work nobody sees. If nothing is stale, say so in one line (`✓ drop-out queue clean — {n} tagged bugs, {m} bounced stories, none updated since`) and move on.
|
|
199
|
+
|
|
132
200
|
## Step 3: Analyze Each Item (max 10)
|
|
133
201
|
|
|
134
202
|
For each item in the batch, do all of 3a–3e before presenting anything. Collect results; **do not write to Azure DevOps during this step.**
|
|
@@ -231,7 +299,7 @@ If 3b–3d surfaced anything — gaps, a duplicate, a suggested approach change
|
|
|
231
299
|
|
|
232
300
|
{Closing line: what's needed to make it estimable — and say plainly what just happened to the item, matched to its type:
|
|
233
301
|
- User Story going back: "Moving this back to Design Review until that's answered — ping me and I'll re-quote it."
|
|
234
|
-
- Bug being tagged: "Tagging this needs-info so it's out of the estimating sweep — a Bug has no Design Review state to move it to. Remove the tag
|
|
302
|
+
- Bug being tagged: "Tagging this needs-info so it's out of the estimating sweep — a Bug has no Design Review state to move it to. **Remove the tag** once there are repro steps and the next sweep picks it up automatically. Replying here alone leaves the tag on and the sweep still skips it — I'll catch it in the stale-tag audit, but dropping the tag is the reliable route."
|
|
235
303
|
- Either type, pointed: "Estimated at {n} points assuming {assumption} — correct me if that's wrong."}
|
|
236
304
|
```
|
|
237
305
|
|
|
@@ -340,6 +408,7 @@ Items analyzed: {n} (of {total} qualifying — {remaining} left for the next
|
|
|
340
408
|
✓ Rewrites: {n_rewrites_applied} applied, {n_rewrites_suggested} suggested in comments
|
|
341
409
|
⚑ Info missing: {n_info_missing} items sent back to the creator (AC on stories, repro steps on bugs)
|
|
342
410
|
⏭ Skipped: {n_skipped} left exactly as they were — will reappear next sweep ({reasons})
|
|
411
|
+
⚑ Stale drop-outs: {n_stale} answered since leaving the sweep — still excluded ({n_stale_bugs} tagged bugs, {n_stale_stories} bounced stories)
|
|
343
412
|
|
|
344
413
|
Pointed items:
|
|
345
414
|
- AB#4611: 5 pts
|
|
@@ -358,9 +427,14 @@ Left exactly as they were:
|
|
|
358
427
|
- AB#4623: too large to point — split proposal in the comment (Design Approved)
|
|
359
428
|
- AB#4625: you skipped it (New)
|
|
360
429
|
|
|
430
|
+
Stale drop-outs (answered since leaving the sweep — invisible until returned):
|
|
431
|
+
- AB#4630 (Bug): creator edited Repro Steps 2026-09-02, needs-info still on
|
|
432
|
+
- AB#4631 (Bug): creator commented 2026-09-01, needs-info still on
|
|
433
|
+
- AB#4632 (Story): creator added AC 2026-09-02, still in Design Review
|
|
434
|
+
|
|
361
435
|
Next steps:
|
|
362
436
|
/quote-backlog {project} — process the next 10 qualifying items
|
|
363
437
|
/quote AB#{id} — re-estimate a single item after the creator responds
|
|
364
438
|
```
|
|
365
439
|
|
|
366
|
-
Do not create tasks or assign items — those are downstream decisions. Pointed items are now Dev Ready, so `/plan-backlog` picks them up on its next run. Stories moved to Design Review and bugs tagged `needs-info` are both out of the Step 2 query, so the next `/quote-backlog` run reaches genuinely new items instead of re-reviewing the ones still waiting on their creator — re-quote one with `/quote AB#{id}` once they respond, or let them move the story back to Design Approved / drop the bug's tag themselves. Make no change other than the three described in Step 5.
|
|
440
|
+
Do not create tasks or assign items — those are downstream decisions. Pointed items are now Dev Ready, so `/plan-backlog` picks them up on its next run. Stories moved to Design Review and bugs tagged `needs-info` are both out of the Step 2 query, so the next `/quote-backlog` run reaches genuinely new items instead of re-reviewing the ones still waiting on their creator — re-quote one with `/quote AB#{id}` once they respond, or let them move the story back to Design Approved / drop the bug's tag themselves. Make no change other than the three described in Step 5 — **Step 2b's audit is read-only**, and it never clears a tag on the creator's behalf.
|
|
@@ -144,7 +144,7 @@ In the CSI Development process template, `Bug` and `Hot Fix` have **no design st
|
|
|
144
144
|
|
|
145
145
|
### 5b. Bug / Hot Fix → `needs-info` tag
|
|
146
146
|
|
|
147
|
-
> *"I can't size this until {what's missing} — and a Bug has no design state to send it back to. Want me to tag AB#{id} `needs-info` so it drops out of the next `/quote-backlog` sweep? Removing the tag re-queues it."*
|
|
147
|
+
> *"I can't size this until {what's missing} — and a Bug has no design state to send it back to. Want me to tag AB#{id} `needs-info` so it drops out of the next `/quote-backlog` sweep? Removing the tag is what re-queues it — a reply alone leaves it excluded, though `/quote-backlog`'s stale-tag audit will surface it."*
|
|
148
148
|
|
|
149
149
|
**Wait for the user.** Only update the work item if they say yes. Then add the tag with `mcp__azure-devops__wit_update_work_item`. Rules:
|
|
150
150
|
|
|
@@ -119,6 +119,8 @@ These rules apply to **every** command or flow that creates or estimates work it
|
|
|
119
119
|
- **Feature / Task** → neither; report the gap and stop.
|
|
120
120
|
|
|
121
121
|
An item that merely **needs to be split** keeps its state and gets no tag — the work is understood, nothing is missing.
|
|
122
|
+
|
|
123
|
+
**The drop-out mechanism has no expiry, so every sweep must audit it.** Removing the `needs-info` tag is the *only* thing that re-queues a bug, and moving a story back to `Design Approved` is the only thing that re-queues a story. A creator who supplies the missing information but leaves the tag on — or answers in a comment instead of editing the field — makes the item invisible to every future sweep, permanently. That failure looks exactly like a clean backlog. `/quote-backlog` Step 2b therefore audits tagged items for activity after the tag was applied and reports the stale ones; it never clears a tag on the creator's behalf. Two traps when writing such a check: automation bots bump a revision after nearly every human write, so the *latest* revision author is unreliable — scan the whole range after the tag revision; and a `System.CommentCount` increase counts as a creator response.
|
|
122
124
|
6. **Never assume two work item types share a state list.** WIQL doesn't validate state names, so a query filtering on a state the type doesn't have returns **zero rows instead of an error** — the classic symptom is a backlog sweep that silently never surfaces a single bug. Confirm with `mcp__azure-devops__wit_work_item` (`action: get_type`) before writing a state name into a query or an update. In CSI Development: `User Story` has `New → Dev Ready → In Design → Design Review → Design Approved → Active → …`; `Bug` and `Hot Fix` have `New → Dev Ready → Active → …`.
|
|
123
125
|
|
|
124
126
|
### Branching Strategy
|
|
@@ -262,7 +264,7 @@ All deployment and release operations are available as slash commands:
|
|
|
262
264
|
| `/status` | `/status release 24` | Check release, pipeline, or work item status |
|
|
263
265
|
| `/plan-backlog` | `/plan-backlog [project]` | Sweep backlog for Dev Ready stories with points and no tasks → propose child tasks with hours |
|
|
264
266
|
| `/plan-sprint` | `/plan-sprint [project]` | Sweep the current sprint for stories/bugs with no child tasks → propose one child task with hours per item |
|
|
265
|
-
| `/quote-backlog` | `/quote-backlog [project]` | Sweep backlog for unpointed items ready to estimate — stories in `Design Approved`, **bugs in `New`** (bugs have no design states) → review completeness, check for duplicates, suggest rewrites, propose points + creator comments (10 at a time, approval-gated). Pointed items move to Dev Ready; stories that can't be quoted move back to **Design Review**, bugs that can't be quoted get a **`needs-info`** tag, so the next sweep skips them |
|
|
267
|
+
| `/quote-backlog` | `/quote-backlog [project]` | Sweep backlog for unpointed items ready to estimate — stories in `Design Approved`, **bugs in `New`** (bugs have no design states) → review completeness, check for duplicates, suggest rewrites, propose points + creator comments (10 at a time, approval-gated). Pointed items move to Dev Ready; stories that can't be quoted move back to **Design Review**, bugs that can't be quoted get a **`needs-info`** tag, so the next sweep skips them. Every run also audits the drop-out queue (tagged bugs **and** stories bounced to Design Review) and reports any whose creator answered but which nobody returned to the sweep — neither mechanism expires, so those are otherwise invisible forever |
|
|
266
268
|
| `/quote` | `/quote AB#1234` | Estimate story points for one work item; on approval, sets the points and moves the item to Dev Ready. If it can't be estimated, offers to send a story back to **Design Review** or tag a bug **`needs-info`** |
|
|
267
269
|
| `/create-work-item` | `/create-work-item [description]` | Interactively draft and create a Feature, Bug, User Story, or Hot Fix — proposes story points (user must agree) and creates pointed items in Dev Ready; on a Feature, also drafts its child stories with `Custom.Order` waves |
|
|
268
270
|
| `/edit-work-item` | `/edit-work-item AB#1234 [what to change]` | Revise an existing work item field-by-field. On a Feature, cascades the change into its child stories — updates, adds, retires, and re-sequences `Custom.Order` waves — with a safety gate on anything already past Dev Ready |
|