@chris1807/claude-kit 2.1.51 → 2.1.52
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/package.json +1 -1
- package/templates/commands/implement.md +33 -18
- package/templates/commands/plan-backlog.md +34 -17
- package/templates/commands/plan-sprint.md +36 -19
- package/templates/commands/quote-backlog.md +11 -9
- package/templates/commands/quote.md +11 -9
- package/templates/commands/rework.md +8 -6
- package/templates/infrastructure/CLAUDE-WORKFLOW.md +5 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chris1807/claude-kit",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.52",
|
|
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": {
|
|
@@ -182,21 +182,35 @@ If **more than one** open Task exists, don't guess — list them and ask which o
|
|
|
182
182
|
|
|
183
183
|
This includes the case where child Tasks exist but every one of them is already closed — a closed Task is not somewhere to log new work.
|
|
184
184
|
|
|
185
|
-
|
|
185
|
+
The parent's Story Points give the **band**; the complexity of the work picks the number **inside** it (this mirrors `/plan-backlog` Step 5b — keep the two tables in sync). Never take the top of the band by default.
|
|
186
186
|
|
|
187
|
-
| Points |
|
|
188
|
-
|
|
189
|
-
| 1 |
|
|
190
|
-
| 2 |
|
|
191
|
-
| 3 |
|
|
192
|
-
| 5 |
|
|
193
|
-
| 8 |
|
|
194
|
-
| 13 | 48
|
|
195
|
-
| 21 | 75
|
|
187
|
+
| Points | Low | Medium | High | Band in days (a day = 6 hrs) |
|
|
188
|
+
|--------|-----|--------|------|------------------------------|
|
|
189
|
+
| 1 | 1 | 1.5 | 2 | under 2 hours |
|
|
190
|
+
| 2 | 2 | 2.5 | 3 | 2 hours to half a day |
|
|
191
|
+
| 3 | 3 | 6 | 12 | half a day to two days |
|
|
192
|
+
| 5 | 12 | 18 | 24 | two to four days |
|
|
193
|
+
| 8 | 24 | 30 | 36 | around a week |
|
|
194
|
+
| 13 | 36 | 48 | 60 | one to two weeks |
|
|
195
|
+
| 21 | 60 | 75 | 90 | two to three weeks |
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
The bands are **contiguous**: each starts where the one below it ends, so a 1-pointer never costs more than a 2-pointer's floor. A day is **6 productive hours**, a week is **5 days (30 hours)**.
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
Calibrated for a **senior developer working with Claude assistance** at ~6 productive hours per day — both discounts are already in the numbers, so don't apply a second one. Boilerplate, tests for specified behavior, and mechanical refactors are assisted work; the hours that remain are the human ones (novel decisions, verification, review, UAT). Round non-Fibonacci point values up to the nearest row. Hours are rounded to the nearest half hour at 1–2 points and to a whole hour from 3 points up.
|
|
200
|
+
|
|
201
|
+
**Complexity is not size.** Points already carry the size — how much work there is. Complexity is how *hard* that work is: how many decisions are still open, how novel the shape is, how costly it is to get wrong. A large-but-boring story is high points at **low** complexity. Never default to the High column just because the points are high.
|
|
202
|
+
|
|
203
|
+
- **Low** — the shape is known before starting. One layer, or an existing pattern in the codebase to copy. AC is unambiguous. No new integration, no migration, no state or permission logic. Tests are mechanical.
|
|
204
|
+
- **Medium** — crosses layers, or touches an area with no exact precedent. A few real decisions, some edge cases to reason through, existing tests need reworking. This is the default when nothing pushes the item either way.
|
|
205
|
+
- **High** — novel design with nothing to copy; external or third-party contract; data migration or backfill; concurrency, state machines, permissions, money, or PII; ambiguous or self-contradicting AC; wide blast radius; behavior that is hard to verify.
|
|
206
|
+
|
|
207
|
+
Pick **one** band and hold a one-phrase reason for it — that phrase is shown with the proposal. When an item sits between two bands, take the **lower** one unless a High signal above is actually present.
|
|
208
|
+
|
|
209
|
+
Tags like `spike`, `research`, or `unknown-stack` are High-complexity signals on their own — use the High column for them rather than adding a separate percentage.
|
|
210
|
+
|
|
211
|
+
By Step 4 you have the approved Step 3 plan in hand — judge complexity from that plan, not from the points. A plan that is mostly "add a field, thread it through, follow the existing pattern" is Low even at 8 points; a plan with an open design question or a migration in it is High even at 3.
|
|
212
|
+
|
|
213
|
+
If the work item has **no Story Points**, estimate the hours from the plan just approved in Step 3 — files to create and modify, plus the unit tests listed — judging size and complexity the same way. Say which basis you used.
|
|
200
214
|
|
|
201
215
|
Show the proposal and **wait for the user**:
|
|
202
216
|
|
|
@@ -205,9 +219,10 @@ AB#{id} has no open child Task — one is needed to log hours against.
|
|
|
205
219
|
|
|
206
220
|
| Task title | Hours |
|
|
207
221
|
|----------------------------------------------|-------|
|
|
208
|
-
| {PREFIX} - Implement: {short summary} |
|
|
222
|
+
| {PREFIX} - Implement: {short summary} | 18 |
|
|
209
223
|
|
|
210
|
-
Basis: {n} story points
|
|
224
|
+
Basis: {n} story points ({low}/{mid}/{high} band), {complexity} complexity — {one-phrase reason} → {n}h
|
|
225
|
+
(or: no points — estimated from the approved plan, {complexity} complexity)
|
|
211
226
|
|
|
212
227
|
Create it? (yes / edit / skip)
|
|
213
228
|
```
|
|
@@ -475,10 +490,10 @@ For each wave in ascending order:
|
|
|
475
490
|
```
|
|
476
491
|
Stories in this wave with no open child Task:
|
|
477
492
|
|
|
478
|
-
| Story | Task title | Hours | Basis
|
|
479
|
-
|
|
480
|
-
| AB#1235 | COM - Implement: export endpoint |
|
|
481
|
-
| AB#1236 | COM - Implement: export screen |
|
|
493
|
+
| Story | Task title | Hours | Basis |
|
|
494
|
+
|----------|-----------------------------------------|-------|------------------------|
|
|
495
|
+
| AB#1235 | COM - Implement: export endpoint | 3 | 3 pts, low cx |
|
|
496
|
+
| AB#1236 | COM - Implement: export screen | 18 | 5 pts, medium cx |
|
|
482
497
|
|
|
483
498
|
Create these? (yes / edit N / skip N / skip all)
|
|
484
499
|
```
|
|
@@ -93,7 +93,7 @@ Continue? (yes / cancel)
|
|
|
93
93
|
|
|
94
94
|
Only when **ultracode is on** (a system-reminder confirms it, or the user typed `ultracode`): the analysis in 5a–5c is independent per story, so pre-compute all proposals in parallel with the `Workflow` tool instead of analyzing one story at a time.
|
|
95
95
|
|
|
96
|
-
- Fan out **one agent per story** that does 5a–5c — re-read the story, map points →
|
|
96
|
+
- Fan out **one agent per story** that does 5a–5c — re-read the story, map points → band, judge complexity, pick within the band, draft the single task — and returns a structured proposal (story id, points, complexity, one-phrase complexity reason, band, and one `{title, hours}` task). Use a `schema` so each agent returns validated JSON, with `complexity` constrained to `low | medium | high`.
|
|
97
97
|
- Then run Step 5's loop **using the pre-computed proposals** — but keep 5d (approval) and 5e (creation) exactly as written: present each proposal, wait for `yes / edit / skip / cancel-all`, and create the task only after approval. **Never fan out the approval or the work-item creation** — those stay sequential and interactive.
|
|
98
98
|
|
|
99
99
|
If ultracode is off, ignore this and run Step 5 the normal sequential way. The output is identical either way; ultracode only makes the analysis faster for large backlogs.
|
|
@@ -106,45 +106,62 @@ For each remaining story, in order:
|
|
|
106
106
|
|
|
107
107
|
Fetch the work item again (Description and Acceptance Criteria fields) if not already cached. You need the AC text to write an accurate task title.
|
|
108
108
|
|
|
109
|
-
### 5b. Map Story Points →
|
|
109
|
+
### 5b. Map Story Points → hour band, then pick within it by complexity
|
|
110
110
|
|
|
111
|
-
> **Assume a senior developer working with Claude assistance is the implementer.** The hour
|
|
111
|
+
> **Assume a senior developer working with Claude assistance is the implementer.** The hour bands below already discount for both — no ramp-up time, no time spent learning the stack, routine cross-layer work is fast, and boilerplate/tests/mechanical refactors are assisted. Do not add a separate "experience" or "Claude" discount on top of these numbers.
|
|
112
112
|
>
|
|
113
113
|
> The hours that survive the assist are the human ones: understanding the requirement, the genuinely novel decisions, verification, review turnaround, and UAT. If a budget looks large only because the story touches many files, it's too large.
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
**Points give the band. Complexity picks the number inside it.** Never take the top of the band by default — that is what makes every estimate max out. Low complexity → the low end, medium → the middle, high → the high end.
|
|
116
116
|
|
|
117
|
-
|
|
118
|
-
|--------|-------------|-------|
|
|
119
|
-
| 1 | 3 hrs | trivial change |
|
|
120
|
-
| 2 | 6 hrs | small, one-layer change |
|
|
121
|
-
| 3 | 10 hrs | one feature slice, modest tests |
|
|
122
|
-
| 5 | 16 hrs | cross-layer or new component (routine for an assisted senior) |
|
|
123
|
-
| 8 | 28 hrs | multi-area, real unknowns the assist doesn’t remove |
|
|
124
|
-
| 13 | 48 hrs | large feature — should probably be split |
|
|
125
|
-
| 21 | 75 hrs | very large — almost certainly split |
|
|
117
|
+
Bands (calibrated for a senior developer with Claude assistance, at ~6 productive hours per day):
|
|
126
118
|
|
|
127
|
-
|
|
119
|
+
| Points | Low | Medium | High | Band in days (a day = 6 hrs) |
|
|
120
|
+
|--------|-----|--------|------|------------------------------|
|
|
121
|
+
| 1 | 1 | 1.5 | 2 | under 2 hours |
|
|
122
|
+
| 2 | 2 | 2.5 | 3 | 2 hours to half a day |
|
|
123
|
+
| 3 | 3 | 6 | 12 | half a day to two days |
|
|
124
|
+
| 5 | 12 | 18 | 24 | two to four days |
|
|
125
|
+
| 8 | 24 | 30 | 36 | around a week |
|
|
126
|
+
| 13 | 36 | 48 | 60 | one to two weeks — likely needs splitting |
|
|
127
|
+
| 21 | 60 | 75 | 90 | two to three weeks — almost certainly split |
|
|
128
|
+
|
|
129
|
+
The bands are **contiguous**: each one starts where the one below it ends, so a 1-pointer never costs more than a 2-pointer's floor. A day is **6 productive hours** and a week is **5 days (30 hours)** — every row above is a whole number of days once you leave the 1–2 point rows.
|
|
130
|
+
|
|
131
|
+
If the points value isn't on the Fibonacci scale, round to the nearest row above. Hours are rounded to the nearest half hour at 1–2 points and to a whole hour from 3 points up.
|
|
132
|
+
|
|
133
|
+
**Complexity is not size.** Points already carry the size — how much work there is. Complexity is how *hard* that work is: how many decisions are still open, how novel the shape is, how costly it is to get wrong. A large-but-boring story is high points at **low** complexity. Never default to the High column just because the points are high.
|
|
134
|
+
|
|
135
|
+
- **Low** — the shape is known before starting. One layer, or an existing pattern in the codebase to copy. AC is unambiguous. No new integration, no migration, no state or permission logic. Tests are mechanical.
|
|
136
|
+
- **Medium** — crosses layers, or touches an area with no exact precedent. A few real decisions, some edge cases to reason through, existing tests need reworking. This is the default when nothing pushes the item either way.
|
|
137
|
+
- **High** — novel design with nothing to copy; external or third-party contract; data migration or backfill; concurrency, state machines, permissions, money, or PII; ambiguous or self-contradicting AC; wide blast radius; behavior that is hard to verify.
|
|
138
|
+
|
|
139
|
+
Pick **one** band and hold a one-phrase reason for it — that phrase is shown with the proposal. When an item sits between two bands, take the **lower** one unless a High signal above is actually present.
|
|
140
|
+
|
|
141
|
+
Tags like `spike`, `research`, or `unknown-stack` are High-complexity signals on their own — use the High column for them rather than adding a separate percentage.
|
|
128
142
|
|
|
129
143
|
### 5c. Draft the single task
|
|
130
144
|
|
|
131
145
|
Create **exactly one task** covering all the work for the story — implementation, tests, code review revisions, and UAT support are all rolled into it. Do not split the story into design/backend/frontend/test tasks.
|
|
132
146
|
|
|
133
147
|
- **Title**: `{Prefix} - Implement: {short summary of the story}` — use the same product prefix as the parent (e.g. `COM`, `PAY`, `CDA`), extracted from the parent's title.
|
|
134
|
-
- **Hours**: the
|
|
148
|
+
- **Hours**: the number picked in 5b — band from points, position in the band from complexity — rounded to a whole hour.
|
|
135
149
|
|
|
136
150
|
### 5d. Show the proposal
|
|
137
151
|
|
|
138
152
|
```
|
|
139
153
|
─────────────────────────────────────────────────────────────
|
|
140
|
-
AB#{id}: {title} ({points} pts → {budget} hrs)
|
|
154
|
+
AB#{id}: {title} ({points} pts, {complexity} complexity → {budget} hrs)
|
|
141
155
|
─────────────────────────────────────────────────────────────
|
|
142
156
|
|
|
143
157
|
Proposed child task:
|
|
144
158
|
|
|
145
159
|
| Task title | Hours |
|
|
146
160
|
|------------------------------------------------|-------|
|
|
147
|
-
| {Prefix} - Implement: payments CSV export |
|
|
161
|
+
| {Prefix} - Implement: payments CSV export | 18 |
|
|
162
|
+
|
|
163
|
+
Complexity: medium — crosses API and client, follows the existing export pattern
|
|
164
|
+
Band for 5 pts: 12 / 18 / 24 (two to four days)
|
|
148
165
|
|
|
149
166
|
Approve? (yes / edit / skip / cancel-all)
|
|
150
167
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Sweep the **current sprint** for user stories and bugs without child tasks and propose a single implementation task per item with an hour estimate. Usage: `/plan-sprint [project]`
|
|
2
2
|
|
|
3
|
-
This command finds every **User Story** and **Bug** in the current sprint of a chosen Azure DevOps project that **has no child tasks yet**, and — item by item — proposes **one child Task** with an hour estimate for the user to approve before any work items are created. Exactly one task per work item — never a multi-task breakdown.
|
|
3
|
+
This command finds every **User Story** and **Bug** in the current sprint of a chosen Azure DevOps project that **has no child tasks yet**, and — item by item — proposes **one child Task** with an hour estimate (points set the band, complexity sets where in the band it lands) for the user to approve before any work items are created. Exactly one task per work item — never a multi-task breakdown.
|
|
4
4
|
|
|
5
5
|
This is the sprint-planning counterpart of `/plan-backlog`. Use `/plan-backlog` to groom the unscheduled backlog; use `/plan-sprint` after items are pulled into the sprint to make sure each has its implementation task and hours.
|
|
6
6
|
|
|
@@ -110,7 +110,7 @@ Continue? (yes / cancel)
|
|
|
110
110
|
|
|
111
111
|
Only when **ultracode is on** (a system-reminder confirms it, or the user typed `ultracode`): the analysis in 6a–6c is independent per item, so pre-compute all proposals in parallel with the `Workflow` tool instead of analyzing one item at a time.
|
|
112
112
|
|
|
113
|
-
- Fan out **one agent per item** that does 6a–6c — re-read the item,
|
|
113
|
+
- Fan out **one agent per item** that does 6a–6c — re-read the item, map points → band, judge complexity, pick within the band, draft the single task — and returns a structured proposal (item id, points, complexity, one-phrase complexity reason, band, and one `{title, hours}` task). Use a `schema` so each agent returns validated JSON, with `complexity` constrained to `low | medium | high`.
|
|
114
114
|
- Then run Step 6's loop **using the pre-computed proposals** — but keep 6d (approval) and 6e (creation) exactly as written: present each proposal, wait for `yes / edit / skip / cancel-all`, and create the task only after approval. **Never fan out the approval or the work-item creation** — those stay sequential and interactive.
|
|
115
115
|
|
|
116
116
|
If ultracode is off, ignore this and run Step 6 the normal sequential way. The output is identical either way; ultracode only makes the analysis faster for large sprints.
|
|
@@ -125,50 +125,67 @@ Fetch the work item again (Description and Acceptance Criteria fields — Repro
|
|
|
125
125
|
|
|
126
126
|
### 6b. Derive the hour budget
|
|
127
127
|
|
|
128
|
-
> **Assume a senior developer working with Claude assistance is the implementer.** The hour
|
|
128
|
+
> **Assume a senior developer working with Claude assistance is the implementer.** The hour bands below already discount for both — no ramp-up time, no time spent learning the stack, routine cross-layer work is fast, and boilerplate/tests/mechanical refactors are assisted. Do not add a separate "experience" or "Claude" discount on top of these numbers.
|
|
129
129
|
>
|
|
130
130
|
> The hours that survive the assist are the human ones: understanding the requirement, the genuinely novel decisions, verification, review turnaround, and UAT. If a budget looks large only because the story touches many files, it's too large.
|
|
131
131
|
|
|
132
|
-
**
|
|
132
|
+
**Points give the band. Complexity picks the number inside it.** Never take the top of the band by default — that is what makes every estimate max out. Low complexity → the low end, medium → the middle, high → the high end.
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|--------|-------------|-------|
|
|
136
|
-
| 1 | 3 hrs | trivial change |
|
|
137
|
-
| 2 | 6 hrs | small, one-layer change |
|
|
138
|
-
| 3 | 10 hrs | one feature slice, modest tests |
|
|
139
|
-
| 5 | 16 hrs | cross-layer or new component (routine for an assisted senior) |
|
|
140
|
-
| 8 | 28 hrs | multi-area, real unknowns the assist doesn’t remove |
|
|
141
|
-
| 13 | 48 hrs | large feature — should probably be split |
|
|
142
|
-
| 21 | 75 hrs | very large — almost certainly split |
|
|
134
|
+
**If the item has Story Points**, use these bands (calibrated for a senior developer with Claude assistance, at ~6 productive hours per day):
|
|
143
135
|
|
|
144
|
-
|
|
136
|
+
| Points | Low | Medium | High | Band in days (a day = 6 hrs) |
|
|
137
|
+
|--------|-----|--------|------|------------------------------|
|
|
138
|
+
| 1 | 1 | 1.5 | 2 | under 2 hours |
|
|
139
|
+
| 2 | 2 | 2.5 | 3 | 2 hours to half a day |
|
|
140
|
+
| 3 | 3 | 6 | 12 | half a day to two days |
|
|
141
|
+
| 5 | 12 | 18 | 24 | two to four days |
|
|
142
|
+
| 8 | 24 | 30 | 36 | around a week |
|
|
143
|
+
| 13 | 36 | 48 | 60 | one to two weeks — likely needs splitting |
|
|
144
|
+
| 21 | 60 | 75 | 90 | two to three weeks — almost certainly split |
|
|
145
145
|
|
|
146
|
-
|
|
146
|
+
The bands are **contiguous**: each one starts where the one below it ends, so a 1-pointer never costs more than a 2-pointer's floor. A day is **6 productive hours** and a week is **5 days (30 hours)** — every row above is a whole number of days once you leave the 1–2 point rows.
|
|
147
|
+
|
|
148
|
+
If the points value isn't on the Fibonacci scale, round to the nearest row above. Hours are rounded to the nearest half hour at 1–2 points and to a whole hour from 3 points up.
|
|
149
|
+
|
|
150
|
+
**Complexity is not size.** Points already carry the size — how much work there is. Complexity is how *hard* that work is: how many decisions are still open, how novel the shape is, how costly it is to get wrong. A large-but-boring story is high points at **low** complexity. Never default to the High column just because the points are high.
|
|
151
|
+
|
|
152
|
+
- **Low** — the shape is known before starting. One layer, or an existing pattern in the codebase to copy. AC is unambiguous. No new integration, no migration, no state or permission logic. Tests are mechanical.
|
|
153
|
+
- **Medium** — crosses layers, or touches an area with no exact precedent. A few real decisions, some edge cases to reason through, existing tests need reworking. This is the default when nothing pushes the item either way.
|
|
154
|
+
- **High** — novel design with nothing to copy; external or third-party contract; data migration or backfill; concurrency, state machines, permissions, money, or PII; ambiguous or self-contradicting AC; wide blast radius; behavior that is hard to verify.
|
|
155
|
+
|
|
156
|
+
Pick **one** band and hold a one-phrase reason for it — that phrase is shown with the proposal. When an item sits between two bands, take the **lower** one unless a High signal above is actually present.
|
|
157
|
+
|
|
158
|
+
Tags like `spike`, `research`, or `unknown-stack` are High-complexity signals on their own — use the High column for them rather than adding a separate percentage.
|
|
159
|
+
|
|
160
|
+
**If the item has no Story Points**, judge both axes from the description, acceptance criteria, and repro steps: which row the *size* of the work most resembles, then which column its *complexity* falls in. Mark the proposal `(no points — estimated from description)` and suggest `/quote AB#{id}` in the final summary. Do **not** set Story Points on the item — that's the user's call.
|
|
147
161
|
|
|
148
162
|
### 6c. Draft the single task
|
|
149
163
|
|
|
150
164
|
Create **exactly one task** covering all the work for the item — implementation, tests, code review revisions, and UAT support are all rolled into it. Do not split the item into design/backend/frontend/test tasks.
|
|
151
165
|
|
|
152
166
|
- **Title**: `{Prefix} - Implement: {short summary of the item}` — use the same product prefix as the parent (e.g. `COM`, `PAY`, `CDA`), extracted from the parent's title. For Bugs, `{Prefix} - Fix: {short summary}` reads better.
|
|
153
|
-
- **Hours**: the
|
|
167
|
+
- **Hours**: the number picked in 6b — band from points, position in the band from complexity — rounded to a whole hour.
|
|
154
168
|
|
|
155
169
|
### 6d. Show the proposal
|
|
156
170
|
|
|
157
171
|
```
|
|
158
172
|
─────────────────────────────────────────────────────────────
|
|
159
|
-
AB#{id}: {title} ({points} pts → {budget} hrs)
|
|
173
|
+
AB#{id}: {title} ({points} pts, {complexity} complexity → {budget} hrs)
|
|
160
174
|
─────────────────────────────────────────────────────────────
|
|
161
175
|
|
|
162
176
|
Proposed child task:
|
|
163
177
|
|
|
164
178
|
| Task title | Hours |
|
|
165
179
|
|------------------------------------------------|-------|
|
|
166
|
-
| {Prefix} - Implement: payments CSV export |
|
|
180
|
+
| {Prefix} - Implement: payments CSV export | 18 |
|
|
181
|
+
|
|
182
|
+
Complexity: medium — crosses API and client, follows the existing export pattern
|
|
183
|
+
Band for 5 pts: 12 / 18 / 24 (two to four days)
|
|
167
184
|
|
|
168
185
|
Approve? (yes / edit / skip / cancel-all)
|
|
169
186
|
```
|
|
170
187
|
|
|
171
|
-
For unpointed items, the header line reads `(no points — estimated from description → {budget} hrs)`.
|
|
188
|
+
For unpointed items, the header line reads `(no points — estimated from description, {complexity} complexity → {budget} hrs)`.
|
|
172
189
|
|
|
173
190
|
**Wait for the user.**
|
|
174
191
|
|
|
@@ -188,15 +188,17 @@ Use the **modified Fibonacci scale**: `1, 2, 3, 5, 8, 13, 21`. Anything larger t
|
|
|
188
188
|
|
|
189
189
|
**Not assisted — never discount:** thin or missing AC, novel design with no precedent, third-party integrations, cross-team dependencies, production data migrations, security/compliance review, hand-verified infra or pipeline work, and human wall-time for review/UAT/deploy gates. These are what justify 8 points and above.
|
|
190
190
|
|
|
191
|
-
| Points | Looks like |
|
|
192
|
-
|
|
193
|
-
| **1** | Trivial change — copy tweak, single config value, one-line fix |
|
|
194
|
-
| **2** | Small, well-understood change in one file or one layer |
|
|
195
|
-
| **3** | A couple of files / one feature slice, some new tests |
|
|
196
|
-
| **5** | Crosses layers, or a new component/endpoint following existing patterns |
|
|
197
|
-
| **8** | Multi-area change with real new logic, migrations, or non-trivial edge cases |
|
|
198
|
-
| **13** | Large feature, several moving parts — likely benefits from being split |
|
|
199
|
-
| **21** | Very large / high uncertainty — should almost certainly be split |
|
|
191
|
+
| Points | Effort (a day = 6 hrs) | Looks like |
|
|
192
|
+
|--------|----------------------|-----------|
|
|
193
|
+
| **1** | under 2 hours | Trivial change — copy tweak, single config value, one-line fix |
|
|
194
|
+
| **2** | 2 hours to half a day | Small, well-understood change in one file or one layer |
|
|
195
|
+
| **3** | half a day to two days | A couple of files / one feature slice, some new tests |
|
|
196
|
+
| **5** | two to four days | Crosses layers, or a new component/endpoint following existing patterns |
|
|
197
|
+
| **8** | around a week | Multi-area change with real new logic, migrations, or non-trivial edge cases |
|
|
198
|
+
| **13** | one to two weeks | Large feature, several moving parts — likely benefits from being split |
|
|
199
|
+
| **21** | two to three weeks | Very large / high uncertainty — should almost certainly be split |
|
|
200
|
+
|
|
201
|
+
The **effort column is a sanity check on the number, not the way to pick it** — a point value that implies four days for something a senior finishes before lunch is wrong regardless of how the description reads. A day is **6 productive hours**; a week is 5 days (30 hours). `/plan-backlog` Step 5b turns the point value back into a Task hour band, so these two scales have to agree.
|
|
200
202
|
|
|
201
203
|
Fold in what 3d found — code reconnaissance that shrinks or grows the work changes the number. For items classified **Blocking gaps** or **appears already implemented**, propose **no points** — the comment is the deliverable for those.
|
|
202
204
|
|
|
@@ -41,15 +41,17 @@ These are what dominate an estimate at 8 points and above. If a big number is dr
|
|
|
41
41
|
|
|
42
42
|
Rough sizing rubric (calibrated for a senior developer, assisted by Claude, working in a codebase they know):
|
|
43
43
|
|
|
44
|
-
| Points | Looks like |
|
|
45
|
-
|
|
46
|
-
| **1** | Trivial change — copy tweak, single config value, one-line fix. No new tests needed. |
|
|
47
|
-
| **2** | Small, well-understood change in one file or one layer. Existing patterns cover it. |
|
|
48
|
-
| **3** | Touches a couple of files / one feature slice. Some new tests. No architectural questions. |
|
|
49
|
-
| **5** | Crosses layers (e.g. API + UI), or introduces a new component/endpoint following existing patterns. Real test coverage needed. |
|
|
50
|
-
| **8** | Multi-area change with meaningful new logic, migrations, or non-trivial edge cases. Unknowns a senior can resolve but that still take real wall-time. |
|
|
51
|
-
| **13** | Large feature, several moving parts, or significant unknowns even for a senior. Likely benefits from being split. |
|
|
52
|
-
| **21** | Very large / high uncertainty. Should almost certainly be split into multiple stories. |
|
|
44
|
+
| Points | Effort (a day = 6 hrs) | How much is known | Looks like |
|
|
45
|
+
|--------|----------------------|-------------------|-----------|
|
|
46
|
+
| **1** | under 2 hours | everything | Trivial change — copy tweak, single config value, one-line fix. No new tests needed. |
|
|
47
|
+
| **2** | 2 hours to half a day | almost everything | Small, well-understood change in one file or one layer. Existing patterns cover it. |
|
|
48
|
+
| **3** | half a day to two days | most of it | Touches a couple of files / one feature slice. Some new tests. No architectural questions. |
|
|
49
|
+
| **5** | two to four days | some open questions | Crosses layers (e.g. API + UI), or introduces a new component/endpoint following existing patterns. Real test coverage needed. |
|
|
50
|
+
| **8** | around a week | little — real unknowns | Multi-area change with meaningful new logic, migrations, or non-trivial edge cases. Unknowns a senior can resolve but that still take real wall-time. |
|
|
51
|
+
| **13** | one to two weeks | not much | Large feature, several moving parts, or significant unknowns even for a senior. Likely benefits from being split. |
|
|
52
|
+
| **21** | two to three weeks | almost nothing | Very large / high uncertainty. Should almost certainly be split into multiple stories. |
|
|
53
|
+
|
|
54
|
+
The **effort column is a sanity check on the number, not the way to pick it** — a point value that implies four days for something a senior finishes before lunch is wrong regardless of how the description reads. A day is **6 productive hours**; a week is 5 days (30 hours). `/plan-backlog` Step 5b turns the point value back into a Task hour band, so these two scales have to agree.
|
|
53
55
|
|
|
54
56
|
Adjust upward for: unclear acceptance criteria, missing UX, data migrations, cross-team coordination, security/compliance review, or anything tagged `spike`/`research`.
|
|
55
57
|
|
|
@@ -162,19 +162,21 @@ Every rework round gets its own Task work item, parented under the original User
|
|
|
162
162
|
|
|
163
163
|
### Suggest hours
|
|
164
164
|
|
|
165
|
-
Estimate the rework effort from the approved plan.
|
|
165
|
+
Estimate the rework effort from the approved plan. The rows below are **scope** — how much there is to change. Where you land between two adjacent rows is **complexity** — how settled the change is:
|
|
166
|
+
|
|
167
|
+
A day is **6 productive hours**; a week is 5 days (30 hours).
|
|
166
168
|
|
|
167
169
|
| Hours | Looks like |
|
|
168
170
|
|-------|-----------|
|
|
169
171
|
| **0.5** | Trivial — copy tweak, single config value, one-line fix. No new tests. |
|
|
170
172
|
| **1** | One file, well-understood change. Maybe one new/updated test. |
|
|
171
173
|
| **2** | 2–3 files, one layer, follows existing patterns. Some new tests. |
|
|
172
|
-
| **
|
|
173
|
-
| **
|
|
174
|
-
| **
|
|
175
|
-
| **
|
|
174
|
+
| **3** | Half a day — multiple files across layers, or new logic in one area. Real test coverage. |
|
|
175
|
+
| **6** | A full day — meaningful new logic, several files, edge cases. |
|
|
176
|
+
| **12** | Two days — significant rework, multiple unknowns to resolve. |
|
|
177
|
+
| **18+** | Three days or more — flag that this rework probably should have been a fresh story. |
|
|
176
178
|
|
|
177
|
-
|
|
179
|
+
Take the **lower** of two adjacent rows for low-complexity rework — mechanical fixes, pure config, a pattern already used elsewhere in the file. Take the **higher** for high-complexity rework — ambiguous feedback, missing UX, data migrations, or regression risk in unrelated areas. Don't reach for the top of the ladder just because the round touches several files.
|
|
178
180
|
|
|
179
181
|
### Prompt the user
|
|
180
182
|
|
|
@@ -111,14 +111,15 @@ These rules apply to **every** command or flow that creates or estimates work it
|
|
|
111
111
|
|
|
112
112
|
1. **Every work item Claude creates gets a proposed story point estimate** — User Stories and Bugs are never created unpointed by default. Estimates use the modified Fibonacci scale (`1, 2, 3, 5, 8, 13, 21`), calibrated for a **senior developer working with Claude assistance** — no ramp-up padding; pad only for what seniority + Claude can't shortcut (novel work, missing AC, cross-team coordination, external dependencies).
|
|
113
113
|
2. **The user must agree before points are written.** Claude proposes the number with a one-line rationale; the user confirms, adjusts (their number wins), or skips. Points are never set silently.
|
|
114
|
-
3. **
|
|
115
|
-
4. **
|
|
114
|
+
3. **Task hours come from complexity, not from the top of the points band.** Story points give a Task an hour *band* (low / medium / high). Which end of that band the estimate lands on is decided by the complexity of the work, judged separately from its size: low complexity → the low end, medium → the middle, high → the high end. Points already carry size, so a big-but-routine story is a high-points, low-complexity Task and gets low-end hours. The bands are contiguous and anchored to a **6-hour day** (1 pt = under 2 hrs, 2 pts = up to half a day, 3 pts = half a day to 2 days, 5 pts = 2–4 days, 8 pts = about a week, and up) — a 1-pointer can never cost more than a 2-pointer's floor. Every hour proposal states the band and the complexity call that picked within it. See `/plan-backlog` Step 5b for the table and the complexity rubric.
|
|
115
|
+
4. **Setting points moves the item to Dev Ready.** Any time story points are written to a **User Story**, **Bug**, or **Hot Fix**, `System.State` is set to `Dev Ready` in the same update. Never for Features or Tasks (a Feature's state is never touched; Tasks carry hour estimates, not points), and never backward — an item already past Dev Ready keeps its state, with a note.
|
|
116
|
+
5. **An item that can't be quoted drops out of the estimating queue — by a mechanism that depends on its type.** When `/quote` or `/quote-backlog` can't produce a number because information is missing — no acceptance criteria (or, on a bug, no repro steps), contradictory description, unbounded scope, or a possible duplicate the creator has to confirm — the item drops out of the sweep along with the feedback comment, so the next run isn't re-analyzing items still waiting on their creator:
|
|
116
117
|
- **User Story** → moves from `Design Approved` back to `Design Review`. Only from `Design Approved`; an item at `Dev Ready` or anything `Active` or later keeps its state.
|
|
117
118
|
- **Bug / Hot Fix** → gets a **`needs-info` tag**, state left at `New`. **These types have no design states** in the CSI Development template — no `Design Review` and no `Design Approved` — so there is no earlier state to send them back to. Append to `System.Tags`; never overwrite the field. Removing the tag re-queues the bug.
|
|
118
119
|
- **Feature / Task** → neither; report the gap and stop.
|
|
119
120
|
|
|
120
121
|
An item that merely **needs to be split** keeps its state and gets no tag — the work is understood, nothing is missing.
|
|
121
|
-
|
|
122
|
+
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 → …`.
|
|
122
123
|
|
|
123
124
|
### Branching Strategy
|
|
124
125
|
|
|
@@ -240,7 +241,7 @@ Running `/implement` on a **Feature** implements its child User Stories in **wav
|
|
|
240
241
|
|
|
241
242
|
**Work item states:** `/implement` moves the work item to `Active` when implementation starts — for a single work item (User Story, Bug, Hot Fix) right after the branch is created; for a Feature, each child story goes `Active` as its wave begins. When the PR is created, each implemented child **User Story** moves to `Code Review` — the **Feature's state is never changed**. The Feature is a parent container; it advances only as its child stories are verified/closed. Only child **Tasks** are ever closed — never the stories or the Feature.
|
|
242
243
|
|
|
243
|
-
**Hours live on the Task.** `/implement` will not implement a story that has no open child Task: if there isn't one, it proposes a title and an hour estimate (from the story's points, same mapping `/plan-backlog` uses) and creates it once the user agrees — exactly one per story, inheriting the parent's assignee, area, and iteration. When the PR is created, that Task is closed with the hours worked logged to `CompletedWork` and `RemainingWork` zeroed. Closing happens at **PR creation**, not at merge, so hours are recorded while they're still known. Never enable Azure DevOps's "Complete associated work items" when merging — it transitions the parent too.
|
|
244
|
+
**Hours live on the Task.** `/implement` will not implement a story that has no open child Task: if there isn't one, it proposes a title and an hour estimate (from the story's points, same mapping `/plan-backlog` uses — points set the hour band, complexity picks where in the band it lands) and creates it once the user agrees — exactly one per story, inheriting the parent's assignee, area, and iteration. When the PR is created, that Task is closed with the hours worked logged to `CompletedWork` and `RemainingWork` zeroed. Closing happens at **PR creation**, not at merge, so hours are recorded while they're still known. Never enable Azure DevOps's "Complete associated work items" when merging — it transitions the parent too.
|
|
244
245
|
|
|
245
246
|
#### Slash Commands Reference
|
|
246
247
|
|