@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
package/bin/install.js
CHANGED
|
@@ -27,6 +27,7 @@ if (IS_GLOBAL) {
|
|
|
27
27
|
|
|
28
28
|
const skills = [
|
|
29
29
|
'project-scaffold',
|
|
30
|
+
'project-spec',
|
|
30
31
|
'sprint-plan',
|
|
31
32
|
'sprint-status',
|
|
32
33
|
'sprint-release',
|
|
@@ -53,6 +54,14 @@ console.log(`\nš Installing claude-scrum-skill (${location})...\n`);
|
|
|
53
54
|
|
|
54
55
|
fs.mkdirSync(skillsDir, { recursive: true });
|
|
55
56
|
|
|
57
|
+
// Copy shared references (not a skill, but needed by skills at ../shared/)
|
|
58
|
+
const sharedSrc = path.join(SOURCE_DIR, 'shared');
|
|
59
|
+
const sharedDest = path.join(skillsDir, 'shared');
|
|
60
|
+
if (fs.existsSync(sharedSrc)) {
|
|
61
|
+
copyRecursive(sharedSrc, sharedDest);
|
|
62
|
+
console.log(' š shared references');
|
|
63
|
+
}
|
|
64
|
+
|
|
56
65
|
let installed = 0;
|
|
57
66
|
for (const skill of skills) {
|
|
58
67
|
const src = path.join(SOURCE_DIR, skill);
|
|
@@ -67,6 +76,28 @@ for (const skill of skills) {
|
|
|
67
76
|
}
|
|
68
77
|
}
|
|
69
78
|
|
|
79
|
+
// Add .claude-scrum-skill to .gitignore if not already present (local install only)
|
|
80
|
+
if (!IS_GLOBAL) {
|
|
81
|
+
const projectRoot = path.resolve(skillsDir, '..', '..');
|
|
82
|
+
const gitignorePath = path.join(projectRoot, '.gitignore');
|
|
83
|
+
const entry = '.claude-scrum-skill';
|
|
84
|
+
|
|
85
|
+
let needsAppend = true;
|
|
86
|
+
if (fs.existsSync(gitignorePath)) {
|
|
87
|
+
const contents = fs.readFileSync(gitignorePath, 'utf8');
|
|
88
|
+
needsAppend = !contents.split('\n').some(line => line.trim() === entry);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (needsAppend) {
|
|
92
|
+
const prefix = fs.existsSync(gitignorePath)
|
|
93
|
+
&& fs.readFileSync(gitignorePath, 'utf8').length > 0
|
|
94
|
+
&& !fs.readFileSync(gitignorePath, 'utf8').endsWith('\n')
|
|
95
|
+
? '\n' : '';
|
|
96
|
+
fs.appendFileSync(gitignorePath, `${prefix}${entry}\n`);
|
|
97
|
+
console.log(`\n š Added ${entry} to .gitignore`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
70
101
|
console.log(`\n⨠Installed ${installed} skills to ${skillsDir}`);
|
|
71
102
|
console.log(' Restart Claude Code for the skills to become available.\n');
|
|
72
103
|
console.log(' Run /project-scaffold <prd-path> to get started.\n');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@houseofwolvesllc/claude-scrum-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Claude Code skills for scrum project management ā PRD to production release pipeline with project scaffolding, sprint planning, status tracking, sprint releases, full-project emulation testing, autonomous orchestration, and project cleanup.",
|
|
5
5
|
"bin": {},
|
|
6
6
|
"scripts": {
|
|
@@ -12,7 +12,7 @@ Ensure the codebase is production-clean: builds without errors or warnings, pass
|
|
|
12
12
|
## Before You Start
|
|
13
13
|
|
|
14
14
|
1. Read the project's `CLAUDE.md` (if it exists) for project-specific rules. **CLAUDE.md overrides are authoritative** ā if a project rule conflicts with a best practice listed here, the project rule wins. Record any overrides you find so you can reference them when making decisions.
|
|
15
|
-
2. Read `../
|
|
15
|
+
2. Read `../shared/references/CONVENTIONS.md` for project management standards (if applicable).
|
|
16
16
|
3. **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.
|
|
17
17
|
4. Identify the project's language(s), framework(s), build system, linter, test runner, and coverage tool by reading `package.json`, `tsconfig.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `Makefile`, or equivalent config files.
|
|
18
18
|
5. Confirm all required tooling is installed and runnable (`npm`, `npx`, `tsc`, `eslint`, `jest`/`vitest`/`pytest`/`go test`, etc.).
|
|
@@ -116,75 +116,48 @@ For each issue found, record:
|
|
|
116
116
|
|
|
117
117
|
---
|
|
118
118
|
|
|
119
|
-
## Phase 3:
|
|
119
|
+
## Phase 3: Project Principles Compliance
|
|
120
120
|
|
|
121
|
-
Verify the codebase adheres to
|
|
121
|
+
Verify the codebase adheres to the architectural and design principles defined in the project's `CLAUDE.md`. This phase is entirely driven by what the project specifies ā there are no default architectural checks.
|
|
122
122
|
|
|
123
|
-
**
|
|
123
|
+
**If `CLAUDE.md` does not exist or contains no architectural principles, skip this phase entirely.**
|
|
124
124
|
|
|
125
|
-
### Step 1:
|
|
125
|
+
### Step 1: Extract Principles from CLAUDE.md
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
Read the project's `CLAUDE.md` and identify every architectural or design principle it specifies. These may include (but are not limited to):
|
|
128
128
|
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
129
|
+
- **API design patterns** ā HATEOAS, REST conventions, GraphQL schema standards, response envelope formats
|
|
130
|
+
- **Layered architecture rules** ā e.g., "controllers must not call repositories directly"
|
|
131
|
+
- **Dependency direction** ā e.g., "inner layers must not depend on outer layers"
|
|
132
|
+
- **Naming conventions** ā file names, function names, variable naming patterns
|
|
133
|
+
- **Error handling patterns** ā e.g., "all errors must extend AppError"
|
|
134
|
+
- **Response formats** ā e.g., "all responses must include `_links`" or "use HAL format"
|
|
135
|
+
- **Testing requirements** ā e.g., "every service must have integration tests"
|
|
136
|
+
- **Any other explicit rule** ā whatever the project declares, enforce it
|
|
133
137
|
|
|
134
|
-
|
|
138
|
+
Record each principle found so violations can reference the specific rule.
|
|
135
139
|
|
|
136
|
-
|
|
140
|
+
### Step 2: Audit Compliance
|
|
137
141
|
|
|
138
|
-
|
|
139
|
-
```json
|
|
140
|
-
{
|
|
141
|
-
"id": "123",
|
|
142
|
-
"name": "Example",
|
|
143
|
-
"_links": {
|
|
144
|
-
"self": { "href": "/resources/123" }
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
**Relational links** ā Resources with relationships SHOULD include navigational links:
|
|
150
|
-
- Parent resource link (e.g., `collection` ā `/resources`)
|
|
151
|
-
- Related resource links (e.g., `author` ā `/users/456`)
|
|
152
|
-
- Action links where applicable (e.g., `approve` ā `/resources/123/approve`)
|
|
153
|
-
|
|
154
|
-
**Collection links** ā Collection endpoints SHOULD include:
|
|
155
|
-
- `self` link with current query parameters
|
|
156
|
-
- Pagination links (`next`, `prev`, `first`, `last`) when paginated
|
|
157
|
-
- Item links or embedded items with their own `self` links
|
|
158
|
-
|
|
159
|
-
**Consistency checks:**
|
|
160
|
-
- All link `href` values MUST correspond to actual routes that exist in the codebase
|
|
161
|
-
- Link relations MUST be consistent across all endpoints (don't use `_links` in some responses and `links` in others)
|
|
162
|
-
- Media type SHOULD be consistent (if using HAL, use HAL everywhere; if using JSON:API, use JSON:API everywhere)
|
|
163
|
-
|
|
164
|
-
### Step 3: Project-Specific Principles
|
|
165
|
-
|
|
166
|
-
Read `CLAUDE.md` and any architecture documentation (ADRs, `docs/architecture.md`, etc.) for project-specific principles. Common things to check:
|
|
142
|
+
For each principle extracted in Step 1, scan the codebase for violations:
|
|
167
143
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
- **Error handling patterns** ā does the project use a specific error handling strategy consistently?
|
|
172
|
-
- **Response envelope** ā does the project wrap responses in a specific envelope format?
|
|
144
|
+
1. Identify all files and code paths where the principle applies
|
|
145
|
+
2. Check each instance for compliance
|
|
146
|
+
3. Flag every violation with the specific principle it breaks
|
|
173
147
|
|
|
174
|
-
### Step
|
|
148
|
+
### Step 3: Catalog Violations
|
|
175
149
|
|
|
176
150
|
For each violation found, record:
|
|
177
151
|
|
|
178
|
-
| File | Line |
|
|
179
|
-
|
|
180
|
-
| `src/
|
|
181
|
-
| `src/
|
|
152
|
+
| File | Line | Principle | Issue | Recommendation |
|
|
153
|
+
|------|------|-----------|-------|----------------|
|
|
154
|
+
| `src/routes/orders.ts` | 45 | Layered architecture | Controller directly queries DB | Route through OrderService |
|
|
155
|
+
| `src/controllers/users.ts` | 78 | HATEOAS (per CLAUDE.md) | Response missing `_links.self` | Add self link to user response |
|
|
182
156
|
|
|
183
157
|
If `--fix` is active:
|
|
184
|
-
-
|
|
185
|
-
- Add missing pagination links to collection responses
|
|
186
|
-
- Refactor architectural violations (move logic to correct layer)
|
|
158
|
+
- Fix violations in order of severity (principles the project marks as critical first)
|
|
187
159
|
- Verify fixes don't break existing tests
|
|
160
|
+
- Re-scan to confirm compliance
|
|
188
161
|
|
|
189
162
|
---
|
|
190
163
|
|
|
@@ -355,7 +328,7 @@ If `--fix` was active, verify that fixes didn't introduce new problems:
|
|
|
355
328
|
|
|
356
329
|
## Output
|
|
357
330
|
|
|
358
|
-
Save the cleanup report to `.claude/reports/cleanup-report/`. Create the directory if it doesn't exist.
|
|
331
|
+
Save the cleanup report to `.claude-scrum-skill/reports/cleanup-report/`. Create the directory if it doesn't exist.
|
|
359
332
|
|
|
360
333
|
### Report Structure
|
|
361
334
|
|
|
@@ -364,7 +337,7 @@ cleanup-report/
|
|
|
364
337
|
āāā SUMMARY.md # High-level findings, pass/fail status for each phase
|
|
365
338
|
āāā BUILD.md # Build errors and warnings
|
|
366
339
|
āāā LINT.md # Lint violations by rule and file
|
|
367
|
-
āāā
|
|
340
|
+
āāā PRINCIPLES.md # Project principles compliance findings (from CLAUDE.md)
|
|
368
341
|
āāā DEAD-CODE.md # Dead and duplicated code inventory
|
|
369
342
|
āāā TESTS.md # Test results and coverage analysis
|
|
370
343
|
āāā FIXES.md # (if --fix was used) Summary of all changes made
|
|
@@ -386,7 +359,7 @@ cleanup-report/
|
|
|
386
359
|
|-------|--------|--------------|--------------|
|
|
387
360
|
| Build | PASS/FAIL | <count> errors, <count> warnings | <count> (if --fix) |
|
|
388
361
|
| Lint | PASS/FAIL | <count> errors, <count> warnings | <count> (if --fix) |
|
|
389
|
-
|
|
|
362
|
+
| Project Principles | PASS/FAIL/SKIP | <count> violations | <count> (if --fix) |
|
|
390
363
|
| Dead/Duplicated Code | PASS/FAIL | <count> dead, <count> duplicated | <count> (if --fix) |
|
|
391
364
|
| Tests | PASS/FAIL | <count> failing, coverage: <pct>% | <count> (if --fix) |
|
|
392
365
|
| **Overall** | **PASS/FAIL** | **<total>** | **<total>** |
|
|
@@ -413,9 +386,9 @@ cleanup-report/
|
|
|
413
386
|
|
|
414
387
|
## Execution Notes
|
|
415
388
|
|
|
416
|
-
**CLAUDE.md is king.** If the project says "we use `eslint-disable` for generated files" or "
|
|
389
|
+
**CLAUDE.md is king.** If the project says "we use `eslint-disable` for generated files" or "we intentionally keep the old API types for backwards compat" ā follow those rules. Best practices are defaults, not mandates. Phase 3 (Project Principles) only enforces what `CLAUDE.md` explicitly declares ā no assumptions about HATEOAS, REST conventions, or any other architectural pattern unless the project specifies them.
|
|
417
390
|
|
|
418
|
-
**Fix in dependency order.** Build errors can cause false-positive lint failures. Dead code removal can cause build errors. Fix in this order: dead code removal, build errors, lint issues,
|
|
391
|
+
**Fix in dependency order.** Build errors can cause false-positive lint failures. Dead code removal can cause build errors. Fix in this order: dead code removal, build errors, lint issues, project principles compliance, test fixes, coverage improvement.
|
|
419
392
|
|
|
420
393
|
**Don't over-abstract.** When removing duplicated code, only extract when it genuinely simplifies the codebase. Three similar 5-line blocks are not necessarily worth a shared utility with 3 parameters.
|
|
421
394
|
|
|
@@ -563,7 +563,7 @@ A clean table: Roles as rows, Actions as columns, cells showing ā
allowed /
|
|
|
563
563
|
|
|
564
564
|
## Output
|
|
565
565
|
|
|
566
|
-
Save the walkthrough results to the project .claude/reports. The output structure:
|
|
566
|
+
Save the walkthrough results to the project .claude-scrum-skill/reports. The output structure:
|
|
567
567
|
|
|
568
568
|
```
|
|
569
569
|
emulation-report/
|