@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/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.5.0",
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 `../project-scaffold/references/CONVENTIONS.md` for project management standards (if applicable).
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: HATEOAS and Project Principles Compliance
119
+ ## Phase 3: Project Principles Compliance
120
120
 
121
- Verify the codebase adheres to HATEOAS (Hypermedia as the Engine of Application State) principles and any project-specific architectural standards.
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
- **Important:** Only apply HATEOAS checks to projects that expose REST APIs. Skip this phase entirely for CLI tools, libraries, static sites, or other non-API projects.
123
+ **If `CLAUDE.md` does not exist or contains no architectural principles, skip this phase entirely.**
124
124
 
125
- ### Step 1: Identify API Layer
125
+ ### Step 1: Extract Principles from CLAUDE.md
126
126
 
127
- Scan for API route definitions, controllers, and response construction:
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
- - Express/Fastify/Koa route handlers
130
- - NestJS/Spring/Django/Rails controllers
131
- - Serverless function handlers (Lambda, Cloud Functions)
132
- - GraphQL resolvers (HATEOAS doesn't apply to GraphQL — skip these)
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
- ### Step 2: HATEOAS Link Audit
138
+ Record each principle found so violations can reference the specific rule.
135
139
 
136
- For each API endpoint that returns resource representations, verify:
140
+ ### Step 2: Audit Compliance
137
141
 
138
- **Self links** — Every resource response MUST include a `self` link:
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
- - **Layered architecture compliance** — are controllers calling repositories directly instead of going through services?
169
- - **Dependency direction** — do inner layers depend on outer layers?
170
- - **Naming conventions** — do file names, function names, and variable names follow the project's conventions?
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 4: Catalog HATEOAS/Architecture Issues
148
+ ### Step 3: Catalog Violations
175
149
 
176
150
  For each violation found, record:
177
151
 
178
- | File | Line | Category | Issue | Recommendation |
179
- |------|------|----------|-------|----------------|
180
- | `src/controllers/users.ts` | 78 | HATEOAS | Response missing `_links.self` | Add self link to user response |
181
- | `src/routes/orders.ts` | 45 | Architecture | Controller directly queries DB | Route through OrderService |
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
- - Add missing `_links` to response objects
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
- ā”œā”€ā”€ HATEOAS.md # HATEOAS and architecture compliance findings
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
- | HATEOAS/Architecture | PASS/FAIL/SKIP | <count> violations | <count> (if --fix) |
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 "skip HATEOAS for internal microservice endpoints" or "we intentionally keep the old API types for backwards compat" — follow those rules. Best practices are defaults, not mandates.
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, HATEOAS compliance, test fixes, coverage improvement.
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/