@houseofwolvesllc/claude-scrum-skill 1.5.1 → 1.7.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 +331 -230
- package/bin/install.js +31 -0
- package/package.json +4 -1
- package/skills/project-cleanup/SKILL.md +2 -2
- package/skills/project-emulate/SKILL.md +1 -1
- package/skills/project-orchestrate/SKILL.md +317 -60
- package/skills/project-scaffold/SKILL.md +711 -5
- package/skills/project-spec/SKILL.md +60 -0
- package/skills/project-spec/templates/spec-template.md +63 -0
- package/skills/shared/config.json +19 -0
- package/skills/{project-scaffold → shared}/references/CONVENTIONS.md +60 -0
- package/skills/shared/references/PERSONAS.md +270 -0
- package/skills/shared/references/PROVIDERS.md +471 -0
- package/skills/shared/templates/ADR-template.md +36 -0
- package/skills/shared/templates/CONTEXT-template.md +96 -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
|
@@ -9,16 +9,112 @@ Plan and populate the next sprint iteration for an existing GitHub Project.
|
|
|
9
9
|
|
|
10
10
|
## Before You Start
|
|
11
11
|
|
|
12
|
-
1. Read `../
|
|
13
|
-
2.
|
|
14
|
-
3.
|
|
12
|
+
1. Read `../shared/references/CONVENTIONS.md` for all project management standards. Follow these conventions exactly.
|
|
13
|
+
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 (default: `.claude-scrum-skill/backlog`).
|
|
14
|
+
3. Read `../shared/references/PROVIDERS.md` for provider-specific API commands when operating in remote mode.
|
|
15
|
+
4. **Terminology:** Always refer to milestones as **"epics"** in all user-facing text, summaries, and conversational output. The word "milestone" should only appear in API commands and code — never in communication with the user.
|
|
16
|
+
5. **If `scaffolding: "github"`:** Confirm the `gh` CLI is authenticated by running `gh auth status`.
|
|
17
|
+
6. **If `scaffolding: "jira"`:** Verify `JIRA_SITE`, `JIRA_EMAIL`, and `JIRA_API_TOKEN` env vars are set.
|
|
18
|
+
7. **If `scaffolding: "trello"`:** Verify `TRELLO_API_KEY` and `TRELLO_TOKEN` env vars are set.
|
|
19
|
+
8. **If `scaffolding: "local"`:** Skip authentication. The backlog is file-based.
|
|
15
20
|
|
|
16
21
|
## Input
|
|
17
22
|
|
|
18
|
-
`$ARGUMENTS` should be the repo identifier and optionally the project number.
|
|
19
|
-
If not provided, detect from the current git remote or ask the user.
|
|
23
|
+
**GitHub mode:** `$ARGUMENTS` should be the repo identifier and optionally the project number. If not provided, detect from the current git remote or ask the user.
|
|
20
24
|
|
|
21
|
-
|
|
25
|
+
**Jira/Trello mode:** `$ARGUMENTS` is ignored. Project key or board ID is read from config.json. Use the provider-specific API commands from PROVIDERS.md to list stories, create sprints, and assign stories — following the same planning logic as GitHub mode.
|
|
26
|
+
|
|
27
|
+
**Local mode:** `$ARGUMENTS` is ignored. Stories are read from the configured backlog path.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Local Planning Procedure
|
|
32
|
+
|
|
33
|
+
When `scaffolding: "local"`, plan sprints by reading and updating local
|
|
34
|
+
backlog files.
|
|
35
|
+
|
|
36
|
+
### Local Step 1: Assess Current State
|
|
37
|
+
|
|
38
|
+
Read the backlog directory structure:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# List all epics
|
|
42
|
+
ls <backlog-path>/*/_ epic.md
|
|
43
|
+
|
|
44
|
+
# Read PROJECT.md for sprint history
|
|
45
|
+
cat <backlog-path>/PROJECT.md
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
For each epic directory, read `_epic.md` (status) and all story files
|
|
49
|
+
(frontmatter). Gather:
|
|
50
|
+
- Stories by status (`backlog`, `ready`, `in-progress`, `done`)
|
|
51
|
+
- Any stories with `rolled-over` in their labels
|
|
52
|
+
- Dependency chains from `blocked_by` fields
|
|
53
|
+
|
|
54
|
+
### Local Step 2: Calculate Capacity
|
|
55
|
+
|
|
56
|
+
Same as GitHub mode — ask the user or use defaults (20 points/sprint).
|
|
57
|
+
|
|
58
|
+
### Local Step 3: Select Stories for Sprint
|
|
59
|
+
|
|
60
|
+
Same priority order as GitHub mode (rolled-over → unblocked → P0 → P1 → P2 →
|
|
61
|
+
dependencies-first). Read story points and priorities from frontmatter.
|
|
62
|
+
|
|
63
|
+
Present the proposed sprint to the user for confirmation.
|
|
64
|
+
|
|
65
|
+
### Persona Assignment
|
|
66
|
+
|
|
67
|
+
Same as GitHub mode — check for `persona` field in story frontmatter. If
|
|
68
|
+
missing, apply defaults based on labels:
|
|
69
|
+
|
|
70
|
+
| Story labels | Default persona |
|
|
71
|
+
|---|---|
|
|
72
|
+
| `scope:infra`, `scope:ci`, `scope:deploy`, `scope:migration` | `ops` |
|
|
73
|
+
| `needs:design`, `needs:spike` | `research` |
|
|
74
|
+
| All other stories | `impl` (no change needed) |
|
|
75
|
+
|
|
76
|
+
Update the story file's frontmatter `persona` field.
|
|
77
|
+
|
|
78
|
+
### Local Step 4: Assign Sprint
|
|
79
|
+
|
|
80
|
+
Create a sprint file at `<backlog-path>/sprints/sprint-<N>.md`:
|
|
81
|
+
|
|
82
|
+
```markdown
|
|
83
|
+
---
|
|
84
|
+
number: <N>
|
|
85
|
+
status: active
|
|
86
|
+
start: <ISO date>
|
|
87
|
+
end: <ISO date>
|
|
88
|
+
velocity_target: <points>
|
|
89
|
+
velocity_actual: null
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
# Sprint <N>
|
|
93
|
+
|
|
94
|
+
## Stories
|
|
95
|
+
| File | Title | Executor | Persona | Points | Priority | Status |
|
|
96
|
+
|------|-------|----------|---------|--------|----------|--------|
|
|
97
|
+
| core-api/001-user-auth.md | User auth endpoint | claude | impl | 5 | P1-high | ready |
|
|
98
|
+
...
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Update each selected story's frontmatter:
|
|
102
|
+
- Set `sprint: <N>`
|
|
103
|
+
- Set `status: ready` (or `backlog` if dependencies aren't met)
|
|
104
|
+
|
|
105
|
+
### Local Step 5: Ensure Branch Exists
|
|
106
|
+
|
|
107
|
+
Same as GitHub mode — create release branches from `development` for each
|
|
108
|
+
active epic. Git operations work identically in local mode.
|
|
109
|
+
|
|
110
|
+
### Local Step 6: Generate Sprint Kickoff Summary
|
|
111
|
+
|
|
112
|
+
Same format as GitHub mode, but reference story file paths instead of issue
|
|
113
|
+
numbers.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## GitHub Planning Procedure
|
|
22
118
|
|
|
23
119
|
### Step 1: Assess Current State
|
|
24
120
|
|
|
@@ -97,6 +193,28 @@ For each story in the sprint:
|
|
|
97
193
|
- Set Status to "Ready" (or "Backlog" if dependencies aren't met yet)
|
|
98
194
|
- Verify labels are correct
|
|
99
195
|
|
|
196
|
+
### Persona Assignment
|
|
197
|
+
|
|
198
|
+
For each story assigned to the sprint, check for an existing `persona:*`
|
|
199
|
+
label. If none exists, apply a default based on the story's other labels:
|
|
200
|
+
|
|
201
|
+
| Story labels | Default persona |
|
|
202
|
+
|---|---|
|
|
203
|
+
| `scope:infra`, `scope:ci`, `scope:deploy`, `scope:migration` | `persona:ops` |
|
|
204
|
+
| `needs:design`, `needs:spike` | `persona:research` |
|
|
205
|
+
| All other stories | No label needed (implicit `impl`) |
|
|
206
|
+
|
|
207
|
+
Apply the label:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Only if the story doesn't already have a persona:* label
|
|
211
|
+
gh issue edit <number> --repo <owner/repo> --add-label "persona:ops"
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
This is a default heuristic. Users can override by manually labeling stories
|
|
215
|
+
before planning. The orchestrator reads whatever label is present at
|
|
216
|
+
execution time.
|
|
217
|
+
|
|
100
218
|
### Step 5: Ensure Branch Exists
|
|
101
219
|
|
|
102
220
|
```bash
|
|
@@ -9,16 +9,128 @@ Close out a sprint: summarize work, handle incomplete stories, open the release
|
|
|
9
9
|
|
|
10
10
|
## Before You Start
|
|
11
11
|
|
|
12
|
-
1. Read `../
|
|
13
|
-
2.
|
|
14
|
-
3.
|
|
12
|
+
1. Read `../shared/references/CONVENTIONS.md` for project management standards.
|
|
13
|
+
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 (default: `.claude-scrum-skill/backlog`).
|
|
14
|
+
3. Read `../shared/references/PROVIDERS.md` for provider-specific API commands when operating in remote mode.
|
|
15
|
+
4. **Terminology:** Always refer to milestones as **"epics"** in all user-facing text, summaries, and conversational output. The word "milestone" should only appear in API commands and code — never in communication with the user.
|
|
16
|
+
5. **If `scaffolding: "github"`:** Confirm the `gh` CLI is authenticated.
|
|
17
|
+
6. **If `scaffolding: "jira"`:** Verify `JIRA_SITE`, `JIRA_EMAIL`, and `JIRA_API_TOKEN` env vars are set.
|
|
18
|
+
7. **If `scaffolding: "trello"`:** Verify `TRELLO_API_KEY` and `TRELLO_TOKEN` env vars are set.
|
|
19
|
+
8. **If `scaffolding: "local"`:** Skip authentication. Sprint data is in local files.
|
|
15
20
|
|
|
16
21
|
## Input
|
|
17
22
|
|
|
18
|
-
`$ARGUMENTS` should be the repo identifier and optionally the project number.
|
|
19
|
-
If not provided, detect from the current git remote or ask the user.
|
|
23
|
+
**GitHub mode:** `$ARGUMENTS` should be the repo identifier and optionally the project number. If not provided, detect from the current git remote or ask the user.
|
|
20
24
|
|
|
21
|
-
|
|
25
|
+
**Jira/Trello mode:** `$ARGUMENTS` is ignored. Project key or board ID is read from config.json. Use the provider-specific API commands from PROVIDERS.md to update story status and close sprints — following the same release logic as GitHub mode. PRs are still created via `gh` if the git host is GitHub, otherwise direct git merges (see PROVIDERS.md, PR / Code Review Operations).
|
|
26
|
+
|
|
27
|
+
**Local mode:** `$ARGUMENTS` is ignored. Sprint data is read from the configured backlog path.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Local Release Procedure
|
|
32
|
+
|
|
33
|
+
When `scaffolding: "local"`, release sprints by updating local backlog files
|
|
34
|
+
and performing git operations directly (no PRs, no GitHub issues).
|
|
35
|
+
|
|
36
|
+
### Local Step 1: Sprint Inventory
|
|
37
|
+
|
|
38
|
+
Find the active sprint and read all its stories:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Find active sprint
|
|
42
|
+
grep -l 'status: active' <backlog-path>/sprints/sprint-*.md
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Read each story file referenced in the sprint. Categorize as done,
|
|
46
|
+
in-progress, ready, or blocked based on frontmatter `status`.
|
|
47
|
+
|
|
48
|
+
Also check git branch state:
|
|
49
|
+
```bash
|
|
50
|
+
git fetch origin
|
|
51
|
+
# Story branches merged into release branch
|
|
52
|
+
git branch -r --merged origin/release/<epic-slug> | grep 'origin/story/'
|
|
53
|
+
# Unmerged story branches
|
|
54
|
+
git branch -r --no-merged origin/release/<epic-slug> | grep 'origin/story/'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Local Step 2: Handle Incomplete Stories
|
|
58
|
+
|
|
59
|
+
For stories still open:
|
|
60
|
+
|
|
61
|
+
1. **In Progress:** Ask the user — merge the story branch now, or roll over?
|
|
62
|
+
2. **Ready (never started):** Update frontmatter: add `rolled-over` to labels,
|
|
63
|
+
set `sprint: null` (will be picked up by next sprint plan).
|
|
64
|
+
3. **Blocked:** Update frontmatter: set `sprint: null`, keep `blocked` status.
|
|
65
|
+
|
|
66
|
+
### Local Step 3: Merge Release Branch to Development
|
|
67
|
+
|
|
68
|
+
In local mode, merge directly instead of opening a PR:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Ensure release branch is up to date
|
|
72
|
+
git checkout release/<epic-slug> && git pull
|
|
73
|
+
|
|
74
|
+
# Merge to development
|
|
75
|
+
git checkout development && git pull
|
|
76
|
+
git merge release/<epic-slug> --no-ff -m "Release: Sprint <N> — <Epic Name>"
|
|
77
|
+
git push origin development
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
If merge conflicts exist:
|
|
81
|
+
- Attempt automatic resolution
|
|
82
|
+
- If auto-resolution fails, pause and escalate to the user
|
|
83
|
+
|
|
84
|
+
### Local Step 4: Clean Up Merged Branches
|
|
85
|
+
|
|
86
|
+
Same git operations as GitHub mode — delete merged story and release branches.
|
|
87
|
+
|
|
88
|
+
### Local Step 5: Update Local State
|
|
89
|
+
|
|
90
|
+
Update the sprint file frontmatter:
|
|
91
|
+
```yaml
|
|
92
|
+
status: completed
|
|
93
|
+
velocity_actual: <points completed>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Update completed story files:
|
|
97
|
+
```yaml
|
|
98
|
+
status: done
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
If all stories in an epic are done, update `_epic.md`:
|
|
102
|
+
```yaml
|
|
103
|
+
status: closed
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Local Step 6: Generate Release Report
|
|
107
|
+
|
|
108
|
+
Same format as GitHub mode, but without PR links. Instead report:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
## Sprint <N> Release Complete (Local Mode)
|
|
112
|
+
|
|
113
|
+
**Merge:** release/<epic-slug> → development (direct merge)
|
|
114
|
+
**Commit:** <merge commit SHA>
|
|
115
|
+
|
|
116
|
+
### Sprint Scorecard
|
|
117
|
+
<same as GitHub mode>
|
|
118
|
+
|
|
119
|
+
### Epic Progress
|
|
120
|
+
<same as GitHub mode>
|
|
121
|
+
|
|
122
|
+
### Cleanup
|
|
123
|
+
<same as GitHub mode>
|
|
124
|
+
|
|
125
|
+
### Next Steps
|
|
126
|
+
1. Review changes on development branch
|
|
127
|
+
2. Run `/sprint-plan` to plan Sprint <N+1>
|
|
128
|
+
3. When ready for production, merge development → main manually
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## GitHub Release Procedure
|
|
22
134
|
|
|
23
135
|
### Step 1: Sprint Inventory
|
|
24
136
|
|
|
@@ -9,16 +9,70 @@ Generate a comprehensive status report for the active sprint.
|
|
|
9
9
|
|
|
10
10
|
## Before You Start
|
|
11
11
|
|
|
12
|
-
1. Read `../
|
|
13
|
-
2.
|
|
14
|
-
3.
|
|
12
|
+
1. Read `../shared/references/CONVENTIONS.md` for project management standards.
|
|
13
|
+
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 (default: `.claude-scrum-skill/backlog`).
|
|
14
|
+
3. Read `../shared/references/PROVIDERS.md` for provider-specific API commands when operating in remote mode.
|
|
15
|
+
4. **Terminology:** Always refer to milestones as **"epics"** in all user-facing text, summaries, and conversational output. The word "milestone" should only appear in API commands and code — never in communication with the user.
|
|
16
|
+
5. **If `scaffolding: "github"`:** Confirm the `gh` CLI is authenticated.
|
|
17
|
+
6. **If `scaffolding: "jira"`:** Verify `JIRA_SITE`, `JIRA_EMAIL`, and `JIRA_API_TOKEN` env vars are set.
|
|
18
|
+
7. **If `scaffolding: "trello"`:** Verify `TRELLO_API_KEY` and `TRELLO_TOKEN` env vars are set.
|
|
19
|
+
8. **If `scaffolding: "local"`:** Skip authentication. Status is read from local files.
|
|
15
20
|
|
|
16
21
|
## Input
|
|
17
22
|
|
|
18
|
-
`$ARGUMENTS` should be the repo identifier and optionally the project number.
|
|
19
|
-
If not provided, detect from the current git remote or ask the user.
|
|
23
|
+
**GitHub mode:** `$ARGUMENTS` should be the repo identifier and optionally the project number. If not provided, detect from the current git remote or ask the user.
|
|
20
24
|
|
|
21
|
-
|
|
25
|
+
**Jira/Trello mode:** `$ARGUMENTS` is ignored. Project key or board ID is read from config.json. Use the provider-specific API commands from PROVIDERS.md to query story status — following the same reporting logic as GitHub mode.
|
|
26
|
+
|
|
27
|
+
**Local mode:** `$ARGUMENTS` is ignored. Status is read from the configured backlog path.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Local Status Report Procedure
|
|
32
|
+
|
|
33
|
+
When `scaffolding: "local"`, generate the status report from local backlog
|
|
34
|
+
files.
|
|
35
|
+
|
|
36
|
+
### Local Step 1: Gather Data
|
|
37
|
+
|
|
38
|
+
Find the active sprint:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Find the active sprint file
|
|
42
|
+
grep -l 'status: active' <backlog-path>/sprints/sprint-*.md
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Read the active sprint file to get the story list. Then read each referenced
|
|
46
|
+
story file's frontmatter for current status, executor, points, persona,
|
|
47
|
+
and labels.
|
|
48
|
+
|
|
49
|
+
Also check git state for additional signals:
|
|
50
|
+
```bash
|
|
51
|
+
# Recent commits on release branches
|
|
52
|
+
git log --oneline --since="1 week ago" --all --grep="story/"
|
|
53
|
+
|
|
54
|
+
# Open local branches (proxy for in-progress work)
|
|
55
|
+
git branch --list 'story/*'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Local Step 2: Categorize Stories
|
|
59
|
+
|
|
60
|
+
Same categories as GitHub mode — group stories by their frontmatter
|
|
61
|
+
`status` field: `done`, `in-progress`, `ready`, `blocked`, `needs-context`.
|
|
62
|
+
|
|
63
|
+
### Local Step 3: Generate Report
|
|
64
|
+
|
|
65
|
+
Same report format as GitHub mode. Use story file paths instead of issue
|
|
66
|
+
numbers. For "Release Branch Health", check git branch state directly
|
|
67
|
+
instead of via `gh`.
|
|
68
|
+
|
|
69
|
+
### Local Step 4: Actionable Recommendations
|
|
70
|
+
|
|
71
|
+
Same as GitHub mode.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## GitHub Status Report Procedure
|
|
22
76
|
|
|
23
77
|
### Step 1: Gather Data
|
|
24
78
|
|