specross 1.0.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 +207 -0
- package/bin/cli.js +292 -0
- package/package.json +25 -0
- package/template/CLAUDE.md +106 -0
- package/template/_templates/bug-report.md +81 -0
- package/template/_templates/story.md +130 -0
- package/template/_templates/tech-spec.md +109 -0
- package/template/_templates/test-cases.md +80 -0
- package/template/agents/ba.md +73 -0
- package/template/agents/dev.md +93 -0
- package/template/agents/qc.md +122 -0
- package/template/commands/ba/impact.md +42 -0
- package/template/commands/ba/new-story.md +68 -0
- package/template/commands/ba/release.md +128 -0
- package/template/commands/ba/review.md +44 -0
- package/template/commands/dev/gen-scaffold.md +40 -0
- package/template/commands/dev/gen-tech-spec.md +39 -0
- package/template/commands/dev/review.md +52 -0
- package/template/commands/dev/status.md +51 -0
- package/template/commands/dev/sync.md +62 -0
- package/template/commands/help.md +77 -0
- package/template/commands/qc/bug-report.md +33 -0
- package/template/commands/qc/gen-scripts.md +42 -0
- package/template/commands/qc/gen-test-cases.md +41 -0
- package/template/commands/qc/status.md +51 -0
- package/template/commands/qc/sync.md +71 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/ba.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Generate an impact report for story `$ARGUMENTS` when the spec has changed.
|
|
6
|
+
|
|
7
|
+
The full argument format is: `{story-slug} {old-version} {new-version}`
|
|
8
|
+
Parse $ARGUMENTS to extract:
|
|
9
|
+
- STORY = first word
|
|
10
|
+
- V_OLD = second word
|
|
11
|
+
- V_NEW = third word
|
|
12
|
+
|
|
13
|
+
Example: if $ARGUMENTS is `user-authentication v1.0.0 v1.1.0` then STORY=user-authentication, V_OLD=v1.0.0, V_NEW=v1.1.0
|
|
14
|
+
|
|
15
|
+
## Steps
|
|
16
|
+
|
|
17
|
+
1. Read the current `stories/{STORY}/story.md`.
|
|
18
|
+
|
|
19
|
+
2. Run: `git diff {V_OLD} {V_NEW} -- stories/{STORY}/story.md`
|
|
20
|
+
to see what changed between versions. If git is not available, ask the user to paste the diff.
|
|
21
|
+
|
|
22
|
+
3. Analyse the diff and produce an impact report covering:
|
|
23
|
+
|
|
24
|
+
### Changes Summary
|
|
25
|
+
What was added, removed, or modified in the story spec.
|
|
26
|
+
|
|
27
|
+
### Impact on Dev
|
|
28
|
+
- Which parts of the tech-spec (`stories/{STORY}/tech/tech-spec.md`) are affected?
|
|
29
|
+
- Does the scaffold or existing code need to change?
|
|
30
|
+
- Effort estimate for rework: Low / Medium / High
|
|
31
|
+
|
|
32
|
+
### Impact on QC
|
|
33
|
+
- Which existing test cases (`stories/{STORY}/test/test-cases.md`) are now invalid or need updating?
|
|
34
|
+
- Are new test cases needed for the new/changed ACs?
|
|
35
|
+
- Effort estimate for rework: Low / Medium / High
|
|
36
|
+
|
|
37
|
+
### Recommended Actions
|
|
38
|
+
Ordered list of actions Dev and QC should take, with the highest-priority items first.
|
|
39
|
+
|
|
40
|
+
4. Save the report to `stories/{STORY}/docs/impact-{V_OLD}-to-{V_NEW}.md`.
|
|
41
|
+
|
|
42
|
+
5. Print a summary and remind the team to update their `.spec-lock` files in `stories/{STORY}/tech/` and `stories/{STORY}/test/` once they've applied the changes.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/ba.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Create a new story or sub-spec for: $ARGUMENTS
|
|
6
|
+
|
|
7
|
+
`$ARGUMENTS` supports two formats:
|
|
8
|
+
- `{slug}` — standalone story, e.g. `user-authentication`
|
|
9
|
+
- `{parent}/{slug}` — sub-spec under a parent, e.g. `order-management/create-order`
|
|
10
|
+
|
|
11
|
+
## Steps
|
|
12
|
+
|
|
13
|
+
1. Parse $ARGUMENTS:
|
|
14
|
+
- If it contains `/`: IS_SUB_SPEC = true, PARENT = part before `/`, SLUG = part after `/`
|
|
15
|
+
- If no `/`: IS_SUB_SPEC = false, SLUG = $ARGUMENTS
|
|
16
|
+
|
|
17
|
+
2. Determine the display name (title-case the slug, e.g. `create-order` → "Create Order").
|
|
18
|
+
|
|
19
|
+
3. Create the following folder and files at `ba/$ARGUMENTS/`:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
ba/$ARGUMENTS/
|
|
23
|
+
├── story.md ← populate from _templates/story.md
|
|
24
|
+
├── CHANGELOG.md ← create with initial entry
|
|
25
|
+
└── docs/ ← empty folder (add a .gitkeep)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
4. In `ba/$ARGUMENTS/story.md`, copy the contents of `_templates/story.md` exactly and replace:
|
|
29
|
+
- `{{STORY_NAME}}` with the display name
|
|
30
|
+
- `{{STORY_SLUG}}` with `$ARGUMENTS`
|
|
31
|
+
- `{{DATE}}` with today's date in YYYY-MM-DD format
|
|
32
|
+
|
|
33
|
+
**If IS_SUB_SPEC = true**, also add this line to the header table in story.md:
|
|
34
|
+
```
|
|
35
|
+
| **Parent spec** | `ba/{PARENT}/story.md` |
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**If IS_SUB_SPEC = false**, replace the Sub-specs section in story.md with:
|
|
39
|
+
```markdown
|
|
40
|
+
## Sub-specs
|
|
41
|
+
|
|
42
|
+
> List child specs here as this feature is broken down.
|
|
43
|
+
|
|
44
|
+
| Spec | Status | Notes |
|
|
45
|
+
|------|--------|-------|
|
|
46
|
+
| | | |
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
5. In `ba/$ARGUMENTS/CHANGELOG.md`, create:
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
# Changelog — {display name}
|
|
53
|
+
|
|
54
|
+
## v0.1.0 — {today}
|
|
55
|
+
- Initial spec created
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
6. **If IS_SUB_SPEC = true**, check if `ba/{PARENT}/story.md` exists. If it does, append a row to its Sub-specs table:
|
|
59
|
+
```
|
|
60
|
+
| [{display name}]({SLUG}/story.md) | Draft | |
|
|
61
|
+
```
|
|
62
|
+
If the parent story doesn't have a Sub-specs table yet, add the section at the end.
|
|
63
|
+
|
|
64
|
+
7. Print a summary:
|
|
65
|
+
- List the files created
|
|
66
|
+
- If sub-spec: remind BA to fill in AC specific to this flow/area
|
|
67
|
+
- If parent: remind BA to fill in the overview, then create sub-specs with `/ba:new-story {SLUG}/{sub-slug}`
|
|
68
|
+
- Suggest next step: "Once story.md is complete, run `/ba:review $ARGUMENTS`"
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/ba.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Release a story from `ba/` to `stories/`. Format: `{story-slug} {version}`
|
|
6
|
+
|
|
7
|
+
Parse $ARGUMENTS:
|
|
8
|
+
- STORY = first word (e.g. `user-authentication`)
|
|
9
|
+
- VERSION = second word (e.g. `v1.0.0`). If not provided, default to `v1.0.0` for a new story or bump the patch version of the last release.
|
|
10
|
+
|
|
11
|
+
## Steps
|
|
12
|
+
|
|
13
|
+
1. Read `ba/{STORY}/story.md`. If it doesn't exist, stop and say "Story draft not found. Run `/ba:new-story {STORY}` first."
|
|
14
|
+
|
|
15
|
+
2. Read `ba/{STORY}/CHANGELOG.md` to find the previous version (if any).
|
|
16
|
+
|
|
17
|
+
3. Determine if this is a new release (first time) or an update:
|
|
18
|
+
- **New release:** `stories/{STORY}/story.md` does not exist yet
|
|
19
|
+
- **Update:** `stories/{STORY}/story.md` already exists — diff it against `ba/{STORY}/story.md`
|
|
20
|
+
|
|
21
|
+
4. **If this is an UPDATE (not the first release):**
|
|
22
|
+
- Read both `ba/{STORY}/story.md` (new draft) and `stories/{STORY}/story.md` (last released version)
|
|
23
|
+
- Compare them directly — no git required
|
|
24
|
+
- Generate a change summary covering:
|
|
25
|
+
- ACs added / removed / modified
|
|
26
|
+
- Edge cases added / removed / modified
|
|
27
|
+
- Out-of-scope or dependency changes
|
|
28
|
+
- Any section that meaningfully changed
|
|
29
|
+
|
|
30
|
+
5. Update `ba/{STORY}/CHANGELOG.md` — prepend a new entry:
|
|
31
|
+
|
|
32
|
+
```markdown
|
|
33
|
+
## {VERSION} — {today}
|
|
34
|
+
|
|
35
|
+
### Changes
|
|
36
|
+
- [List each meaningful change to the story — ACs added, edge cases updated, scope changes, etc.]
|
|
37
|
+
|
|
38
|
+
### Impact
|
|
39
|
+
- **Dev:** [Brief note — e.g. "New AC-05 requires token TTL changes" or "No breaking changes"]
|
|
40
|
+
- **QC:** [Brief note — e.g. "2 new test cases needed for AC-05" or "No impact"]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
6. **Promote to `stories/`** — copy the full draft into the released stories folder:
|
|
44
|
+
- Copy `ba/{STORY}/` → `stories/{STORY}/` (overwrite if exists)
|
|
45
|
+
- This snapshot is the official version Dev and QC will work against
|
|
46
|
+
|
|
47
|
+
7. Save a release note to `stories/{STORY}/docs/release-{VERSION}.md`:
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
# Release Note — {STORY} {VERSION}
|
|
51
|
+
|
|
52
|
+
**Date:** {today}
|
|
53
|
+
**Status:** Ready for Dev and QC
|
|
54
|
+
|
|
55
|
+
## What's in this release
|
|
56
|
+
[Summary of the story purpose — 2–3 sentences for context]
|
|
57
|
+
|
|
58
|
+
## What changed (vs previous version)
|
|
59
|
+
[For first release: "Initial story release"]
|
|
60
|
+
[For updates: List each AC / edge case change clearly]
|
|
61
|
+
|
|
62
|
+
## Action required
|
|
63
|
+
|
|
64
|
+
### Dev team
|
|
65
|
+
- [ ] Run `/dev:gen-tech-spec {STORY}` (first release)
|
|
66
|
+
- [ ] OR run `/dev:sync {STORY}` (update — see what changed)
|
|
67
|
+
|
|
68
|
+
### QC team
|
|
69
|
+
- [ ] Run `/qc:gen-test-cases {STORY}` (first release)
|
|
70
|
+
- [ ] OR run `/qc:sync {STORY}` (update — see what changed)
|
|
71
|
+
|
|
72
|
+
## Story location
|
|
73
|
+
`stories/{STORY}/story.md`
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
8. **Check for outdated specs** — after promoting to `stories/`, check who is behind:
|
|
77
|
+
|
|
78
|
+
- Check `stories/{STORY}/tech/.spec-lock`:
|
|
79
|
+
- If it exists: read `spec-version` from it
|
|
80
|
+
- If `spec-version` ≠ `{VERSION}` → Dev's tech spec is outdated (locked at that version)
|
|
81
|
+
- Check `stories/{STORY}/test/.spec-lock`:
|
|
82
|
+
- If it exists: read `spec-version` from it
|
|
83
|
+
- If `spec-version` ≠ `{VERSION}` → QC's test cases are outdated (locked at that version)
|
|
84
|
+
|
|
85
|
+
9. Create a git tag suggestion. Print:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
✅ Story released: {STORY} {VERSION}
|
|
89
|
+
Draft: ba/{STORY}/
|
|
90
|
+
Released: stories/{STORY}/
|
|
91
|
+
|
|
92
|
+
Run this to tag the version in git:
|
|
93
|
+
git add ba/{STORY}/ stories/{STORY}/
|
|
94
|
+
git commit -m "spec({STORY}): release {VERSION}"
|
|
95
|
+
git tag spec/{STORY}/{VERSION}
|
|
96
|
+
|
|
97
|
+
Then share the release note with Dev and QC:
|
|
98
|
+
📄 stories/{STORY}/docs/release-{VERSION}.md
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
If any specs are outdated (from step 8), append an alert block:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
⚠️ OUTDATED SPECS DETECTED
|
|
105
|
+
──────────────────────────────────────────
|
|
106
|
+
[For each outdated spec, one line:]
|
|
107
|
+
🔴 Dev tech spec is on {locked-version} — run /dev:sync {STORY}
|
|
108
|
+
🔴 QC test cases are on {locked-version} — run /qc:sync {STORY}
|
|
109
|
+
──────────────────────────────────────────
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
If all specs are up to date (or no specs exist yet), print:
|
|
113
|
+
```
|
|
114
|
+
✅ No outdated specs.
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
10. If this is an update (not first release), also print the impact summary so the BA can paste it into their team chat:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
121
|
+
📢 STORY UPDATE: {STORY} → {VERSION}
|
|
122
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
123
|
+
[Change summary — bullet points]
|
|
124
|
+
|
|
125
|
+
Dev: run /dev:sync {STORY}
|
|
126
|
+
QC: run /qc:sync {STORY}
|
|
127
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
128
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/ba.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Review the story at `ba/$ARGUMENTS/story.md` for completeness and quality.
|
|
6
|
+
|
|
7
|
+
## Steps
|
|
8
|
+
|
|
9
|
+
1. Read `ba/$ARGUMENTS/story.md` fully.
|
|
10
|
+
|
|
11
|
+
2. Evaluate the story against this checklist:
|
|
12
|
+
|
|
13
|
+
### Completeness
|
|
14
|
+
- [ ] Story title and slug are filled in
|
|
15
|
+
- [ ] Description clearly explains the "what" and "why" (not just "what")
|
|
16
|
+
- [ ] All actors/users who interact with this feature are identified
|
|
17
|
+
- [ ] Acceptance Criteria (AC) are written in "Given / When / Then" or clear pass/fail format
|
|
18
|
+
- [ ] Each AC is independently testable
|
|
19
|
+
- [ ] Edge cases and error states are documented
|
|
20
|
+
- [ ] Out-of-scope items are explicitly listed
|
|
21
|
+
- [ ] Any dependencies on other stories or systems are noted
|
|
22
|
+
|
|
23
|
+
### Quality
|
|
24
|
+
- [ ] No ambiguous words like "should", "maybe", "might", "sometimes"
|
|
25
|
+
- [ ] No missing actors (e.g. AC says "the user" but which user role?)
|
|
26
|
+
- [ ] No AC that mixes multiple conditions (each AC = one condition)
|
|
27
|
+
- [ ] No technical implementation details dictated in the AC (BA says WHAT, not HOW)
|
|
28
|
+
|
|
29
|
+
## Output format
|
|
30
|
+
|
|
31
|
+
Return a structured review:
|
|
32
|
+
|
|
33
|
+
**Story:** `$ARGUMENTS`
|
|
34
|
+
**Status:** READY / NEEDS WORK / BLOCKED
|
|
35
|
+
|
|
36
|
+
**Gaps found:** (list each gap with a specific suggestion to fix it)
|
|
37
|
+
|
|
38
|
+
**Suggested ACs to add:** (if any are missing)
|
|
39
|
+
|
|
40
|
+
**Questions for the BA:** (anything that needs clarification before Dev/QC can proceed)
|
|
41
|
+
|
|
42
|
+
If the story is READY, say so clearly and suggest next steps:
|
|
43
|
+
- Dev: `/dev:gen-tech-spec $ARGUMENTS`
|
|
44
|
+
- QC: `/qc:gen-test-cases $ARGUMENTS`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/dev.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Generate a code scaffold for story: $ARGUMENTS
|
|
6
|
+
|
|
7
|
+
## Steps
|
|
8
|
+
|
|
9
|
+
1. Read `stories/$ARGUMENTS/tech/tech-spec.md`. If it doesn't exist, stop and say: "Tech spec not found. Run `/dev:gen-tech-spec $ARGUMENTS` first."
|
|
10
|
+
|
|
11
|
+
2. Read `stories/$ARGUMENTS/story.md` for business context.
|
|
12
|
+
|
|
13
|
+
3. Read `CLAUDE.md` for the project's tech stack, folder conventions, coding standards, and naming rules.
|
|
14
|
+
|
|
15
|
+
4. Analyse the tech spec and identify all files that need to be created or modified:
|
|
16
|
+
- New files (controllers, services, models, components, tests, etc.)
|
|
17
|
+
- Existing files that need changes (router registration, DI container, etc.)
|
|
18
|
+
|
|
19
|
+
5. For each file, generate the scaffold:
|
|
20
|
+
- **Include:** function/method signatures, class/interface definitions, inline TODO comments for business logic
|
|
21
|
+
- **Do not include:** full implementations — leave logic as `// TODO: implement` or `pass`
|
|
22
|
+
- **Do include:** imports, type hints/interfaces, error handling stubs, and docstrings/JSDoc
|
|
23
|
+
|
|
24
|
+
6. Write files to the appropriate locations under `src/` (or the project's source folder as defined in CLAUDE.md).
|
|
25
|
+
|
|
26
|
+
7. Also create stub test files under `tests/` that match the scaffold — one test file per implementation file, with `describe` / `it` blocks pre-filled from the AC mapping in the tech spec but left as pending (`it.todo()` or `xit()`).
|
|
27
|
+
|
|
28
|
+
8. After generating all files, print:
|
|
29
|
+
|
|
30
|
+
**Scaffold summary for `$ARGUMENTS`:**
|
|
31
|
+
|
|
32
|
+
| File | Type | Action |
|
|
33
|
+
|------|------|--------|
|
|
34
|
+
| src/... | Controller | Created |
|
|
35
|
+
| src/... | Service | Created |
|
|
36
|
+
| tests/... | Unit test | Created |
|
|
37
|
+
|
|
38
|
+
**Next steps:**
|
|
39
|
+
1. Fill in the `// TODO` sections in each file
|
|
40
|
+
2. Run `/dev:review $ARGUMENTS` once implementation is done to verify all ACs are covered
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/dev.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Generate a technical specification for story: $ARGUMENTS
|
|
6
|
+
|
|
7
|
+
## Steps
|
|
8
|
+
|
|
9
|
+
1. Read `stories/$ARGUMENTS/story.md` fully. If it doesn't exist, stop and say:
|
|
10
|
+
"Story not found. Run `/ba:new-story $ARGUMENTS` first."
|
|
11
|
+
|
|
12
|
+
2. Check that the story has complete Acceptance Criteria. If incomplete, warn the user and suggest `/ba:review $ARGUMENTS` before proceeding.
|
|
13
|
+
|
|
14
|
+
3. Read `CLAUDE.md` to understand the project's tech stack, conventions, and architecture patterns.
|
|
15
|
+
|
|
16
|
+
4. Read `_templates/tech-spec.md` — this is the **exact output format** to follow.
|
|
17
|
+
- Every section in the template must appear in the output
|
|
18
|
+
- Replace placeholder text with real content derived from the story
|
|
19
|
+
- Do not add or remove sections unless the template instructs it
|
|
20
|
+
|
|
21
|
+
5. Check if `stories/$ARGUMENTS/tech/tech-spec.md` already exists. If it does, warn the user and ask to confirm before overwriting.
|
|
22
|
+
|
|
23
|
+
6. Generate the tech spec following `_templates/tech-spec.md` exactly, and write it to `stories/$ARGUMENTS/tech/tech-spec.md`.
|
|
24
|
+
- Fill `{{STORY_NAME}}` with the title-cased story name
|
|
25
|
+
- Fill `{{STORY_SLUG}}` with `$ARGUMENTS`
|
|
26
|
+
- Fill `{{DATE}}` with today's date
|
|
27
|
+
- Map every AC from story.md into the AC Mapping table — no AC left blank
|
|
28
|
+
|
|
29
|
+
7. Read `stories/$ARGUMENTS/CHANGELOG.md` to find the current story version (the latest `## vX.Y.Z` entry at the top). Create `.spec-lock` at `stories/$ARGUMENTS/tech/.spec-lock`:
|
|
30
|
+
```
|
|
31
|
+
story: $ARGUMENTS
|
|
32
|
+
spec-version: {current-story-version}
|
|
33
|
+
generated: {today}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
8. Print next steps:
|
|
37
|
+
- "Tech spec created: `stories/$ARGUMENTS/tech/tech-spec.md`"
|
|
38
|
+
- "Review it before running `/dev:gen-scaffold $ARGUMENTS`"
|
|
39
|
+
- "To customize the output format, edit `_templates/tech-spec.md`"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/dev.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Review implementation against the story and tech spec for: $ARGUMENTS
|
|
6
|
+
|
|
7
|
+
## Steps
|
|
8
|
+
|
|
9
|
+
1. Read `stories/$ARGUMENTS/story.md` — this is the source of truth for requirements.
|
|
10
|
+
2. Read `stories/$ARGUMENTS/tech/tech-spec.md` — this is the agreed technical approach.
|
|
11
|
+
3. Read `stories/$ARGUMENTS/tech/.spec-lock` to check which spec version this work is based on.
|
|
12
|
+
4. Read all relevant implementation files in `src/` related to this story.
|
|
13
|
+
|
|
14
|
+
## Review Checklist
|
|
15
|
+
|
|
16
|
+
### Requirements Coverage
|
|
17
|
+
For each Acceptance Criterion in story.md, check:
|
|
18
|
+
- [ ] Is it implemented?
|
|
19
|
+
- [ ] Is it implemented correctly (matches the AC, not just roughly)?
|
|
20
|
+
- [ ] Is the edge case handling from the story covered?
|
|
21
|
+
|
|
22
|
+
### Tech Spec Compliance
|
|
23
|
+
- [ ] Does the implementation match the data model in the tech spec?
|
|
24
|
+
- [ ] Are the API contracts (endpoints, shapes, auth) as specced?
|
|
25
|
+
- [ ] Were the architecture decisions from the spec followed? If not, is there a good reason?
|
|
26
|
+
|
|
27
|
+
### Code Quality
|
|
28
|
+
- [ ] No obvious bugs or unhandled error paths
|
|
29
|
+
- [ ] No hardcoded values where config/constants should be used
|
|
30
|
+
- [ ] No TODO comments left behind that should be implemented
|
|
31
|
+
- [ ] Tests exist for the main paths and edge cases
|
|
32
|
+
|
|
33
|
+
## Output Format
|
|
34
|
+
|
|
35
|
+
**Story:** `$ARGUMENTS`
|
|
36
|
+
**Review result:** APPROVED / CHANGES REQUESTED / BLOCKED
|
|
37
|
+
|
|
38
|
+
### ACs Status
|
|
39
|
+
| AC | Status | Notes |
|
|
40
|
+
|----|--------|-------|
|
|
41
|
+
| AC-01 | ✅ Covered | |
|
|
42
|
+
| AC-02 | ⚠️ Partial | Missing error state for X |
|
|
43
|
+
| AC-03 | ❌ Not found | |
|
|
44
|
+
|
|
45
|
+
### Issues Found
|
|
46
|
+
(Numbered list — specific file and line where possible)
|
|
47
|
+
|
|
48
|
+
### Questions / Decisions Needed
|
|
49
|
+
(Anything that requires BA or team input)
|
|
50
|
+
|
|
51
|
+
### Verdict
|
|
52
|
+
Clear recommendation: ready to merge, needs fixes, or needs a BA conversation first.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/dev.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Scan all released stories and show which ones need a tech spec sync.
|
|
6
|
+
|
|
7
|
+
## Steps
|
|
8
|
+
|
|
9
|
+
1. List all subdirectories under `stories/`. Each subdirectory is a story slug.
|
|
10
|
+
If `stories/` is empty or doesn't exist, print "No stories released yet." and stop.
|
|
11
|
+
|
|
12
|
+
2. For each story folder, collect its sync status:
|
|
13
|
+
|
|
14
|
+
a. Read `stories/{story}/CHANGELOG.md` — extract the latest version (the first `## vX.Y.Z` entry at the top). If CHANGELOG doesn't exist, mark as `unknown`.
|
|
15
|
+
|
|
16
|
+
b. Check `stories/{story}/tech/.spec-lock`:
|
|
17
|
+
- If it **doesn't exist** → status: `⚪ No tech spec`
|
|
18
|
+
- If it exists → read `spec-version`
|
|
19
|
+
- If `spec-version` == latest version → status: `✅ Up to date`
|
|
20
|
+
- If `spec-version` != latest version → status: `🔴 Outdated (locked: {spec-version} → latest: {latest})`
|
|
21
|
+
|
|
22
|
+
3. Print the status table:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
26
|
+
📋 DEV STATUS
|
|
27
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
28
|
+
[one line per story, sorted: outdated first, then up-to-date, then no spec]
|
|
29
|
+
|
|
30
|
+
🔴 user-authentication v1.0.0 → v1.3.0 /dev:sync user-authentication
|
|
31
|
+
🔴 create-order v1.1.0 → v1.2.0 /dev:sync create-order
|
|
32
|
+
✅ payment-flow v2.0.0
|
|
33
|
+
⚪ export-report /dev:gen-tech-spec export-report
|
|
34
|
+
|
|
35
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
36
|
+
{N} stories need sync {M} up to date {K} no tech spec yet
|
|
37
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
4. If there are outdated stories, print a shortcut block:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Run these to sync:
|
|
44
|
+
[one line per outdated story]
|
|
45
|
+
/dev:sync {story}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
If everything is up to date, print:
|
|
49
|
+
```
|
|
50
|
+
✅ All tech specs are up to date.
|
|
51
|
+
```
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/dev.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Check if the story spec has changed since the tech spec was generated, and show what needs to be updated.
|
|
6
|
+
|
|
7
|
+
Story: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
## Steps
|
|
10
|
+
|
|
11
|
+
1. Read `stories/$ARGUMENTS/tech/.spec-lock`. If it doesn't exist, say:
|
|
12
|
+
"No spec-lock found. Run `/dev:gen-tech-spec $ARGUMENTS` to generate the tech spec first."
|
|
13
|
+
|
|
14
|
+
The `.spec-lock` contains the story version this tech spec was based on (e.g. `v1.0.0`).
|
|
15
|
+
|
|
16
|
+
2. Read `stories/$ARGUMENTS/CHANGELOG.md` to find the latest released version.
|
|
17
|
+
|
|
18
|
+
3. Compare the locked version vs the latest version:
|
|
19
|
+
- If they match → print "✅ Your tech spec is up to date. No action needed." and stop.
|
|
20
|
+
- If they differ → continue.
|
|
21
|
+
|
|
22
|
+
4. Read the latest release note at `stories/$ARGUMENTS/docs/release-{latest-version}.md` to understand what changed.
|
|
23
|
+
|
|
24
|
+
5. Read the current `stories/$ARGUMENTS/story.md` fully.
|
|
25
|
+
|
|
26
|
+
6. Read the current `stories/$ARGUMENTS/tech/tech-spec.md` fully.
|
|
27
|
+
|
|
28
|
+
7. Produce a sync report:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
32
|
+
🔄 DEV SYNC — $ARGUMENTS
|
|
33
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
34
|
+
Your tech spec: v{locked}
|
|
35
|
+
Latest story: v{latest}
|
|
36
|
+
|
|
37
|
+
CHANGES SINCE YOUR LAST SYNC:
|
|
38
|
+
[List each changed AC or edge case, with a clear description of what changed]
|
|
39
|
+
|
|
40
|
+
WHAT YOU NEED TO UPDATE IN YOUR TECH SPEC:
|
|
41
|
+
[For each change, specific guidance on which section of tech-spec.md to update]
|
|
42
|
+
|
|
43
|
+
WHAT YOU NEED TO UPDATE IN YOUR CODE:
|
|
44
|
+
[For each change, brief note on likely code impact — file/function level if possible]
|
|
45
|
+
|
|
46
|
+
EFFORT ESTIMATE: Low / Medium / High
|
|
47
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
8. After the report, ask: "Would you like me to update the tech spec now with these changes?"
|
|
51
|
+
- If yes: update `stories/$ARGUMENTS/tech/tech-spec.md` with the new/changed sections
|
|
52
|
+
- If no: leave it as-is
|
|
53
|
+
|
|
54
|
+
9. Once the tech spec is updated (either now or by the dev manually), remind them to update `.spec-lock`:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
When you've finished updating your tech spec and code, update your spec-lock:
|
|
58
|
+
|
|
59
|
+
stories/$ARGUMENTS/tech/.spec-lock
|
|
60
|
+
→ change spec-version to: {latest}
|
|
61
|
+
→ change synced: to today's date
|
|
62
|
+
```
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Print the Specross command reference. No arguments needed.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Print the following help text exactly:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
9
|
+
⚡ SPECROSS — Command Reference
|
|
10
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
11
|
+
|
|
12
|
+
BUSINESS ANALYST ──────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
/ba:new-story {story}
|
|
15
|
+
Create a new story draft under ba/{story}/story.md
|
|
16
|
+
Uses the story template — fill in AC, edge cases, scope.
|
|
17
|
+
|
|
18
|
+
/ba:review {story}
|
|
19
|
+
Review a draft story for gaps before releasing.
|
|
20
|
+
Checks: missing AC, vague criteria, undefined edge cases.
|
|
21
|
+
|
|
22
|
+
/ba:release {story} {version}
|
|
23
|
+
Promote a draft to stories/ as the official released version.
|
|
24
|
+
Diffs vs previous, writes CHANGELOG, alerts outdated Dev/QC specs.
|
|
25
|
+
|
|
26
|
+
/ba:impact {story}
|
|
27
|
+
Show downstream impact of a story change before releasing.
|
|
28
|
+
Lists which Dev and QC artifacts will be affected.
|
|
29
|
+
|
|
30
|
+
DEVELOPER ─────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
/dev:status
|
|
33
|
+
Scan all stories — show which tech specs are outdated or missing.
|
|
34
|
+
Run this first thing to see what needs attention.
|
|
35
|
+
|
|
36
|
+
/dev:gen-tech-spec {story}
|
|
37
|
+
Generate a tech spec from the released story.
|
|
38
|
+
Maps every AC to a technical approach. Locks spec version.
|
|
39
|
+
|
|
40
|
+
/dev:gen-scaffold {story}
|
|
41
|
+
Generate skeleton code and stub tests from the tech spec.
|
|
42
|
+
Creates files in src/ and tests/ with TODOs to implement.
|
|
43
|
+
|
|
44
|
+
/dev:review {story}
|
|
45
|
+
Review your implementation against the story's AC.
|
|
46
|
+
Flags gaps between code and acceptance criteria.
|
|
47
|
+
|
|
48
|
+
/dev:sync {story}
|
|
49
|
+
Show what changed in the story since your last tech spec.
|
|
50
|
+
Tells you exactly which sections and code to update.
|
|
51
|
+
|
|
52
|
+
QC / TESTING ──────────────────────────────────────────────
|
|
53
|
+
|
|
54
|
+
/qc:status
|
|
55
|
+
Scan all stories — show which test cases are outdated or missing.
|
|
56
|
+
Run this first thing to see what needs attention.
|
|
57
|
+
|
|
58
|
+
/qc:gen-test-cases {story}
|
|
59
|
+
Generate test cases from the released story.
|
|
60
|
+
Happy path + edge case + negative TCs for every AC. Locks spec version.
|
|
61
|
+
|
|
62
|
+
/qc:gen-scripts {story}
|
|
63
|
+
Generate automation scripts from the test cases.
|
|
64
|
+
Uses the framework defined in CLAUDE.md (Playwright, Cypress, pytest…).
|
|
65
|
+
|
|
66
|
+
/qc:sync {story}
|
|
67
|
+
Show what changed in the story since your last test cases.
|
|
68
|
+
Lists invalid TCs, TCs needing updates, and new TCs to add.
|
|
69
|
+
|
|
70
|
+
/qc:bug-report {story}
|
|
71
|
+
Generate a structured bug report tied to a story's AC.
|
|
72
|
+
Includes repro steps, expected vs actual, AC reference.
|
|
73
|
+
|
|
74
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
75
|
+
Tip: Start with /ba:new-story → /ba:release → /dev:status
|
|
76
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
77
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
> **Agent:** Read `.claude/agents/qc.md` and adopt that persona fully before proceeding.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Generate a structured bug report for story: $ARGUMENTS
|
|
6
|
+
|
|
7
|
+
Parse $ARGUMENTS: `{story-slug} {TC-ID}`
|
|
8
|
+
- STORY = first word (e.g. `user-authentication`)
|
|
9
|
+
- TC_ID = second word (e.g. `TC-003`)
|
|
10
|
+
|
|
11
|
+
## Steps
|
|
12
|
+
|
|
13
|
+
1. Read `stories/{STORY}/test/test-cases.md` and find the test case matching {TC_ID}.
|
|
14
|
+
If not found, stop and say clearly which TC-IDs are available.
|
|
15
|
+
|
|
16
|
+
2. Read `stories/{STORY}/story.md` to understand the related AC.
|
|
17
|
+
|
|
18
|
+
3. Read `_templates/bug-report.md` — this is the **exact output format** to follow.
|
|
19
|
+
|
|
20
|
+
4. Ask the user to provide:
|
|
21
|
+
- What actually happened (actual result)
|
|
22
|
+
- Steps to reproduce (if different from TC steps)
|
|
23
|
+
- Environment (browser, OS, app version, test/staging/prod)
|
|
24
|
+
- Screenshots, logs, or error messages (paste or describe)
|
|
25
|
+
|
|
26
|
+
5. Generate the bug report following `_templates/bug-report.md` exactly.
|
|
27
|
+
Save to `stories/{STORY}/test/bugs/bug-{TC_ID}-{slug}.md`
|
|
28
|
+
where `{slug}` is a short hyphenated description (e.g. `login-fails-empty-password`).
|
|
29
|
+
|
|
30
|
+
6. After saving, print:
|
|
31
|
+
- "Bug report saved: `stories/{STORY}/test/bugs/bug-{TC_ID}-{slug}.md`"
|
|
32
|
+
- "Share with the Dev team and link in your issue tracker."
|
|
33
|
+
- "To customize the bug report format, edit `_templates/bug-report.md`"
|