@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chris1807/claude-kit",
3
- "version": "2.1.51",
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
- Propose the hours from the parent's Story Points (this mirrors `/plan-backlog` Step 5b — keep the two tables in sync):
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 | Hour budget |
188
- |--------|-------------|
189
- | 1 | 3 hrs |
190
- | 2 | 6 hrs |
191
- | 3 | 10 hrs |
192
- | 5 | 16 hrs |
193
- | 8 | 28 hrs |
194
- | 13 | 48 hrs |
195
- | 21 | 75 hrs |
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
- 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. Add 20–30% for `spike` / `research` / `unknown-stack` tags.
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
- 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 using the same senior-with-Claude calibration. Say which basis you used.
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} | 16 |
222
+ | {PREFIX} - Implement: {short summary} | 18 |
209
223
 
210
- Basis: {n} story points {n}h (or: no points estimated from the approved plan)
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 | 10 | 3 pts |
481
- | AB#1236 | COM - Implement: export screen | 16 | 5 pts |
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 → budget, draft the single task — and returns a structured proposal (story id, points, budget, and one `{title, hours}` task). Use a `schema` so each agent returns validated JSON.
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 → total hour budget
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 budget below already discounts 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.
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
- Use this mapping (calibrated for a senior developer with Claude assistance, at ~6 productive hours per day):
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
- | Points | Hour budget | Notes |
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
- If the points value isn't on the Fibonacci scale, round to the nearest entry above. If the story has tags like `spike`, `research`, or `unknown-stack`, add 20–30% on top — those are the cases where neither seniority nor the assist helps.
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 full hour budget from 5b, rounded to a whole hour.
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 | 24 |
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, derive the hour budget, draft the single task — and returns a structured proposal (item id, points, budget, and one `{title, hours}` task). Use a `schema` so each agent returns validated JSON.
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 budget below already discounts 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.
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
- **If the item has Story Points**, use this mapping (calibrated for a senior developer with Claude assistance, at ~6 productive hours per day):
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
- | Points | Hour budget | Notes |
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
- If the points value isn't on the Fibonacci scale, round to the nearest entry above. If the item has tags like `spike`, `research`, or `unknown-stack`, add 20–30% on top — those are the cases where neither seniority nor the assist helps.
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
- **If the item has no Story Points**, estimate the hours directly from the description, acceptance criteria, and repro steps judge which row of the table the work most resembles and use that hour budget. Mark the proposal `(no pointsestimated 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.
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 full hour budget from 6b, rounded to a whole hour.
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 | 24 |
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. Use this rubriccalibrate against scope, not abstract complexity:
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
- | **4** | Multiple files across layers, or new logic in one area. Real test coverage. |
173
- | **8** | Most of a day — meaningful new logic, several files, edge cases. |
174
- | **16** | Two days — significant rework, multiple unknowns to resolve. |
175
- | **24+** | Three days or more — flag that this rework probably should have been a fresh story. |
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
- Adjust upward for: ambiguous feedback, missing UX, data migrations, regression risk in unrelated areas. Adjust downward for: pure config changes or mechanical fixes.
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. **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.
115
- 4. **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:
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 backwardan 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
- 5. **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
+ 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