@chris1807/claude-kit 2.1.49 → 2.1.51
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/create-work-item.md +56 -16
- package/templates/commands/edit-work-item.md +13 -6
- package/templates/commands/implement.md +2 -2
- package/templates/commands/plan-backlog.md +7 -5
- package/templates/commands/plan-sprint.md +7 -5
- package/templates/commands/quote-backlog.md +5 -1
- package/templates/commands/quote.md +26 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chris1807/claude-kit",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.51",
|
|
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": {
|
|
@@ -195,6 +195,8 @@ For a **Bug**, **User Story**, or **Hot Fix**, every work item this command crea
|
|
|
195
195
|
|
|
196
196
|
Estimate using the same rubric as `/quote`: the **modified Fibonacci scale** (`1, 2, 3, 5, 8, 13, 21`), calibrated for a **senior developer working with Claude assistance** in a codebase they know. Don't pad for ramp-up, routine architectural decisions, or stack familiarity — only for things a senior cannot shortcut: genuinely novel work, unresolved open questions, cross-team coordination, external dependencies. If the work looks larger than 21 points, recommend splitting the item instead of proposing a number.
|
|
197
197
|
|
|
198
|
+
Repetition and boilerplate are assisted work — price them near the bottom of the range and size the item by its hardest distinct problem, not by how many files it touches. The full assisted / not-assisted breakdown lives in `/quote` Step 2; that file is the authority if the two ever drift.
|
|
199
|
+
|
|
198
200
|
Present the estimate:
|
|
199
201
|
|
|
200
202
|
```
|
|
@@ -328,19 +330,43 @@ Apply this pass to every section (Description, Acceptance Criteria, Steps to Rep
|
|
|
328
330
|
|
|
329
331
|
The Step 3 draft is **one document for the user to read**, not the shape of one field. Before rendering, split it section by section and route each section to its own Azure DevOps field:
|
|
330
332
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
|
333
|
+
**Routing depends on the work item type, and the types do not carry the same fields.** This matters more than it looks: **Azure DevOps accepts a write to a field a type does not have.** The value persists and reads back over the API while no form ever renders it — nothing raises, nothing logs. So a wrong field here is invisible in exactly the way a bug report should never be.
|
|
334
|
+
|
|
335
|
+
Verify with `mcp__azure-devops__wit_work_item` (`action: get_type`) rather than assuming. In the CSI Development process:
|
|
336
|
+
|
|
337
|
+
**User Story** — Description and Acceptance Criteria, as you would expect:
|
|
338
|
+
|
|
339
|
+
| Draft section | Goes to |
|
|
340
|
+
|---|---|
|
|
341
|
+
| `### Description` | `System.Description` — plus the mockup `<img>`, user-supplied images, `Out of Scope`, `Open Questions` |
|
|
342
|
+
| `### Acceptance Criteria` | `Microsoft.VSTS.Common.AcceptanceCriteria` — **never** also in the description |
|
|
343
|
+
|
|
344
|
+
**Bug** — its form renders only **Repro Steps** and **System Info**. It has **no Acceptance Criteria field**, and `System.Description` has **no control on the Bug form**, so anything routed there is invisible to a human reader:
|
|
345
|
+
|
|
346
|
+
| Draft section | Goes to |
|
|
347
|
+
|---|---|
|
|
348
|
+
| `### Description`, `### Steps to Reproduce`, `### Expected Behavior`, `### Actual Behavior`, `### Acceptance Criteria`, `### Open Questions` | `Microsoft.VSTS.TCM.ReproSteps` — composed into one document, each under its own `<h3>`, in that order |
|
|
349
|
+
| `### Environment / Scope` | `Microsoft.VSTS.TCM.SystemInfo` |
|
|
350
|
+
| (the same composed body) | `System.Description` — a labelled **duplicate**, for tools that read it without checking the type. Never unique content. |
|
|
351
|
+
|
|
352
|
+
Do **not** send `Microsoft.VSTS.Common.AcceptanceCriteria` on a Bug. Still *write* acceptance criteria — they go into the composed body, so the item is still estimable — just not into a field the type does not have.
|
|
353
|
+
|
|
354
|
+
**Hot Fix** — its form renders **Description** and **Repro Steps**. It has neither an Acceptance Criteria field nor a System Info field:
|
|
355
|
+
|
|
356
|
+
| Draft section | Goes to |
|
|
357
|
+
|---|---|
|
|
358
|
+
| `### Description`, `### Production Impact`, `### Open Questions` | `System.Description` |
|
|
359
|
+
| `### Steps to Reproduce`, `### Expected Behavior`, `### Actual Behavior`, `### Environment / Scope` | `Microsoft.VSTS.TCM.ReproSteps` |
|
|
360
|
+
|
|
361
|
+
**Omit an empty section entirely** — never emit a bare `<h3>` with nothing under it. A heading with no body reads as content that went missing.
|
|
338
362
|
|
|
339
363
|
**The rendered `System.Description` must not contain an "Acceptance Criteria" heading or its criteria** — not as `<h3>`, not as `<strong>`, not as a bolded line, not "for readability", not "so it reads as a complete document". Azure DevOps renders the AC field as its own section on the work item form, so a copy in the description gives the reader two lists that drift apart while leaving the real field empty. It also breaks estimation: an empty AC field is exactly what `/quote`, `/quote-backlog`, and `/plan-backlog` read to decide an item can't be sized, so criteria in the wrong field make a fully-specified story look unestimable and bounce it back to its creator.
|
|
340
364
|
|
|
341
365
|
**Drop the section's own heading when it becomes a field.** `Microsoft.VSTS.Common.AcceptanceCriteria` holds the criteria list alone — an `<ol>` or `<ul>`, not `<h3>Acceptance Criteria</h3>` followed by the list. Same for `ReproSteps`. The field label is already on the form.
|
|
342
366
|
|
|
343
|
-
**
|
|
367
|
+
**On a type that HAS the AC field, always write it explicitly — never leave the placeholder.** Some process templates seed a new item's `Microsoft.VSTS.Common.AcceptanceCriteria` with tip text like `💡 Tip: Add "@serena rewrite" to Description for AI suggestions Define acceptance criteria: - [ ] - [ ] - [ ]`. That is a **placeholder, not content**, and it reads as non-empty to every downstream sweep — an item carrying it looks like it has acceptance criteria when it has none. Writing the field is what clears the placeholder.
|
|
368
|
+
|
|
369
|
+
This applies to **User Story**. It does **not** apply to Bug or Hot Fix: neither type carries the field, so there is no placeholder to clear and the write would go into a hole. For those two, the criteria live in `ReproSteps` per the routing above — which is also what `/quote` and `/quote-backlog` read to decide a bug is estimable.
|
|
344
370
|
|
|
345
371
|
### Call the create API
|
|
346
372
|
|
|
@@ -350,20 +376,24 @@ Call `mcp__azure-devops__wit_create_work_item` with:
|
|
|
350
376
|
- **workItemType**: `Feature`, `Bug`, `User Story`, or `Hot Fix` (two words, exact casing)
|
|
351
377
|
- **title**: the approved title (with prefix)
|
|
352
378
|
- **fields**: a JSON Patch document setting:
|
|
353
|
-
- `System.Description` — the rendered HTML description (with embedded mockup `<img>` and any user-supplied images)
|
|
354
|
-
- `Microsoft.VSTS.Common.AcceptanceCriteria` —
|
|
379
|
+
- `System.Description` — the rendered HTML description (with embedded mockup `<img>` and any user-supplied images). On a **Bug** this is the labelled duplicate of the composed body, not the description alone
|
|
380
|
+
- `Microsoft.VSTS.Common.AcceptanceCriteria` — **User Story only.** The rendered criteria list and **only** the criteria (no `<h3>Acceptance Criteria</h3>` wrapper, and no copy of it in `System.Description`); writing it is what clears the process template's placeholder tip. **Do not send this field on a Bug or a Hot Fix** — neither type has it
|
|
355
381
|
- `Microsoft.VSTS.Scheduling.StoryPoints` — the points agreed in Step 4 (omit entirely if the user skipped, and **always** for a Feature)
|
|
356
382
|
- For Features:
|
|
357
383
|
- Render `Business Value`, `Scope`, `Out of Scope`, and `Success Criteria` into the description. Put `Success Criteria` in `Microsoft.VSTS.Common.AcceptanceCriteria` **only if** the process template exposes that field on Feature — if the create call rejects it, fold the block into the description and retry rather than dropping it.
|
|
358
384
|
- `Microsoft.VSTS.Common.BusinessValue` — only if the user supplied a number. Never invent one.
|
|
359
385
|
- Omit `Microsoft.VSTS.Scheduling.StoryPoints` entirely.
|
|
360
|
-
- For Bugs
|
|
361
|
-
- `Microsoft.VSTS.TCM.ReproSteps` — the
|
|
362
|
-
-
|
|
386
|
+
- For Bugs:
|
|
387
|
+
- `Microsoft.VSTS.TCM.ReproSteps` — the **whole composed body**: description, steps, expected behavior, actual behavior, acceptance criteria and open questions, each under its own `<h3>`. This is the Bug's field of record; its form shows no Description control.
|
|
388
|
+
- `Microsoft.VSTS.TCM.SystemInfo` — the `Environment / Scope` section. Omit the field entirely when there is no environment to record, rather than writing an empty value that leaves a blank box on the form.
|
|
363
389
|
- `Microsoft.VSTS.Common.Priority` — the chosen Priority (1–4)
|
|
364
390
|
- `Microsoft.VSTS.Common.Severity` — the chosen Severity (`1 - Critical`, `2 - High`, `3 - Medium`, `4 - Low`)
|
|
391
|
+
- For Hot Fixes:
|
|
392
|
+
- `Microsoft.VSTS.TCM.ReproSteps` — steps, expected behavior, actual behavior and `Environment / Scope` (this type has no System Info field). If the `Hot Fix` type in this process template doesn't expose `ReproSteps`, fold them into `System.Description` rather than dropping them.
|
|
393
|
+
- Render the `Production Impact` section into `System.Description` as an `<h3>` block above the description body.
|
|
394
|
+
- No Priority/Severity — a Hot Fix is urgent by definition.
|
|
365
395
|
|
|
366
|
-
If the `Open Questions` section is non-empty, append it
|
|
396
|
+
If the `Open Questions` section is non-empty, append it as a clearly-labeled HTML block (`<h3>Open Questions</h3><ul>...</ul>`) **to the field that work item type displays** — the composed `ReproSteps` body on a **Bug**, `System.Description` on a **User Story**, **Hot Fix**, or **Feature**. Putting it in the description of a Bug hides it from every reader.
|
|
367
397
|
|
|
368
398
|
### Move to Dev Ready (pointed items only)
|
|
369
399
|
|
|
@@ -410,12 +440,22 @@ If a story fails to create or link, report which ones succeeded and which didn't
|
|
|
410
440
|
|
|
411
441
|
## Step 10: Confirm
|
|
412
442
|
|
|
413
|
-
**Read the item back first
|
|
443
|
+
**Read the item back first**, and check the fields that type actually renders — a write to a field the type lacks *succeeds*, so reading back the wrong field proves nothing.
|
|
444
|
+
|
|
445
|
+
For a **User Story**, fetch `System.Description` and `Microsoft.VSTS.Common.AcceptanceCriteria`:
|
|
414
446
|
|
|
415
447
|
1. The criteria are in `Microsoft.VSTS.Common.AcceptanceCriteria` — not the placeholder tip, not empty.
|
|
416
448
|
2. `System.Description` contains no "Acceptance Criteria" heading and none of the criteria.
|
|
417
449
|
|
|
418
|
-
|
|
450
|
+
For a **Bug**, fetch `Microsoft.VSTS.TCM.ReproSteps` and `Microsoft.VSTS.TCM.SystemInfo`:
|
|
451
|
+
|
|
452
|
+
1. `ReproSteps` carries every section — description, steps, expected, actual, acceptance criteria — each under its own heading.
|
|
453
|
+
2. The environment is in `SystemInfo`.
|
|
454
|
+
3. No section appears **only** in `System.Description`, which the Bug form does not display.
|
|
455
|
+
|
|
456
|
+
For a **Hot Fix**, fetch `System.Description` and `Microsoft.VSTS.TCM.ReproSteps`, and confirm the narrative is in the former and the reproduction detail in the latter.
|
|
457
|
+
|
|
458
|
+
If a check fails the write didn't take — fix it with `wit_update_work_item` before reporting success. Don't report a created item you haven't read back.
|
|
419
459
|
|
|
420
460
|
After creation, report:
|
|
421
461
|
|
|
@@ -15,6 +15,7 @@ Read the work item with `expand: Relations` so links and children come back. Col
|
|
|
15
15
|
- `System.Description`, `Microsoft.VSTS.Common.AcceptanceCriteria`
|
|
16
16
|
- `Microsoft.VSTS.Scheduling.StoryPoints`, `Custom.Order`
|
|
17
17
|
- For Bugs / Hot Fixes: `Microsoft.VSTS.TCM.ReproSteps`, `Microsoft.VSTS.Common.Priority`, `Microsoft.VSTS.Common.Severity`
|
|
18
|
+
- For Bugs: `Microsoft.VSTS.TCM.SystemInfo` — the Bug form's second rendered field, where the environment belongs
|
|
18
19
|
- Parent, children, and **linked pull requests** (`ArtifactLink` relations)
|
|
19
20
|
- Comments — recent discussion often explains why a field says what it says
|
|
20
21
|
|
|
@@ -200,14 +201,20 @@ Default the comment question to **yes** for any item past `New`, and **no** for
|
|
|
200
201
|
|
|
201
202
|
Render every Markdown section to HTML first — Azure DevOps description and acceptance criteria fields do not render Markdown. Use the conversion table and the **emphasis and code spans** rules from `/create-work-item` Step 8: bold the noun phrase carrying each claim, wrap identifiers in `<code>`, use lists for 2+ parallel items, keep `### Headings` as `<h3>`. Preserve existing `<img>` tags exactly.
|
|
202
203
|
|
|
203
|
-
**Route each section to its own field
|
|
204
|
+
**Route each section to its own field, per work item type** — use the routing tables in `/create-work-item` Step 8. Editing is the moment routing gets silently undone: it is easy to render the whole reviewed document into the description and leave the real fields as they were. And a wrong field does not announce itself — **Azure DevOps accepts a write to a field a type does not carry**, so the value persists, reads back over the API, and renders nowhere.
|
|
204
205
|
|
|
205
|
-
**
|
|
206
|
+
**On a User Story:** acceptance criteria go in `Microsoft.VSTS.Common.AcceptanceCriteria`, never in `System.Description`. Write the criteria list alone into that field — no `<h3>Acceptance Criteria</h3>` wrapper — and make sure the description carries no copy of them.
|
|
206
207
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
208
|
+
**On a Bug:** there is no Acceptance Criteria field and no Description control on the form. The whole write-up — description, steps, expected, actual, criteria — belongs in `Microsoft.VSTS.TCM.ReproSteps`, the environment in `Microsoft.VSTS.TCM.SystemInfo`, and `System.Description` holds only a labelled duplicate of the body.
|
|
209
|
+
|
|
210
|
+
**On a Hot Fix:** the narrative stays in `System.Description`; steps, expected, actual and environment go to `Microsoft.VSTS.TCM.ReproSteps`. There is no System Info field on this type.
|
|
211
|
+
|
|
212
|
+
**Repair misfiled content when you find it.** If Step 2 found content in a field its type does not render, fix it as part of this edit even when the user didn't ask — it is the same content, moved to where a reader will actually see it:
|
|
213
|
+
|
|
214
|
+
- **User Story** — criteria living in the description (or an AC field holding only placeholder tip text): write them into `Microsoft.VSTS.Common.AcceptanceCriteria` and strip the heading and list out of `System.Description` in the same call.
|
|
215
|
+
- **Bug** — criteria sitting in `Microsoft.VSTS.Common.AcceptanceCriteria` (a field the type does not have, so nothing displays them) or a description that never appears on the form: fold both into the composed `ReproSteps` body. Leave the phantom AC value where it is rather than patching it — clearing a field the type lacks is one more write into a hole.
|
|
216
|
+
- Say so in the change set and in the Step 8 confirmation: `Acceptance criteria: moved from the AC field → Repro Steps (3 criteria)`. Never move content silently; the user needs to see which field shrank.
|
|
217
|
+
- This is a **move, not a rewrite** — the text is unchanged unless the user separately approved a reword.
|
|
211
218
|
|
|
212
219
|
Apply writes in this order, so a failure partway through leaves the most useful state behind:
|
|
213
220
|
|
|
@@ -194,9 +194,9 @@ Propose the hours from the parent's Story Points (this mirrors `/plan-backlog` S
|
|
|
194
194
|
| 13 | 48 hrs |
|
|
195
195
|
| 21 | 75 hrs |
|
|
196
196
|
|
|
197
|
-
Calibrated for a **senior developer** at ~6 productive hours per day —
|
|
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.
|
|
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 calibration. Say which basis you used.
|
|
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.
|
|
200
200
|
|
|
201
201
|
Show the proposal and **wait for the user**:
|
|
202
202
|
|
|
@@ -108,21 +108,23 @@ Fetch the work item again (Description and Acceptance Criteria fields) if not al
|
|
|
108
108
|
|
|
109
109
|
### 5b. Map Story Points → total hour budget
|
|
110
110
|
|
|
111
|
-
> **Assume a senior developer is the implementer.** The hour budget below already discounts for
|
|
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.
|
|
112
|
+
>
|
|
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.
|
|
112
114
|
|
|
113
|
-
Use this mapping (calibrated for a senior developer at ~6 productive hours per day):
|
|
115
|
+
Use this mapping (calibrated for a senior developer with Claude assistance, at ~6 productive hours per day):
|
|
114
116
|
|
|
115
117
|
| Points | Hour budget | Notes |
|
|
116
118
|
|--------|-------------|-------|
|
|
117
119
|
| 1 | 3 hrs | trivial change |
|
|
118
120
|
| 2 | 6 hrs | small, one-layer change |
|
|
119
121
|
| 3 | 10 hrs | one feature slice, modest tests |
|
|
120
|
-
| 5 | 16 hrs | cross-layer or new component (routine for
|
|
121
|
-
| 8 | 28 hrs | multi-area, real unknowns
|
|
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 |
|
|
122
124
|
| 13 | 48 hrs | large feature — should probably be split |
|
|
123
125
|
| 21 | 75 hrs | very large — almost certainly split |
|
|
124
126
|
|
|
125
|
-
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 seniority
|
|
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.
|
|
126
128
|
|
|
127
129
|
### 5c. Draft the single task
|
|
128
130
|
|
|
@@ -125,21 +125,23 @@ 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 is the implementer.** The hour budget below already discounts for
|
|
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.
|
|
129
|
+
>
|
|
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.
|
|
129
131
|
|
|
130
|
-
**If the item has Story Points**, use this mapping (calibrated for a senior developer at ~6 productive hours per day):
|
|
132
|
+
**If the item has Story Points**, use this mapping (calibrated for a senior developer with Claude assistance, at ~6 productive hours per day):
|
|
131
133
|
|
|
132
134
|
| Points | Hour budget | Notes |
|
|
133
135
|
|--------|-------------|-------|
|
|
134
136
|
| 1 | 3 hrs | trivial change |
|
|
135
137
|
| 2 | 6 hrs | small, one-layer change |
|
|
136
138
|
| 3 | 10 hrs | one feature slice, modest tests |
|
|
137
|
-
| 5 | 16 hrs | cross-layer or new component (routine for
|
|
138
|
-
| 8 | 28 hrs | multi-area, real unknowns
|
|
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 |
|
|
139
141
|
| 13 | 48 hrs | large feature — should probably be split |
|
|
140
142
|
| 21 | 75 hrs | very large — almost certainly split |
|
|
141
143
|
|
|
142
|
-
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 seniority
|
|
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.
|
|
143
145
|
|
|
144
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 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.
|
|
145
147
|
|
|
@@ -182,7 +182,11 @@ This is read-only reconnaissance. Skip it for non-technical items or when the co
|
|
|
182
182
|
|
|
183
183
|
Use the **modified Fibonacci scale**: `1, 2, 3, 5, 8, 13, 21`. Anything larger than 21 is flagged as "needs to be split" rather than given a number.
|
|
184
184
|
|
|
185
|
-
> **Assume a senior developer working with Claude assistance is the implementer.** Don't pad for ramp-up, routine architectural decisions, or familiarity with the stack — that's already priced into the rubric. Only pad for things a senior *cannot* shortcut: genuinely novel work, missing AC, cross-team coordination, or external dependencies. Do not apply a second seniority discount on top of the rubric.
|
|
185
|
+
> **Assume a senior developer working with Claude assistance is the implementer.** Don't pad for ramp-up, routine architectural decisions, or familiarity with the stack — that's already priced into the rubric. Only pad for things a senior *cannot* shortcut: genuinely novel work, missing AC, cross-team coordination, or external dependencies. Do not apply a second seniority discount, or a second Claude-assistance discount, on top of the rubric.
|
|
186
|
+
|
|
187
|
+
**Assisted work — price near the bottom of the range:** boilerplate and scaffolding, tests for already-specified behavior, mechanical refactors, applying a known pattern across many files, CRUD/forms/screens that mirror something already in the repo. Repetition is cheap — size the item by its hardest distinct problem, not by how many files it touches.
|
|
188
|
+
|
|
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.
|
|
186
190
|
|
|
187
191
|
| Points | Looks like |
|
|
188
192
|
|--------|-----------|
|
|
@@ -16,6 +16,29 @@ Use the **modified Fibonacci scale** for story points: `1, 2, 3, 5, 8, 13, 21`.
|
|
|
16
16
|
|
|
17
17
|
> **Assume a senior developer working with Claude assistance is the implementer.** Don't pad for ramp-up, routine architectural decisions, or familiarity with the stack. A senior is expected to read the codebase, find existing patterns, and resolve ordinary unknowns without help — that effort is already priced into the rubric below. Only pad for things a senior *cannot* shortcut: genuinely novel work, missing AC, cross-team coordination, or external dependencies.
|
|
18
18
|
|
|
19
|
+
**Claude assistance is part of the baseline, so price these near the bottom of their range** — the rubric already assumes them, don't discount a second time:
|
|
20
|
+
|
|
21
|
+
- Boilerplate and scaffolding — DTOs, mappers, interfaces, request/response models, registrations.
|
|
22
|
+
- Writing tests for behavior that's already specified.
|
|
23
|
+
- Mechanical refactors, renames, and applying a known pattern across many files.
|
|
24
|
+
- CRUD endpoints, forms, tables, and screens that mirror something already in the repo.
|
|
25
|
+
- Migrations and scripts with an obvious shape.
|
|
26
|
+
|
|
27
|
+
**Volume of similar code is cheap.** A story whose size comes mostly from repetition — six more fields, four more columns, another slice of an existing pattern — should not earn points for its file count. Size it by the hardest distinct problem in it, not by how much typing it implies.
|
|
28
|
+
|
|
29
|
+
**Claude assistance does not compress these — never discount them:**
|
|
30
|
+
|
|
31
|
+
- Ambiguous, thin, or missing acceptance criteria (see the *not estimable* rule below).
|
|
32
|
+
- Genuinely novel design decisions with no precedent in the codebase.
|
|
33
|
+
- Third-party integrations, external APIs, and anything gated on another system's behavior.
|
|
34
|
+
- Cross-team coordination, sign-off, or a dependency on someone else's work landing first.
|
|
35
|
+
- Data migrations against production data, and anything needing a rollback plan.
|
|
36
|
+
- Security, compliance, or privacy review.
|
|
37
|
+
- Infrastructure, pipeline, and environment work that has to be verified by hand.
|
|
38
|
+
- Human wall-time: code review turnaround, UAT, and deploy gates.
|
|
39
|
+
|
|
40
|
+
These are what dominate an estimate at 8 points and above. If a big number is driven purely by code volume rather than by items on this list, the estimate is probably too high.
|
|
41
|
+
|
|
19
42
|
Rough sizing rubric (calibrated for a senior developer, assisted by Claude, working in a codebase they know):
|
|
20
43
|
|
|
21
44
|
| Points | Looks like |
|
|
@@ -30,7 +53,9 @@ Rough sizing rubric (calibrated for a senior developer, assisted by Claude, work
|
|
|
30
53
|
|
|
31
54
|
Adjust upward for: unclear acceptance criteria, missing UX, data migrations, cross-team coordination, security/compliance review, or anything tagged `spike`/`research`.
|
|
32
55
|
|
|
33
|
-
Adjust downward for: pure config changes, mechanical refactors with good test coverage, work that mirrors an existing implementation, or anything where the senior will recognize the pattern immediately.
|
|
56
|
+
Adjust downward for: pure config changes, mechanical refactors with good test coverage, work that mirrors an existing implementation, repetition of an established pattern, or anything where the senior will recognize the pattern immediately.
|
|
57
|
+
|
|
58
|
+
State the assist in the reasoning when it moved the number — e.g. "5 rather than 8: the three new endpoints follow `PaymentsController` exactly, so the volume is assisted work; the only real unknown is the reconciliation rule." That makes the estimate reviewable instead of asserted.
|
|
34
59
|
|
|
35
60
|
If the item has child items, size each child as well and present the parent's total as the sum (rounded to the nearest Fibonacci number).
|
|
36
61
|
|