@houseofwolvesllc/claude-scrum-skill 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +277 -236
- package/bin/install.js +31 -0
- package/package.json +1 -1
- package/skills/project-cleanup/SKILL.md +32 -59
- package/skills/project-emulate/SKILL.md +1 -1
- package/skills/project-orchestrate/SKILL.md +257 -58
- package/skills/project-scaffold/SKILL.md +364 -4
- package/skills/project-spec/SKILL.md +60 -0
- package/skills/project-spec/templates/spec-template.md +63 -0
- package/skills/shared/config.json +14 -0
- package/skills/{project-scaffold → shared}/references/CONVENTIONS.md +16 -0
- package/skills/shared/references/PERSONAS.md +270 -0
- package/skills/shared/references/PROVIDERS.md +471 -0
- package/skills/sprint-plan/SKILL.md +124 -6
- package/skills/sprint-release/SKILL.md +118 -6
- package/skills/sprint-status/SKILL.md +60 -6
|
@@ -11,25 +11,32 @@ Fully autonomous project lifecycle driver. Plans sprints, executes stories via p
|
|
|
11
11
|
|
|
12
12
|
## Before You Start
|
|
13
13
|
|
|
14
|
-
1. Read `../
|
|
15
|
-
2. Read the
|
|
16
|
-
3.
|
|
17
|
-
4.
|
|
18
|
-
|
|
14
|
+
1. Read `../shared/references/CONVENTIONS.md` for all project management standards. Follow these conventions exactly.
|
|
15
|
+
2. Read `../shared/config.json` to determine the scaffolding mode (`scaffolding` key: `"local"`, `"github"`, `"jira"`, or `"trello"`, default: `"local"`). If `"local"`, also read the `paths.backlog` value. Read `../shared/references/PROVIDERS.md` for provider-specific API commands when using a remote provider.
|
|
16
|
+
3. Read the project's `CLAUDE.md` (if it exists) for project-specific rules. **All subagents you spawn must also read and follow `CLAUDE.md`** — include this instruction explicitly in every subagent prompt.
|
|
17
|
+
4. Read `../shared/references/PERSONAS.md` for role preambles. When spawning
|
|
18
|
+
subagents, select the persona matching each story's `persona:*` label (GitHub mode)
|
|
19
|
+
or `persona` frontmatter field (local mode). If no persona exists, use `impl` (the default).
|
|
20
|
+
5. **Terminology:** Always refer to milestones as **"epics"** in all user-facing text, summaries, and conversational output. The word "milestone" should only appear in GitHub API commands and code — never in communication with the user.
|
|
21
|
+
6. **If `scaffolding: "github"`:** Confirm the `gh` CLI is authenticated by running `gh auth status`. Identify the target repository. If the user doesn't specify, detect from the current git remote or ask.
|
|
22
|
+
7. **If `scaffolding: "jira"`:** Verify `JIRA_SITE`, `JIRA_EMAIL`, and `JIRA_API_TOKEN` env vars are set. Read `jira.project_key` from config.json.
|
|
23
|
+
8. **If `scaffolding: "trello"`:** Verify `TRELLO_API_KEY` and `TRELLO_TOKEN` env vars are set. Read `trello.board_id` from config.json.
|
|
24
|
+
9. **If `scaffolding: "local"`:** Skip authentication. Stories are tracked in local backlog files. Git operations (branches, commits, merges) still apply.
|
|
19
25
|
|
|
20
26
|
### Standing Authorizations
|
|
21
27
|
|
|
22
28
|
The following actions are pre-authorized and do NOT require user confirmation during orchestration:
|
|
23
29
|
|
|
24
|
-
- **Merge release
|
|
30
|
+
- **Merge release branches to `development`** — via PR (GitHub) or direct merge (local), after CI passes
|
|
25
31
|
- **Delete merged story and release branches** — standard cleanup after merge
|
|
26
32
|
- **Create and switch between feature/release branches** — normal git workflow
|
|
33
|
+
- **Update story file frontmatter** (local mode only) — status, sprint, persona fields
|
|
27
34
|
|
|
28
35
|
The following actions are NEVER authorized:
|
|
29
36
|
|
|
30
37
|
- **Merge anything to `main`** — always requires explicit human review
|
|
31
38
|
- **Force push or destructive git operations** — never permitted
|
|
32
|
-
- **Close or delete issues without completing them** — incomplete work rolls over
|
|
39
|
+
- **Close or delete issues/stories without completing them** — incomplete work rolls over
|
|
33
40
|
|
|
34
41
|
---
|
|
35
42
|
|
|
@@ -37,23 +44,23 @@ The following actions are NEVER authorized:
|
|
|
37
44
|
|
|
38
45
|
`$ARGUMENTS` can be:
|
|
39
46
|
|
|
40
|
-
1. **A PRD file path** (e.g., `path/to/prd.md`) — scaffold the PRD first via `/project-scaffold`, then orchestrate **only the epics and stories created from that PRD**.
|
|
41
|
-
2. **A repo identifier** (e.g., `owner/repo
|
|
42
|
-
3. **A PRD file path + repo identifier** (e.g., `path/to/prd.md owner/repo
|
|
43
|
-
4. **Nothing** — detect the repo from the current git remote and orchestrate all open epics/stories.
|
|
47
|
+
1. **A PRD file path** (e.g., `path/to/prd.md`) — scaffold the PRD first via `/project-scaffold`, then orchestrate **only the epics and stories created from that PRD**. In GitHub mode the repo is detected from the current git remote (or ask the user).
|
|
48
|
+
2. **A repo identifier** (e.g., `owner/repo`, GitHub mode only) — orchestrate **all open epics and stories** already on the project board. No scaffolding step.
|
|
49
|
+
3. **A PRD file path + repo identifier** (e.g., `path/to/prd.md owner/repo`, GitHub mode only) — scaffold the PRD into the specified repo, then orchestrate only those epics/stories.
|
|
50
|
+
4. **Nothing** — GitHub mode: detect the repo from the current git remote and orchestrate all open epics/stories. Local mode: orchestrate all open epics/stories in the configured backlog directory.
|
|
44
51
|
|
|
45
|
-
**How to distinguish:** If an argument is a path to an existing file, treat it as a PRD. Otherwise treat it as a repo identifier.
|
|
52
|
+
**How to distinguish:** If an argument is a path to an existing file, treat it as a PRD. Otherwise treat it as a repo identifier (GitHub mode only).
|
|
46
53
|
|
|
47
54
|
### Scope Rules
|
|
48
55
|
|
|
49
|
-
- **Phase 1 (Epic Completion Loop):** When a PRD is provided, only execute epics/stories that were created from that PRD.
|
|
56
|
+
- **Phase 1 (Epic Completion Loop):** When a PRD is provided, only execute epics/stories that were created from that PRD. In GitHub mode, record the milestone numbers and issue numbers. In local mode, record the epic directory names and story file paths. When no PRD is provided, execute all open epics/stories.
|
|
50
57
|
- **Phase 2 (Emulation Hardening Loop):** Always applies to the **entire codebase** regardless of whether a PRD was provided. Emulation validates the whole project, not just the new work.
|
|
51
58
|
|
|
52
59
|
---
|
|
53
60
|
|
|
54
61
|
## State Management
|
|
55
62
|
|
|
56
|
-
Orchestration state is persisted to `.claude/orchestration-state.md` so progress survives context compaction, usage caps, and session restarts. This file is human-readable markdown.
|
|
63
|
+
Orchestration state is persisted to `.claude-scrum-skill/orchestration-state.md` so progress survives context compaction, usage caps, and session restarts. This file is human-readable markdown.
|
|
57
64
|
|
|
58
65
|
### State File Structure
|
|
59
66
|
|
|
@@ -84,11 +91,13 @@ Orchestration state is persisted to `.claude/orchestration-state.md` so progress
|
|
|
84
91
|
| Dashboard | pending | 8 | 0 | 8 |
|
|
85
92
|
|
|
86
93
|
## Current Sprint Stories
|
|
87
|
-
| # | Title | Executor | Status | Subagent |
|
|
88
|
-
|
|
89
|
-
| 12 | Auth endpoint | claude | done | — |
|
|
90
|
-
| 13 | Login UI | claude | in-progress | agent-3 |
|
|
91
|
-
| 14 | API keys | human | skipped | — |
|
|
94
|
+
| # | Title | Executor | Persona | Status | Subagent |
|
|
95
|
+
|---|-------|----------|---------|--------|----------|
|
|
96
|
+
| 12 | Auth endpoint | claude | impl | done | — |
|
|
97
|
+
| 13 | Login UI | claude | impl | in-progress | agent-3 |
|
|
98
|
+
| 14 | API keys | human | — | skipped | — |
|
|
99
|
+
| 15 | CI pipeline | claude | ops | done | — |
|
|
100
|
+
| 16 | Auth ADR | claude | research | done | — |
|
|
92
101
|
|
|
93
102
|
## Dependency Map
|
|
94
103
|
- #15 blocked-by #12 → unblocked (completed)
|
|
@@ -103,7 +112,7 @@ Orchestration state is persisted to `.claude/orchestration-state.md` so progress
|
|
|
103
112
|
|
|
104
113
|
### State Operations
|
|
105
114
|
|
|
106
|
-
**On startup**, check for an existing `.claude/orchestration-state.md`:
|
|
115
|
+
**On startup**, check for an existing `.claude-scrum-skill/orchestration-state.md`:
|
|
107
116
|
- If found and `Status: running` → resume from the recorded position
|
|
108
117
|
- If found and `Status: paused` → ask the user whether to resume or restart
|
|
109
118
|
- If found and `Status: completed` → ask the user whether to start a fresh run
|
|
@@ -130,10 +139,15 @@ Drive all open epics to completion through iterative sprint cycles.
|
|
|
130
139
|
/project-scaffold <prd-path>
|
|
131
140
|
```
|
|
132
141
|
|
|
133
|
-
After scaffolding completes
|
|
142
|
+
After scaffolding completes:
|
|
143
|
+
- **GitHub mode:** Capture the milestone numbers and issue numbers that were created. Record them in the state file under `Scoped Milestones` and `Scoped Issues`.
|
|
144
|
+
- **Local mode:** Capture the epic directory names and story file paths created. Record them in the state file under `Scoped Epics` and `Scoped Stories`.
|
|
145
|
+
|
|
146
|
+
These define the **orchestration scope** — Phase 1 will only plan and execute sprints for these specific epics and stories.
|
|
134
147
|
|
|
135
148
|
**If no PRD was provided** — detect and assess the existing project state:
|
|
136
149
|
|
|
150
|
+
**GitHub mode:**
|
|
137
151
|
```bash
|
|
138
152
|
# Get open epics (milestones)
|
|
139
153
|
gh api repos/<owner/repo>/milestones --jq '.[] | select(.state=="open") | {number, title, open_issues, closed_issues}'
|
|
@@ -145,6 +159,13 @@ gh issue list --repo <owner/repo> --state open --label "type:story" --json numbe
|
|
|
145
159
|
# Check for any in-progress work
|
|
146
160
|
```
|
|
147
161
|
|
|
162
|
+
**Local mode:**
|
|
163
|
+
```bash
|
|
164
|
+
# Read all epic directories with open status
|
|
165
|
+
# For each <backlog-path>/<epic-slug>/_epic.md, check frontmatter status
|
|
166
|
+
# Read all story files, filter by status != "done"
|
|
167
|
+
```
|
|
168
|
+
|
|
148
169
|
All open epics and stories are in scope for Phase 1.
|
|
149
170
|
|
|
150
171
|
**In both cases**, present a brief overview to the user:
|
|
@@ -169,13 +190,12 @@ Initialize the state file and proceed.
|
|
|
169
190
|
|
|
170
191
|
### Step 2: Sprint Planning
|
|
171
192
|
|
|
172
|
-
Invoke the `/sprint-plan` skill
|
|
193
|
+
Invoke the `/sprint-plan` skill:
|
|
173
194
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
```
|
|
195
|
+
- **GitHub mode:** `/sprint-plan <owner/repo>`
|
|
196
|
+
- **Local mode:** `/sprint-plan` (reads from configured backlog path)
|
|
177
197
|
|
|
178
|
-
**If PRD-scoped:** Ensure the sprint plan only pulls from the scoped
|
|
198
|
+
**If PRD-scoped:** Ensure the sprint plan only pulls from the scoped stories (recorded in the state file). If `/sprint-plan` proposes stories outside the scope, exclude them — they belong to other work and should not be mixed into this orchestration run.
|
|
179
199
|
|
|
180
200
|
Since this is autonomous mode, accept the default sprint plan without waiting for user confirmation — the skill's proposed sprint based on priority ordering and velocity target is the plan.
|
|
181
201
|
|
|
@@ -189,21 +209,47 @@ Execute all `executor:claude` stories in the current sprint. Skip `executor:huma
|
|
|
189
209
|
|
|
190
210
|
For stories with no unresolved dependencies, spawn parallel Task subagents (using the `Task` tool with `subagent_type: "Bash"` or `subagent_type: "general-purpose"` as appropriate). Each subagent receives:
|
|
191
211
|
|
|
212
|
+
**Persona resolution:** Before spawning each subagent, resolve its persona:
|
|
213
|
+
|
|
214
|
+
1. **GitHub mode:** Check the story's labels for a `persona:*` label (e.g., `persona:ops`, `persona:research`).
|
|
215
|
+
**Local mode:** Read the `persona` field from the story file's frontmatter.
|
|
216
|
+
2. If found, load the matching preamble from `../shared/references/PERSONAS.md`.
|
|
217
|
+
3. If no persona exists, use the `impl` preamble.
|
|
218
|
+
4. If the persona references a name not defined in `PERSONAS.md`, fall back
|
|
219
|
+
to `impl` and log a warning.
|
|
220
|
+
|
|
221
|
+
**Subagent prompt structure:**
|
|
222
|
+
|
|
192
223
|
```
|
|
224
|
+
<persona preamble from PERSONAS.md>
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
193
228
|
You are executing story #<number> for repo <owner/repo>.
|
|
194
229
|
|
|
195
|
-
**IMPORTANT:** First read the project's CLAUDE.md file if it exists, and
|
|
230
|
+
**IMPORTANT:** First read the project's CLAUDE.md file if it exists, and
|
|
231
|
+
follow all instructions in it. CLAUDE.md is authoritative for stack,
|
|
232
|
+
patterns, and style — it overrides any general guidance in this preamble.
|
|
196
233
|
|
|
197
234
|
**Story:** <title>
|
|
198
|
-
**Acceptance criteria:** <from issue body>
|
|
199
|
-
**Branch strategy:** Create branch `story/<number>-<slug>` from
|
|
235
|
+
**Acceptance criteria:** <from issue body or story file>
|
|
236
|
+
**Branch strategy:** Create branch `story/<number>-<slug>` from
|
|
237
|
+
`release/<epic-slug>`, implement, commit, push, and open a PR targeting
|
|
238
|
+
`release/<epic-slug>`.
|
|
200
239
|
|
|
201
240
|
After implementation:
|
|
241
|
+
|
|
242
|
+
GitHub mode:
|
|
202
243
|
1. Open a PR with a clear description of changes
|
|
203
244
|
2. Ensure CI passes
|
|
204
245
|
3. The PR should target the release branch, NOT development or main
|
|
246
|
+
4. Do NOT merge the PR — just open it and report back.
|
|
205
247
|
|
|
206
|
-
|
|
248
|
+
Local mode:
|
|
249
|
+
1. Commit all changes to the story branch
|
|
250
|
+
2. Merge the story branch into release/<epic-slug>
|
|
251
|
+
3. Push the release branch
|
|
252
|
+
4. Report back what was implemented.
|
|
207
253
|
```
|
|
208
254
|
|
|
209
255
|
**Execution rules:**
|
|
@@ -212,11 +258,26 @@ Do NOT merge the PR — just open it and report back.
|
|
|
212
258
|
2. **Concurrency limit:** Run up to 3 subagents in parallel to avoid rate limiting.
|
|
213
259
|
3. **Progress tracking:** As each subagent completes, update the state file and check if any blocked stories are now unblocked. Spawn newly unblocked stories immediately.
|
|
214
260
|
4. **Failure handling:** If a subagent fails, retry once with additional context about the failure. If it fails again, mark the story as blocked with a note and continue with remaining stories.
|
|
215
|
-
5. **
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
261
|
+
5. **Story completion:**
|
|
262
|
+
- **GitHub mode:** After a story PR is opened and CI passes, merge it to the release branch:
|
|
263
|
+
```bash
|
|
264
|
+
gh pr merge <pr-number> --repo <owner/repo> --squash --auto
|
|
265
|
+
```
|
|
266
|
+
- **Local mode:** The subagent merges the story branch directly into the release branch. After completion, update the story file's frontmatter to `status: done`.
|
|
219
267
|
6. **Skip human/cowork stories:** Log them as skipped in the state file. They roll over naturally during sprint release.
|
|
268
|
+
7. **Persona routing:** When resolving personas:
|
|
269
|
+
- **GitHub mode:**
|
|
270
|
+
```bash
|
|
271
|
+
persona=$(gh issue view <number> --repo <owner/repo> --json labels \
|
|
272
|
+
--jq '[.labels[].name | select(startswith("persona:"))] | first // empty' \
|
|
273
|
+
| sed 's/persona://')
|
|
274
|
+
persona=${persona:-impl}
|
|
275
|
+
```
|
|
276
|
+
- **Local mode:** Read the `persona` field from the story file's frontmatter. Default to `impl` if not set.
|
|
277
|
+
|
|
278
|
+
Load the corresponding preamble section from `../shared/references/PERSONAS.md`
|
|
279
|
+
and prepend it to the subagent prompt. Log the persona assignment in the
|
|
280
|
+
state file.
|
|
220
281
|
|
|
221
282
|
**Progress updates** — Print a concise progress line every 2-3 story completions:
|
|
222
283
|
|
|
@@ -228,24 +289,111 @@ Sprint 2: 5/8 stories done (13/19 pts) — #21 auth middleware ✓, #22 rate lim
|
|
|
228
289
|
|
|
229
290
|
Once all `executor:claude` stories in the sprint are complete (or retried and marked blocked), invoke the sprint release skill:
|
|
230
291
|
|
|
292
|
+
- **GitHub mode:** `/sprint-release <owner/repo>`
|
|
293
|
+
- **Local mode:** `/sprint-release` (reads from configured backlog path)
|
|
294
|
+
|
|
295
|
+
This closes the sprint, handles rolled-over stories, and merges the release branch to `development` (local mode: direct merge; GitHub mode: opens a release PR).
|
|
296
|
+
|
|
297
|
+
### Step 5: Review and Merge to Development
|
|
298
|
+
|
|
299
|
+
After `/sprint-release` completes, run the automated review gate before
|
|
300
|
+
finalizing.
|
|
301
|
+
|
|
302
|
+
**Step 5a: Automated Review**
|
|
303
|
+
|
|
304
|
+
Spawn a review subagent using the `review` persona from
|
|
305
|
+
`../shared/references/PERSONAS.md`:
|
|
306
|
+
|
|
307
|
+
**GitHub mode:**
|
|
308
|
+
```
|
|
309
|
+
Task({
|
|
310
|
+
subagent_type: "general-purpose",
|
|
311
|
+
prompt: "<review preamble from PERSONAS.md>
|
|
312
|
+
|
|
313
|
+
Review PR #<pr-number> in <owner/repo>.
|
|
314
|
+
|
|
315
|
+
The PR merges release/<epic-slug> into development and contains all
|
|
316
|
+
stories from Sprint <N>:
|
|
317
|
+
<list story numbers, titles, and their personas>
|
|
318
|
+
|
|
319
|
+
Read the full diff. Post review comments anchored to specific files/lines.
|
|
320
|
+
End with a summary comment: finding counts by severity and a
|
|
321
|
+
recommendation of merge, merge-with-followup-issues, or block.
|
|
322
|
+
|
|
323
|
+
IMPORTANT: Read the project's CLAUDE.md first — review against the
|
|
324
|
+
project's actual conventions, not generic standards."
|
|
325
|
+
})
|
|
231
326
|
```
|
|
232
|
-
|
|
327
|
+
|
|
328
|
+
**Local mode:**
|
|
233
329
|
```
|
|
330
|
+
Task({
|
|
331
|
+
subagent_type: "general-purpose",
|
|
332
|
+
prompt: "<review preamble from PERSONAS.md>
|
|
234
333
|
|
|
235
|
-
|
|
334
|
+
Review the sprint release merge on the development branch.
|
|
236
335
|
|
|
237
|
-
|
|
336
|
+
Run: git diff <pre-merge-sha>..HEAD on the development branch.
|
|
238
337
|
|
|
239
|
-
|
|
338
|
+
This merge contains all stories from Sprint <N>:
|
|
339
|
+
<list story file paths, titles, and their personas>
|
|
240
340
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
341
|
+
Read the full diff. Report findings with specific file paths and line
|
|
342
|
+
numbers. End with a summary: finding counts by severity and a
|
|
343
|
+
recommendation of accept, accept-with-followups, or revert.
|
|
344
|
+
|
|
345
|
+
IMPORTANT: Read the project's CLAUDE.md first — review against the
|
|
346
|
+
project's actual conventions, not generic standards."
|
|
347
|
+
})
|
|
348
|
+
```
|
|
244
349
|
|
|
245
|
-
|
|
350
|
+
**Step 5b: Act on Review Findings**
|
|
351
|
+
|
|
352
|
+
- **If recommendation is `block`/`revert`** (any critical findings):
|
|
353
|
+
Pause orchestration. Present the critical findings to the user and ask
|
|
354
|
+
how to proceed. Update state file with `Status: paused`.
|
|
355
|
+
In local mode, the merge already landed — if the user chooses to revert,
|
|
356
|
+
run `git revert <merge-commit>` on development.
|
|
357
|
+
|
|
358
|
+
- **If recommendation is `merge-with-followup-issues`/`accept-with-followups`** (warnings only):
|
|
359
|
+
Create follow-up items for each warning finding:
|
|
360
|
+
- **GitHub mode:**
|
|
361
|
+
```bash
|
|
362
|
+
gh issue create --repo <owner/repo> --title "Follow-up: <finding summary>" \
|
|
363
|
+
--body "<finding detail from review>" \
|
|
364
|
+
--label "type:chore" --label "source:review" --label "executor:claude"
|
|
365
|
+
```
|
|
366
|
+
- **Local mode:** Create a story file in the appropriate epic directory:
|
|
367
|
+
```markdown
|
|
368
|
+
<!-- <backlog-path>/<epic-slug>/NNN-followup-<slug>.md -->
|
|
369
|
+
---
|
|
370
|
+
title: "Follow-up: <finding summary>"
|
|
371
|
+
status: backlog
|
|
372
|
+
executor: claude
|
|
373
|
+
priority: P2-medium
|
|
374
|
+
points: 2
|
|
375
|
+
labels: [type:chore, source:review]
|
|
376
|
+
persona: impl
|
|
377
|
+
---
|
|
378
|
+
<finding detail from review>
|
|
379
|
+
```
|
|
380
|
+
Then proceed.
|
|
381
|
+
|
|
382
|
+
- **If recommendation is `merge`/`accept`** (clean or info-only):
|
|
383
|
+
Proceed.
|
|
384
|
+
|
|
385
|
+
**Step 5c: Merge (GitHub mode only)**
|
|
386
|
+
|
|
387
|
+
```bash
|
|
246
388
|
gh pr merge <pr-number> --repo <owner/repo> --squash
|
|
247
389
|
```
|
|
248
390
|
|
|
391
|
+
In local mode, `/sprint-release` already merged the release branch to
|
|
392
|
+
development directly — no additional merge step needed.
|
|
393
|
+
|
|
394
|
+
**Skip review:** If the environment variable `ORCHESTRATE_SKIP_REVIEW=1` is
|
|
395
|
+
set, skip Step 5a/5b entirely (original behavior).
|
|
396
|
+
|
|
249
397
|
If merge conflicts exist:
|
|
250
398
|
1. Attempt automatic resolution by rebasing the release branch onto `development`
|
|
251
399
|
2. If auto-resolution fails, **pause orchestration** and escalate to the user:
|
|
@@ -281,22 +429,32 @@ Never delete `main` or `development`.
|
|
|
281
429
|
|
|
282
430
|
After each sprint cycle, check if the current epic is complete:
|
|
283
431
|
|
|
432
|
+
**GitHub mode:**
|
|
284
433
|
```bash
|
|
285
434
|
# Check remaining open issues for this epic
|
|
286
435
|
gh api repos/<owner/repo>/milestones/<milestone-number> --jq '{open_issues, closed_issues}'
|
|
287
436
|
```
|
|
288
437
|
|
|
438
|
+
**Local mode:**
|
|
439
|
+
```bash
|
|
440
|
+
# Count story statuses in the epic directory
|
|
441
|
+
# Read all story files in <backlog-path>/<epic-slug>/, check frontmatter status
|
|
442
|
+
```
|
|
443
|
+
|
|
289
444
|
**If open issues remain** (excluding `executor:human`/`executor:cowork` stories that were skipped):
|
|
290
445
|
- Check if remaining stories are all human/cowork → if yes, the epic's claude-executable work is done, move to next epic
|
|
291
446
|
- Otherwise → loop back to Step 2 for another sprint
|
|
292
447
|
|
|
293
|
-
**If all
|
|
294
|
-
```bash
|
|
295
|
-
# Close the epic
|
|
296
|
-
gh api repos/<owner/repo>/milestones/<milestone-number> -X PATCH -f state="closed"
|
|
297
|
-
```
|
|
448
|
+
**If all stories are complete:**
|
|
298
449
|
|
|
299
|
-
|
|
450
|
+
- **GitHub mode:**
|
|
451
|
+
```bash
|
|
452
|
+
# Close the epic
|
|
453
|
+
gh api repos/<owner/repo>/milestones/<milestone-number> -X PATCH -f state="closed"
|
|
454
|
+
```
|
|
455
|
+
- **Local mode:** Update `_epic.md` frontmatter to `status: closed`.
|
|
456
|
+
|
|
457
|
+
**If more in-scope epics remain** → move to the next epic (by priority) and loop back to Step 2. When PRD-scoped, only consider epics listed in the state file's scoped epics.
|
|
300
458
|
|
|
301
459
|
**If all in-scope epics are complete** → transition to Phase 2.
|
|
302
460
|
|
|
@@ -327,11 +485,11 @@ Invoke the project emulation skill:
|
|
|
327
485
|
/project-emulate
|
|
328
486
|
```
|
|
329
487
|
|
|
330
|
-
This produces the full emulation report in `.claude/reports/emulation-report/`, including `ISSUES.md` with categorized findings.
|
|
488
|
+
This produces the full emulation report in `.claude-scrum-skill/reports/emulation-report/`, including `ISSUES.md` with categorized findings.
|
|
331
489
|
|
|
332
490
|
### Step 9: Parse Findings
|
|
333
491
|
|
|
334
|
-
Read and parse `.claude/reports/emulation-report/ISSUES.md`. Extract findings by severity:
|
|
492
|
+
Read and parse `.claude-scrum-skill/reports/emulation-report/ISSUES.md`. Extract findings by severity:
|
|
335
493
|
|
|
336
494
|
- **Critical** — must fix (blocks production readiness)
|
|
337
495
|
- **Warning** — should fix (degrades quality or reliability)
|
|
@@ -353,7 +511,7 @@ Generating hardening PRD for 10 actionable findings.
|
|
|
353
511
|
|
|
354
512
|
### Step 10: Generate Hardening PRD
|
|
355
513
|
|
|
356
|
-
Create a PRD document at `.claude/hardening-prd-run-<N>.md` from the emulation findings. This PRD becomes the input for scaffolding a hardening epic.
|
|
514
|
+
Create a PRD document at `.claude-scrum-skill/hardening-prd-run-<N>.md` from the emulation findings. This PRD becomes the input for scaffolding a hardening epic.
|
|
357
515
|
|
|
358
516
|
Structure the PRD as:
|
|
359
517
|
|
|
@@ -388,7 +546,7 @@ Only include critical and warning findings. Info-level findings are logged but n
|
|
|
388
546
|
Invoke project scaffold with the hardening PRD to create a single "Hardening (Run N)" epic:
|
|
389
547
|
|
|
390
548
|
```
|
|
391
|
-
/project-scaffold .claude/hardening-prd-run-<N>.md
|
|
549
|
+
/project-scaffold .claude-scrum-skill/hardening-prd-run-<N>.md
|
|
392
550
|
```
|
|
393
551
|
|
|
394
552
|
This creates the milestone, issues, labels, and branches for the hardening work.
|
|
@@ -445,7 +603,7 @@ This runs across the **entire codebase** and automatically fixes:
|
|
|
445
603
|
- Dead and duplicated code (unused exports, files, dependencies, commented-out code)
|
|
446
604
|
- Failing tests and coverage gaps (targets 50% minimum across all metrics)
|
|
447
605
|
|
|
448
|
-
After cleanup completes, read the report at `.claude/reports/cleanup-report/SUMMARY.md`:
|
|
606
|
+
After cleanup completes, read the report at `.claude-scrum-skill/reports/cleanup-report/SUMMARY.md`:
|
|
449
607
|
|
|
450
608
|
- **If all phases PASS** → proceed to Step 15 (Completion Summary)
|
|
451
609
|
- **If any phase FAIL** → review the report, attempt a second cleanup pass. If issues persist after two passes, log remaining issues and proceed to Step 15 with a note
|
|
@@ -457,7 +615,7 @@ Print a phase transition summary:
|
|
|
457
615
|
|
|
458
616
|
**Build:** ✅ zero errors, zero warnings
|
|
459
617
|
**Lint:** ✅ zero violations
|
|
460
|
-
**
|
|
618
|
+
**Project Principles:** ✅ compliant (or SKIP if no principles in CLAUDE.md)
|
|
461
619
|
**Dead code:** ✅ none detected
|
|
462
620
|
**Tests:** ✅ all passing, <pct>% coverage
|
|
463
621
|
|
|
@@ -486,10 +644,10 @@ Print a comprehensive summary of the entire orchestration run:
|
|
|
486
644
|
### Phase 3 — Project Cleanup
|
|
487
645
|
- **Build:** ✅ clean / ⚠️ <N> remaining issues
|
|
488
646
|
- **Lint:** ✅ clean / ⚠️ <N> remaining issues
|
|
489
|
-
- **
|
|
647
|
+
- **Project Principles:** ✅ compliant / ⚠️ <N> violations / ⏭️ skipped (no principles in CLAUDE.md)
|
|
490
648
|
- **Dead code:** ✅ none / ⚠️ <N> items remaining
|
|
491
649
|
- **Tests:** ✅ passing (<pct>% coverage) / ⚠️ <N> failing, <pct>% coverage
|
|
492
|
-
- **Full report:** .claude/reports/cleanup-report/SUMMARY.md
|
|
650
|
+
- **Full report:** .claude-scrum-skill/reports/cleanup-report/SUMMARY.md
|
|
493
651
|
|
|
494
652
|
### Timeline
|
|
495
653
|
- Started: <timestamp>
|
|
@@ -504,6 +662,45 @@ Print a comprehensive summary of the entire orchestration run:
|
|
|
504
662
|
|
|
505
663
|
Update the state file with `Status: completed`.
|
|
506
664
|
|
|
665
|
+
### Step 16: ADR Update
|
|
666
|
+
|
|
667
|
+
Review the work completed during this orchestration run and determine if any
|
|
668
|
+
decisions merit an Architecture Decision Record.
|
|
669
|
+
|
|
670
|
+
Read the ADR output path from `../shared/config.json` (key: `paths.adr`,
|
|
671
|
+
default: `.claude-scrum-skill/adr`).
|
|
672
|
+
|
|
673
|
+
1. Read all existing ADRs in the configured ADR directory to understand what's
|
|
674
|
+
already documented and the numbering/format convention in use.
|
|
675
|
+
2. Review the epics completed, hardening fixes applied, and any significant
|
|
676
|
+
technical choices made during orchestration (e.g., new libraries adopted,
|
|
677
|
+
patterns introduced, infrastructure changes, security model decisions).
|
|
678
|
+
3. For each decision that is **non-obvious, hard to reverse, or would
|
|
679
|
+
surprise a future contributor**, create a new ADR following the existing
|
|
680
|
+
format and numbering sequence.
|
|
681
|
+
4. Skip decisions that are already covered by an existing ADR or that are
|
|
682
|
+
trivial/self-evident from the code.
|
|
683
|
+
|
|
684
|
+
Print a summary:
|
|
685
|
+
|
|
686
|
+
```
|
|
687
|
+
### ADRs
|
|
688
|
+
- **Existing:** <N> ADRs in .claude-scrum-skill/adr/
|
|
689
|
+
- **Created:** <N> new ADRs
|
|
690
|
+
- ADR-<NNN>: <title>
|
|
691
|
+
- ADR-<NNN>: <title>
|
|
692
|
+
- **Skipped:** No new decisions warranting ADRs (if none created)
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
### Step 17: Clean Up State File
|
|
696
|
+
|
|
697
|
+
Delete `.claude-scrum-skill/orchestration-state.md` so the next orchestration
|
|
698
|
+
run starts with a clean slate:
|
|
699
|
+
|
|
700
|
+
```bash
|
|
701
|
+
rm -f .claude-scrum-skill/orchestration-state.md
|
|
702
|
+
```
|
|
703
|
+
|
|
507
704
|
---
|
|
508
705
|
|
|
509
706
|
## Communication Pattern
|
|
@@ -517,13 +714,15 @@ Keep the user informed without being noisy:
|
|
|
517
714
|
| Every 2-3 stories | Progress line with counts and latest completions |
|
|
518
715
|
| Story failure | Immediate single-line alert with story number and error |
|
|
519
716
|
| Sprint released | Sprint scorecard — 3-4 lines |
|
|
717
|
+
| Review complete | Recommendation + finding counts — 2 lines |
|
|
520
718
|
| Merge to development | Single confirmation line |
|
|
521
719
|
| Epic completed | Epic summary — 3-4 lines |
|
|
522
720
|
| Phase transition | Full phase summary |
|
|
523
721
|
| Hardening run start | Run number and finding counts |
|
|
524
722
|
| Cleanup started | Single line: "Running project cleanup..." |
|
|
525
723
|
| Cleanup complete | Phase 3 summary — 5-6 lines with pass/fail per dimension |
|
|
526
|
-
|
|
|
724
|
+
| ADRs updated | Count of new ADRs + titles — 2-3 lines |
|
|
725
|
+
| Orchestration complete | Full completion summary (Step 17) |
|
|
527
726
|
| Error/pause | Immediate alert with context and options |
|
|
528
727
|
|
|
529
728
|
---
|
|
@@ -541,7 +740,7 @@ Keep the user informed without being noisy:
|
|
|
541
740
|
- Update state file with conflict details for resume
|
|
542
741
|
|
|
543
742
|
### State File Corruption
|
|
544
|
-
- If `.claude/orchestration-state.md` is unreadable or malformed, reconstruct state from GitHub:
|
|
743
|
+
- If `.claude-scrum-skill/orchestration-state.md` is unreadable or malformed, reconstruct state from GitHub:
|
|
545
744
|
```bash
|
|
546
745
|
# Get sprint and story status from the project board
|
|
547
746
|
# Get branch state from git
|