@sandrinio/vbounce 1.4.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 +28 -2
- package/bin/vbounce.mjs +30 -0
- package/brains/AGENTS.md +26 -18
- package/brains/CHANGELOG.md +35 -0
- package/brains/CLAUDE.md +29 -19
- package/brains/GEMINI.md +28 -18
- package/brains/SETUP.md +7 -10
- package/brains/claude-agents/architect.md +37 -6
- package/brains/claude-agents/developer.md +20 -7
- package/brains/claude-agents/devops.md +31 -12
- package/brains/claude-agents/qa.md +31 -8
- package/brains/claude-agents/scribe.md +16 -7
- package/brains/cursor-rules/vbounce-docs.mdc +12 -8
- package/brains/cursor-rules/vbounce-process.mdc +11 -8
- package/brains/cursor-rules/vbounce-rules.mdc +9 -6
- package/package.json +1 -1
- package/scripts/init_gate_config.sh +151 -0
- package/scripts/pre_gate_common.sh +576 -0
- package/scripts/pre_gate_runner.sh +176 -0
- package/scripts/validate_report.mjs +5 -5
- package/scripts/vbounce_index.mjs +2 -2
- package/scripts/verify_framework.mjs +11 -0
- package/skills/agent-team/SKILL.md +112 -68
- package/skills/doc-manager/SKILL.md +58 -44
- package/skills/improve/SKILL.md +205 -0
- package/templates/charter.md +1 -1
- package/templates/delivery_plan.md +28 -181
- package/templates/epic.md +6 -4
- package/templates/risk_registry.md +2 -2
- package/templates/roadmap.md +1 -1
- package/templates/sprint.md +48 -0
- package/templates/sprint_report.md +57 -18
- package/templates/story.md +6 -3
|
@@ -41,9 +41,9 @@ Every story gets its own worktree. This isolates code changes so a failed fix on
|
|
|
41
41
|
```
|
|
42
42
|
main ← production
|
|
43
43
|
└── sprint/S-01 ← sprint branch (cut from main)
|
|
44
|
-
├── story/STORY-001-01
|
|
45
|
-
├── story/STORY-001-02
|
|
46
|
-
└── story/STORY-001-03
|
|
44
|
+
├── story/STORY-001-01-login ← story branch (worktree)
|
|
45
|
+
├── story/STORY-001-02-auth ← story branch (worktree)
|
|
46
|
+
└── story/STORY-001-03-api ← story branch (worktree)
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
### Directory Layout
|
|
@@ -51,12 +51,12 @@ main ← production
|
|
|
51
51
|
```
|
|
52
52
|
repo/ ← main working directory
|
|
53
53
|
├── .worktrees/ ← worktree root (GITIGNORED)
|
|
54
|
-
│ ├── STORY-001-01/
|
|
54
|
+
│ ├── STORY-001-01-login/ ← isolated worktree for story
|
|
55
55
|
│ │ ├── (full codebase checkout)
|
|
56
56
|
│ │ └── .bounce/ ← reports live here during bounce
|
|
57
57
|
│ │ ├── tasks/
|
|
58
58
|
│ │ └── reports/
|
|
59
|
-
│ └── STORY-001-02/
|
|
59
|
+
│ └── STORY-001-02-auth/
|
|
60
60
|
│ └── ...
|
|
61
61
|
│
|
|
62
62
|
└── .bounce/
|
|
@@ -74,8 +74,8 @@ repo/ ← main working directory
|
|
|
74
74
|
| V-Bounce State | Git Operation |
|
|
75
75
|
|---------------|---------------|
|
|
76
76
|
| Sprint starts | `git checkout -b sprint/S-01 main` |
|
|
77
|
-
| Ready to Bounce | `git worktree add .worktrees/STORY-{ID} -b story/STORY-{ID} sprint/S-01` |
|
|
78
|
-
| Bouncing | All work happens inside `.worktrees/STORY-{ID}/` |
|
|
77
|
+
| Ready to Bounce | `git worktree add .worktrees/STORY-{ID}-{StoryName} -b story/STORY-{ID}-{StoryName} sprint/S-01` |
|
|
78
|
+
| Bouncing | All work happens inside `.worktrees/STORY-{ID}-{StoryName}/` |
|
|
79
79
|
| Done | Merge story branch → sprint branch, `git worktree remove` |
|
|
80
80
|
| Sprint Review → Done | Merge sprint branch → main |
|
|
81
81
|
| Escalated | Worktree kept but frozen (no new commits) |
|
|
@@ -88,19 +88,19 @@ repo/ ← main working directory
|
|
|
88
88
|
git checkout -b sprint/S-01 main
|
|
89
89
|
|
|
90
90
|
# Create worktree for a story
|
|
91
|
-
git worktree add .worktrees/STORY-001-01 -b story/STORY-001-01 sprint/S-01
|
|
92
|
-
mkdir -p .worktrees/STORY-001-01/.bounce/{tasks,reports}
|
|
91
|
+
git worktree add .worktrees/STORY-001-01-login -b story/STORY-001-01-login sprint/S-01
|
|
92
|
+
mkdir -p .worktrees/STORY-001-01-login/.bounce/{tasks,reports}
|
|
93
93
|
|
|
94
94
|
# List active worktrees
|
|
95
95
|
git worktree list
|
|
96
96
|
|
|
97
97
|
# Merge completed story into sprint branch
|
|
98
98
|
git checkout sprint/S-01
|
|
99
|
-
git merge story/STORY-001-01 --no-ff -m "Merge STORY-001-01: {Story Name}"
|
|
99
|
+
git merge story/STORY-001-01-login --no-ff -m "Merge STORY-001-01: {Story Name}"
|
|
100
100
|
|
|
101
101
|
# Remove worktree after merge
|
|
102
|
-
git worktree remove .worktrees/STORY-001-01
|
|
103
|
-
git branch -d story/STORY-001-01
|
|
102
|
+
git worktree remove .worktrees/STORY-001-01-login
|
|
103
|
+
git branch -d story/STORY-001-01-login
|
|
104
104
|
|
|
105
105
|
# Merge sprint into main
|
|
106
106
|
git checkout main
|
|
@@ -117,16 +117,16 @@ The Team Lead spawns agents using Claude Code's Task tool. Each subagent works i
|
|
|
117
117
|
|
|
118
118
|
**Critical:** Always set the working directory to the worktree when delegating:
|
|
119
119
|
```
|
|
120
|
-
Lead: "Use the developer subagent. Working directory: .worktrees/STORY-001-01/
|
|
121
|
-
Read the story spec at product_plans/
|
|
120
|
+
Lead: "Use the developer subagent. Working directory: .worktrees/STORY-001-01-login/
|
|
121
|
+
Read the story spec at product_plans/sprints/sprint-{XX}/STORY-001-01-login.md
|
|
122
122
|
and implement it.
|
|
123
|
-
Write the implementation report to .bounce/reports/STORY-001-01-dev.md"
|
|
123
|
+
Write the implementation report to .bounce/reports/STORY-001-01-login-dev.md"
|
|
124
124
|
```
|
|
125
125
|
|
|
126
126
|
**Parallel delegation (independent stories in separate worktrees):**
|
|
127
127
|
```
|
|
128
|
-
Lead: "Use the developer subagent in .worktrees/STORY-001-01/"
|
|
129
|
-
AND "Use the developer subagent in .worktrees/STORY-001-02/"
|
|
128
|
+
Lead: "Use the developer subagent in .worktrees/STORY-001-01-login/"
|
|
129
|
+
AND "Use the developer subagent in .worktrees/STORY-001-02-auth/"
|
|
130
130
|
(safe — each worktree is fully isolated)
|
|
131
131
|
```
|
|
132
132
|
|
|
@@ -141,7 +141,7 @@ For sustained parallel coordination with inter-agent messaging. Enable with `CLA
|
|
|
141
141
|
|
|
142
142
|
For tools without native subagent support (Cursor, Codex, Gemini, Antigravity):
|
|
143
143
|
|
|
144
|
-
1. Lead writes a task file to `.worktrees/STORY-{ID}/.bounce/tasks/STORY-{ID}-{agent}.md`
|
|
144
|
+
1. Lead writes a task file to `.worktrees/STORY-{ID}-{StoryName}/.bounce/tasks/STORY-{ID}-{StoryName}-{agent}.md`
|
|
145
145
|
2. Open the worktree directory in the target tool (Cursor, Antigravity, etc.)
|
|
146
146
|
3. Agent reads the task file, executes, writes report to `.bounce/reports/`
|
|
147
147
|
4. Lead monitors reports from the main repo
|
|
@@ -150,9 +150,9 @@ For tools without native subagent support (Cursor, Codex, Gemini, Antigravity):
|
|
|
150
150
|
|
|
151
151
|
## The Report Buffer (Hybrid Model)
|
|
152
152
|
|
|
153
|
-
**During bounce:** Reports live INSIDE the story's worktree at `.worktrees/STORY-{ID}/.bounce/reports/`. This keeps reports co-located with the code they describe.
|
|
153
|
+
**During bounce:** Reports live INSIDE the story's worktree at `.worktrees/STORY-{ID}-{StoryName}/.bounce/reports/`. This keeps reports co-located with the code they describe.
|
|
154
154
|
|
|
155
|
-
**After story completes:** Reports are archived to the shared `.bounce/archive/S-{XX}/STORY-{ID}/` in the main repo before the worktree is removed.
|
|
155
|
+
**After story completes:** Reports are archived to the shared `.bounce/archive/S-{XX}/STORY-{ID}-{StoryName}/` in the main repo before the worktree is removed.
|
|
156
156
|
|
|
157
157
|
**Sprint Report:** Always written to `.bounce/sprint-report.md` in the main repo (not in any worktree).
|
|
158
158
|
|
|
@@ -161,13 +161,13 @@ For tools without native subagent support (Cursor, Codex, Gemini, Antigravity):
|
|
|
161
161
|
`STORY-{EpicID}-{StoryID}-{agent}[-bounce{N}].md`
|
|
162
162
|
|
|
163
163
|
Examples:
|
|
164
|
-
- `STORY-001-01-dev.md` — first Dev report
|
|
165
|
-
- `STORY-001-01-qa-bounce1.md` — first QA report (found bugs)
|
|
166
|
-
- `STORY-001-01-dev-bounce2.md` — Dev's fix after QA bounce
|
|
167
|
-
- `STORY-001-01-qa-bounce2.md` — second QA report (passed)
|
|
168
|
-
- `STORY-001-01-arch.md` — Architect audit
|
|
169
|
-
- `STORY-001-01-devops.md` — DevOps merge report
|
|
170
|
-
- `STORY-001-01-conflict.md` — Spec conflict (if any)
|
|
164
|
+
- `STORY-001-01-login-dev.md` — first Dev report
|
|
165
|
+
- `STORY-001-01-login-qa-bounce1.md` — first QA report (found bugs)
|
|
166
|
+
- `STORY-001-01-login-dev-bounce2.md` — Dev's fix after QA bounce
|
|
167
|
+
- `STORY-001-01-login-qa-bounce2.md` — second QA report (passed)
|
|
168
|
+
- `STORY-001-01-login-arch.md` — Architect audit
|
|
169
|
+
- `STORY-001-01-login-devops.md` — DevOps merge report
|
|
170
|
+
- `STORY-001-01-login-conflict.md` — Spec conflict (if any)
|
|
171
171
|
- `sprint-S-01-devops.md` — Sprint release report
|
|
172
172
|
- `sprint-S-01-scribe.md` — Documentation generation report
|
|
173
173
|
|
|
@@ -184,11 +184,11 @@ Examples:
|
|
|
184
184
|
2. Read RISK_REGISTRY.md — check for open risks relevant to this sprint's stories.
|
|
185
185
|
If high-severity risks affect planned stories, flag to human before proceeding.
|
|
186
186
|
|
|
187
|
-
3. Read
|
|
187
|
+
3. Read sprint-{XX}.md — check §2 Sprint Open Questions.
|
|
188
188
|
If unresolved questions block stories in this sprint, flag to human.
|
|
189
189
|
Do NOT start bouncing stories with unresolved blocking questions.
|
|
190
190
|
|
|
191
|
-
4. If
|
|
191
|
+
4. If vdocs/_manifest.json exists, read it.
|
|
192
192
|
Understand what's already documented — this informs which stories
|
|
193
193
|
may require doc updates after the sprint.
|
|
194
194
|
|
|
@@ -201,33 +201,44 @@ Examples:
|
|
|
201
201
|
e. DevOps runs `hotfix_manager.sh sync` to update any active story worktrees.
|
|
202
202
|
f. Update Delivery Plan Status to "Done".
|
|
203
203
|
|
|
204
|
-
6. **
|
|
204
|
+
6. **Gate Config Check**:
|
|
205
|
+
- If `.bounce/gate-checks.json` does not exist, run `./scripts/init_gate_config.sh` to auto-detect the project stack and generate default gate checks.
|
|
206
|
+
- If it exists, verify it's current (stack detection may have changed).
|
|
207
|
+
|
|
208
|
+
7. **Parallel Readiness Check** (before bouncing multiple stories simultaneously):
|
|
205
209
|
- Verify test runner config excludes `.worktrees/` (vitest, jest, pytest, etc.)
|
|
206
210
|
- Verify no shared mutable state between worktrees (e.g., shared temp files, singletons writing to same path)
|
|
207
211
|
- Verify `.gitignore` includes `.worktrees/`
|
|
208
212
|
If any check fails, fix before spawning parallel stories. Intermittent test failures from worktree cross-contamination erode trust in the test suite fast.
|
|
209
213
|
|
|
210
|
-
|
|
214
|
+
8. **Dependency Check & Execution Mode**:
|
|
215
|
+
- For each story, check the `Depends On:` field in its template.
|
|
216
|
+
- If Story B depends on Story A, you MUST execute them sequentially. Do not create Story B's worktree or spawn its Developer until Story A has successfully passed the DevOps merge step.
|
|
217
|
+
- Determine Execution Mode:
|
|
218
|
+
- **Full Bounce (Default)**: Normal L2-L4 stories go through full Dev → QA → Architect → DevOps flow.
|
|
219
|
+
- **Fast Track (L1/L2 Minor)**: For cosmetic UI tweaks or isolated refactors, execute Dev → DevOps only. Skip QA and Architect loops to save overhead. Validate manually during Sprint Review.
|
|
220
|
+
|
|
221
|
+
9. Update sprint-{XX}.md: Status → "Active"
|
|
211
222
|
```
|
|
212
223
|
|
|
213
224
|
### Step 1: Story Initialization
|
|
214
225
|
For each story with V-Bounce State "Ready to Bounce":
|
|
215
226
|
```bash
|
|
216
227
|
# Create isolated worktree
|
|
217
|
-
git worktree add .worktrees/STORY-{ID} -b story/STORY-{ID} sprint/S-01
|
|
218
|
-
mkdir -p .worktrees/STORY-{ID}/.bounce/{tasks,reports}
|
|
228
|
+
git worktree add .worktrees/STORY-{ID}-{StoryName} -b story/STORY-{ID}-{StoryName} sprint/S-01
|
|
229
|
+
mkdir -p .worktrees/STORY-{ID}-{StoryName}/.bounce/{tasks,reports}
|
|
219
230
|
```
|
|
220
231
|
- Read the full Story spec
|
|
221
232
|
- Read LESSONS.md
|
|
222
233
|
- Check RISK_REGISTRY.md for risks tagged to this story or its Epic
|
|
223
|
-
- If `
|
|
234
|
+
- If `vdocs/_manifest.json` exists, identify docs relevant to this story's scope (match against manifest descriptions/tags). Include relevant doc references in the task file so the Developer has product context.
|
|
224
235
|
- **Adjacent implementation check:** For stories that modify or extend modules touched by earlier stories in this sprint, identify existing implementations the Developer should reuse. Add to the task file: `"Reuse these existing modules: {list with file paths and brief description of what each provides}"`. This prevents agents from independently re-implementing logic that already exists — a common source of duplication when stories run in parallel.
|
|
225
|
-
- Create task file in `.worktrees/STORY-{ID}/.bounce/tasks/`
|
|
226
|
-
- Update
|
|
236
|
+
- Create task file in `.worktrees/STORY-{ID}-{StoryName}/.bounce/tasks/`
|
|
237
|
+
- Update sprint-{XX}.md: V-Bounce State → "Bouncing"
|
|
227
238
|
|
|
228
239
|
### Step 2: Developer Pass
|
|
229
240
|
```
|
|
230
|
-
1. Spawn developer subagent in .worktrees/STORY-{ID}/ with:
|
|
241
|
+
1. Spawn developer subagent in .worktrees/STORY-{ID}-{StoryName}/ with:
|
|
231
242
|
- Story §1 The Spec + §3 Implementation Guide
|
|
232
243
|
- LESSONS.md
|
|
233
244
|
- Relevant react-best-practices rules
|
|
@@ -238,13 +249,20 @@ mkdir -p .worktrees/STORY-{ID}/.bounce/{tasks,reports}
|
|
|
238
249
|
|
|
239
250
|
### Step 3: QA Pass
|
|
240
251
|
```
|
|
241
|
-
|
|
252
|
+
0. Run pre-QA gate scan:
|
|
253
|
+
./scripts/pre_gate_runner.sh qa .worktrees/STORY-{ID}-{StoryName}/ sprint/S-{XX}
|
|
254
|
+
- If scan FAILS on trivial issues (debug statements, missing JSDoc, TODOs):
|
|
255
|
+
Return to Developer for quick fix. Do NOT spawn QA for mechanical failures.
|
|
256
|
+
- If scan PASSES: Include scan output path in the QA task file.
|
|
257
|
+
1. Spawn qa subagent in .worktrees/STORY-{ID}-{StoryName}/ with:
|
|
242
258
|
- Developer Implementation Report
|
|
259
|
+
- Pre-QA scan results (.bounce/reports/pre-qa-scan.txt)
|
|
243
260
|
- Story §2 The Truth (acceptance criteria)
|
|
244
261
|
- LESSONS.md
|
|
245
262
|
2. QA validates against Gherkin scenarios, runs vibe-code-review
|
|
263
|
+
(skipping checks already covered by pre-qa-scan.txt)
|
|
246
264
|
3. If FAIL:
|
|
247
|
-
- QA writes Bug Report (STORY-{ID}-qa-bounce{N}.md)
|
|
265
|
+
- QA writes Bug Report (STORY-{ID}-{StoryName}-qa-bounce{N}.md)
|
|
248
266
|
- Increment bounce counter
|
|
249
267
|
- If QA bounce count >= 3 → V-Bounce State → "Escalated", STOP
|
|
250
268
|
- Else → Return to Step 2 with Bug Report as input
|
|
@@ -255,8 +273,14 @@ mkdir -p .worktrees/STORY-{ID}/.bounce/{tasks,reports}
|
|
|
255
273
|
|
|
256
274
|
### Step 4: Architect Pass
|
|
257
275
|
```
|
|
258
|
-
|
|
276
|
+
0. Run pre-Architect gate scan:
|
|
277
|
+
./scripts/pre_gate_runner.sh arch .worktrees/STORY-{ID}-{StoryName}/ sprint/S-{XX}
|
|
278
|
+
- If scan reveals new dependencies or structural violations:
|
|
279
|
+
Return to Developer for resolution. Do NOT spawn Architect for mechanical failures.
|
|
280
|
+
- If scan PASSES: Include scan output path in the Architect task file.
|
|
281
|
+
1. Spawn architect subagent in .worktrees/STORY-{ID}-{StoryName}/ with:
|
|
259
282
|
- All reports for this story
|
|
283
|
+
- Pre-Architect scan results (.bounce/reports/pre-arch-scan.txt)
|
|
260
284
|
- Full Story spec + Roadmap §3 ADRs
|
|
261
285
|
- LESSONS.md
|
|
262
286
|
2. If FAIL:
|
|
@@ -265,6 +289,8 @@ mkdir -p .worktrees/STORY-{ID}/.bounce/{tasks,reports}
|
|
|
265
289
|
- Else → Return to Step 2 with Architect feedback as input
|
|
266
290
|
3. If PASS:
|
|
267
291
|
- V-Bounce State → "Architect Passed"
|
|
292
|
+
|
|
293
|
+
*(Note: If the Team Lead assigned this story to the "Fast Track" execution mode, skip Steps 3 and 4 entirely. The Developer passes directly to Step 5: DevOps Story Merge.)*
|
|
268
294
|
```
|
|
269
295
|
|
|
270
296
|
### Step 5: Story Merge (DevOps)
|
|
@@ -275,17 +301,17 @@ mkdir -p .worktrees/STORY-{ID}/.bounce/{tasks,reports}
|
|
|
275
301
|
- LESSONS.md
|
|
276
302
|
2. DevOps performs:
|
|
277
303
|
- Pre-merge checks (worktree clean, gate reports verified)
|
|
278
|
-
- Archive reports to .bounce/archive/S-{XX}/STORY-{ID}/
|
|
304
|
+
- Archive reports to .bounce/archive/S-{XX}/STORY-{ID}-{StoryName}/
|
|
279
305
|
- Merge story branch into sprint branch (--no-ff)
|
|
280
|
-
- Post-merge validation (tests + build on sprint branch)
|
|
306
|
+
- Post-merge validation (tests + lint + build on sprint branch)
|
|
281
307
|
- Worktree removal and story branch cleanup
|
|
282
|
-
3. DevOps writes Merge Report to .bounce/archive/S-{XX}/STORY-{ID}/STORY-{ID}-devops.md
|
|
308
|
+
3. DevOps writes Merge Report to .bounce/archive/S-{XX}/STORY-{ID}-{StoryName}/STORY-{ID}-{StoryName}-devops.md
|
|
283
309
|
4. If merge conflicts:
|
|
284
310
|
- Simple (imports, whitespace): DevOps resolves directly
|
|
285
311
|
- Complex (logic): DevOps writes Conflict Report, Lead creates fix story
|
|
286
312
|
5. If post-merge tests fail: DevOps reverts merge, reports failure to Lead
|
|
287
313
|
```
|
|
288
|
-
Update
|
|
314
|
+
Update sprint-{XX}.md: V-Bounce State → "Done"
|
|
289
315
|
|
|
290
316
|
### Step 6: Sprint Integration Audit
|
|
291
317
|
After ALL stories are merged into `sprint/S-01`:
|
|
@@ -300,8 +326,15 @@ After ALL stories are merged into `sprint/S-01`:
|
|
|
300
326
|
### Step 7: Sprint Consolidation
|
|
301
327
|
```
|
|
302
328
|
1. Read all archived reports in .bounce/archive/S-{XX}/
|
|
303
|
-
2.
|
|
304
|
-
3.
|
|
329
|
+
2. **Sum the `tokens_used` field** from every agent report to calculate the sprint's total resource cost.
|
|
330
|
+
3. Generate Sprint Report to .bounce/sprint-report.md:
|
|
331
|
+
- Ensure the Sprint Report starts with a YAML frontmatter block containing:
|
|
332
|
+
```yaml
|
|
333
|
+
---
|
|
334
|
+
total_tokens_used: {sum of all agent tokens}
|
|
335
|
+
---
|
|
336
|
+
```
|
|
337
|
+
4. V-Bounce State → "Sprint Review" for all stories
|
|
305
338
|
4. Present Sprint Report to human
|
|
306
339
|
5. **BLOCKING STEP — Lesson Approval:**
|
|
307
340
|
Review and approve/reject ALL flagged lessons from §4 of the Sprint Report.
|
|
@@ -318,11 +351,17 @@ After ALL stories are merged into `sprint/S-01`:
|
|
|
318
351
|
6. Lead finalizes:
|
|
319
352
|
- Move sprint-report.md to .bounce/archive/S-{XX}/
|
|
320
353
|
- Record lessons (with user approval)
|
|
321
|
-
- Update
|
|
322
|
-
7.
|
|
354
|
+
- Update delivery_plan.md to reflect the completed sprint.
|
|
355
|
+
7. **Framework Self-Assessment** (aggregated from agent reports):
|
|
356
|
+
- Collect all `## Process Feedback` sections from agent reports in `.bounce/archive/S-{XX}/`
|
|
357
|
+
- Populate §5 Framework Self-Assessment tables in the Sprint Report by category
|
|
358
|
+
- If this is the 2nd or 3rd consecutive sprint, or if any Blocker-severity findings exist:
|
|
359
|
+
- Offer to run the `improve` skill to propose framework changes
|
|
360
|
+
- If user approves → read `skills/improve/SKILL.md` and execute the improvement process
|
|
361
|
+
8. Product Documentation check (runs on `main` after sprint merge):
|
|
323
362
|
- If sprint delivered 3+ features, or if any Developer report flagged
|
|
324
363
|
stale product docs → offer to run vdoc to generate/update
|
|
325
|
-
|
|
364
|
+
vdocs/
|
|
326
365
|
- If user approves → spawn scribe subagent on `main` branch with:
|
|
327
366
|
- Sprint Report (what was built)
|
|
328
367
|
- Dev reports that flagged affected product docs
|
|
@@ -338,11 +377,11 @@ After ALL stories are merged into `sprint/S-01`:
|
|
|
338
377
|
## Cleanup Process
|
|
339
378
|
|
|
340
379
|
### After Each Story Completes (DevOps handles via Step 5)
|
|
341
|
-
1. Archive reports to `.bounce/archive/S-{XX}/STORY-{ID}/`
|
|
380
|
+
1. Archive reports to `.bounce/archive/S-{XX}/STORY-{ID}-{StoryName}/`
|
|
342
381
|
2. Merge story branch into sprint branch (--no-ff)
|
|
343
382
|
3. Validate tests/build on sprint branch
|
|
344
|
-
4. Remove worktree: `git worktree remove .worktrees/STORY-{ID}`
|
|
345
|
-
5. Delete story branch: `git branch -d story/STORY-{ID}`
|
|
383
|
+
4. Remove worktree: `git worktree remove .worktrees/STORY-{ID}-{StoryName}`
|
|
384
|
+
5. Delete story branch: `git branch -d story/STORY-{ID}-{StoryName}`
|
|
346
385
|
6. Write DevOps Merge Report
|
|
347
386
|
|
|
348
387
|
### After Sprint Completes (DevOps handles via Step 7)
|
|
@@ -352,7 +391,7 @@ After ALL stories are merged into `sprint/S-01`:
|
|
|
352
391
|
4. Delete sprint branch: `git branch -d sprint/S-{XX}`
|
|
353
392
|
5. Verify `.worktrees/` is empty (all worktrees removed)
|
|
354
393
|
6. Write Sprint Release Report
|
|
355
|
-
7. Lead
|
|
394
|
+
7. Lead archives the sprint folder to `archive/` according to doc-manager physical move rules.
|
|
356
395
|
|
|
357
396
|
### After Delivery Completes (Team Lead handles)
|
|
358
397
|
When ALL sprints in a delivery (release) are done:
|
|
@@ -377,19 +416,19 @@ When ALL sprints in a delivery (release) are done:
|
|
|
377
416
|
|
|
378
417
|
---
|
|
379
418
|
|
|
380
|
-
##
|
|
419
|
+
## Sprint Plan Sync
|
|
381
420
|
|
|
382
|
-
The Team Lead MUST update
|
|
421
|
+
The Team Lead MUST update the active `sprint-{XX}.md` at every state transition. This is the source of truth for execution.
|
|
383
422
|
|
|
384
|
-
| Action |
|
|
423
|
+
| Action | Sprint Plan Update |
|
|
385
424
|
|--------|---------------------|
|
|
386
|
-
| Worktree created | §
|
|
425
|
+
| Worktree created | §1 Active Scope: V-Bounce State → "Bouncing" |
|
|
387
426
|
| Dev report written | No update (still "Bouncing") |
|
|
388
|
-
| QA passes | §
|
|
389
|
-
| Architect passes | §
|
|
390
|
-
| DevOps merges story | §
|
|
391
|
-
| Escalated | §
|
|
392
|
-
| DevOps merges sprint |
|
|
427
|
+
| QA passes | §1 Active Scope: V-Bounce State → "QA Passed" |
|
|
428
|
+
| Architect passes | §1 Active Scope: V-Bounce State → "Architect Passed" |
|
|
429
|
+
| DevOps merges story | §1 Active Scope: V-Bounce State → "Done" |
|
|
430
|
+
| Escalated | §1 Escalated table |
|
|
431
|
+
| DevOps merges sprint | Update `delivery_plan.md` to flag sprint delivered |
|
|
393
432
|
|
|
394
433
|
---
|
|
395
434
|
|
|
@@ -398,19 +437,23 @@ The Team Lead MUST update DELIVERY_PLAN.md at every state transition. This is th
|
|
|
398
437
|
### Spec Conflict
|
|
399
438
|
Developer writes a Spec Conflict Report. Lead pauses the bounce:
|
|
400
439
|
- Remove worktree (preserve branch for reference)
|
|
401
|
-
- Return story to Refinement in
|
|
440
|
+
- Return story to Refinement in sprint-{XX}.md and copy it back to backlog/
|
|
402
441
|
- After spec is fixed, recreate worktree and restart bounce
|
|
403
442
|
|
|
404
443
|
### Escalated Stories
|
|
405
444
|
When QA bounce count >= 3 OR Architect bounce count >= 3:
|
|
406
445
|
- Worktree is kept but frozen (no new work)
|
|
407
|
-
- Lead writes Escalation Report to `.bounce/archive/S-{XX}/STORY-{ID}/escalation.md`
|
|
446
|
+
- Lead writes Escalation Report to `.bounce/archive/S-{XX}/STORY-{ID}-{StoryName}/escalation.md`
|
|
408
447
|
- Human decides: rewrite spec → Refinement, descope → split, kill → Parking Lot
|
|
409
448
|
- **If returned to Refinement:** The spec has been rewritten. You MUST reset the QA and Architect bounce counters to 0 for this story.
|
|
410
449
|
- If killed: `git worktree remove`, branch preserved unmerged
|
|
411
450
|
|
|
412
|
-
### Mid-Sprint
|
|
413
|
-
Charter and Roadmap are **frozen** during active sprints.
|
|
451
|
+
### Mid-Sprint Strategic Changes
|
|
452
|
+
Charter and Roadmap are typically **frozen** during active sprints. However, if an emergency requires modifying them:
|
|
453
|
+
1. You MUST pause active bouncing across all stories.
|
|
454
|
+
2. Delegate to doc-manager to run the **Sprint Impact Analysis Protocol**.
|
|
455
|
+
3. Evaluate the active stories in `sprint-{XX}.md` against the new strategy to determine if they are: Unaffected, Require Scope Adjustment, or Invalidated.
|
|
456
|
+
4. Only abort stories that are explicitly Invalidated by the human. Unaffected stories may resume bouncing.
|
|
414
457
|
|
|
415
458
|
### Merge Conflicts
|
|
416
459
|
If merging story branch into sprint branch creates conflicts:
|
|
@@ -422,6 +465,7 @@ If merging story branch into sprint branch creates conflicts:
|
|
|
422
465
|
## Critical Rules
|
|
423
466
|
|
|
424
467
|
- **The Lead never writes code.** It plans, delegates, monitors, and consolidates.
|
|
468
|
+
- **Enforce Sequential Dependencies.** Never parallelize stories where one depends on the other. Wait for merge.
|
|
425
469
|
- **One story = one worktree.** Never mix stories in a single worktree.
|
|
426
470
|
- **Reports are the only handoff.** No agent communicates with another directly.
|
|
427
471
|
- **One bounce = one report.** Every agent pass produces exactly one report file.
|
|
@@ -430,8 +474,8 @@ If merging story branch into sprint branch creates conflicts:
|
|
|
430
474
|
- **Track bounce counts.** QA and Architect bounces are tracked separately per story.
|
|
431
475
|
- **Git tracking rules.** `.worktrees/`, `.bounce/reports/`, and `.bounce/sprint-report.md` are gitignored (ephemeral). `.bounce/archive/` is **committed to git** (permanent audit trail).
|
|
432
476
|
- **Check risks before bouncing.** Read RISK_REGISTRY.md at sprint start. Flag high-severity risks that affect planned stories.
|
|
433
|
-
- **Resolve open questions first.** Read
|
|
434
|
-
- **Know what's documented.** If `
|
|
477
|
+
- **Resolve open questions first.** Read the active `sprint-{XX}.md` §2 Sprint Open Questions at sprint start. Do not bounce stories with unresolved blocking questions.
|
|
478
|
+
- **Know what's documented.** If `vdocs/_manifest.json` exists, read it at sprint start. Pass relevant doc references to agents. Offer documentation updates after sprints that deliver new features.
|
|
435
479
|
|
|
436
480
|
## Keywords
|
|
437
481
|
|
|
@@ -69,48 +69,55 @@ Risk Registry ←── ALL levels (cross-cutting input)
|
|
|
69
69
|
|
|
70
70
|
| Document | Template Path | Output Location |
|
|
71
71
|
|----------|---------------|-----------------|
|
|
72
|
-
| Charter | `templates/charter.md` | `product_plans/{project}_charter.md` |
|
|
73
|
-
| Roadmap | `templates/roadmap.md` | `product_plans/{project}_roadmap.md` |
|
|
74
|
-
| Risk Registry | `templates/risk_registry.md` | `product_plans/RISK_REGISTRY.md` |
|
|
75
|
-
| Delivery Plan | `templates/delivery_plan.md` | `product_plans/{delivery}
|
|
76
|
-
|
|
|
77
|
-
|
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
| Charter | `templates/charter.md` | `product_plans/strategy/{project}_charter.md` |
|
|
73
|
+
| Roadmap | `templates/roadmap.md` | `product_plans/strategy/{project}_roadmap.md` |
|
|
74
|
+
| Risk Registry | `templates/risk_registry.md` | `product_plans/strategy/RISK_REGISTRY.md` |
|
|
75
|
+
| Delivery Plan | `templates/delivery_plan.md` | `product_plans/strategy/{delivery}_delivery_plan.md` |
|
|
76
|
+
| Sprint Plan | `templates/sprint.md` | `product_plans/sprints/sprint-{XX}/sprint-{XX}.md` |
|
|
77
|
+
| Epic | `templates/epic.md` | `product_plans/backlog/EPIC-{NNN}_{name}/EPIC-{NNN}_{name}.md` |
|
|
78
|
+
| Story | `templates/story.md` | `product_plans/backlog/EPIC-{NNN}_{name}/STORY-{EpicID}-{StoryID}-{StoryName}.md` |
|
|
79
|
+
| Hotfix | `templates/hotfix.md` | `product_plans/hotfixes/HOTFIX-{Date}-{Name}.md` |
|
|
80
|
+
| Sprint Report | `templates/sprint_report.md` | `product_plans/sprints/sprint-{XX}/sprint-report.md` |
|
|
81
|
+
|
|
82
|
+
### Product Plans Folder Structure (State-Based)
|
|
82
83
|
|
|
83
84
|
```
|
|
84
85
|
product_plans/
|
|
85
|
-
├──
|
|
86
|
-
├──
|
|
87
|
-
├──
|
|
86
|
+
├── strategy/ ← high-level, frozen during sprints
|
|
87
|
+
│ ├── charter.md
|
|
88
|
+
│ ├── roadmap.md
|
|
89
|
+
│ ├── delivery_plan.md ← release timelines
|
|
90
|
+
│ └── risk_registry.md
|
|
91
|
+
│
|
|
92
|
+
├── backlog/ ← planned but NOT active
|
|
93
|
+
│ ├── EPIC-001_authentication/
|
|
94
|
+
│ │ ├── EPIC-001_authentication.md
|
|
95
|
+
│ │ ├── STORY-001-01-login_ui.md
|
|
96
|
+
│ │ └── STORY-001-02-auth_api.md
|
|
88
97
|
│
|
|
89
|
-
├──
|
|
90
|
-
│ ├──
|
|
91
|
-
│ ├──
|
|
92
|
-
│ │
|
|
93
|
-
│ │ ├── STORY-001-01.md ← stories live with their epic
|
|
94
|
-
│ │ └── STORY-001-02.md
|
|
95
|
-
│ └── EPIC-002_{epic_name}/
|
|
96
|
-
│ ├── EPIC-002.md
|
|
97
|
-
│ └── STORY-002-01.md
|
|
98
|
+
├── sprints/ ← active execution workspace
|
|
99
|
+
│ ├── sprint-01/ ← active sprint boundary
|
|
100
|
+
│ │ ├── sprint-01.md ← Sprint Plan
|
|
101
|
+
│ │ └── STORY-001-01-login_ui.md ← (moved here during sprint setup)
|
|
98
102
|
│
|
|
99
|
-
├──
|
|
100
|
-
│
|
|
101
|
-
│ └── ...
|
|
103
|
+
├── hotfixes/ ← emergency tasks bypassing sprints
|
|
104
|
+
│ └── HOTFIX-20260306-db_crash.md
|
|
102
105
|
│
|
|
103
|
-
└── archive/
|
|
104
|
-
|
|
106
|
+
└── archive/ ← immutable history
|
|
107
|
+
├── sprints/
|
|
108
|
+
│ └── sprint-01/ ← (whole sprint folder moved here when closed)
|
|
109
|
+
│ ├── sprint-01.md
|
|
110
|
+
│ ├── STORY-001-01-login_ui.md
|
|
111
|
+
│ └── sprint-report.md
|
|
112
|
+
└── epics/
|
|
113
|
+
└── EPIC-001_authentication/ ← (moved here only when 100% complete)
|
|
105
114
|
```
|
|
106
115
|
|
|
107
116
|
**Key rules:**
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
- Delivery Plan lives at the root of its delivery folder
|
|
113
|
-
- When a delivery completes: Team Lead moves the entire delivery folder to `product_plans/archive/` and adds a Delivery Log entry to the Roadmap (§7)
|
|
117
|
+
- `strategy/` documents are project-level and frozen while a sprint is active.
|
|
118
|
+
- `backlog/` contains Epics and their unassigned child Stories.
|
|
119
|
+
- `sprints/` contains active 1-week execution boundaries. A Story file physically moves here when a sprint begins.
|
|
120
|
+
- `archive/` is where finished Sprints and finished Epics are moved for permanent record keeping.
|
|
114
121
|
|
|
115
122
|
### V-Bounce OS Framework Structure
|
|
116
123
|
|
|
@@ -170,7 +177,8 @@ Before creating any document, YOU MUST:
|
|
|
170
177
|
|
|
171
178
|
When modifying a document:
|
|
172
179
|
|
|
173
|
-
1. **Sprint Freeze Check:** Read `
|
|
180
|
+
1. **Sprint Freeze Check:** Read `sprint-XX.md` (if one exists in `product_plans/sprints/`). If a sprint is currently Active, the Charter and Roadmap are **FROZEN**. DO NOT modify them directly.
|
|
181
|
+
- ***Emergency Impact Analysis Protocol:*** If a human insists on modifying a frozen strategic document mid-sprint, you MUST pause active bouncing and write a Sprint Impact Analysis Report. Evaluate the active stories in `sprint-{XX}.md` against the new strategy to determine if they are: Unaffected, Require Scope Adjustment, or Invalidated. Only Invalidated stories are aborted. Update the documents only after the human approves the Impact Analysis.
|
|
174
182
|
2. Read the document being modified
|
|
175
183
|
3. Read upstream documents if the change affects inherited fields
|
|
176
184
|
4. Make the change
|
|
@@ -203,7 +211,7 @@ When modifying a document:
|
|
|
203
211
|
- Pull §3 Implementation Guide from Epic §4 Technical Context
|
|
204
212
|
- Set Complexity Label (L1-L4) based on file count and pattern familiarity
|
|
205
213
|
4. Link all created Stories back in Epic §9 Artifact Links
|
|
206
|
-
5. Update Delivery Plan §
|
|
214
|
+
5. Update Delivery Plan §3 High-Level Backlog with new stories
|
|
207
215
|
|
|
208
216
|
### TRANSITION — Moving Documents Between Phases
|
|
209
217
|
|
|
@@ -217,6 +225,12 @@ When modifying a document:
|
|
|
217
225
|
| Story → Ready to Bounce | Ambiguity 🟢 + ALL Context Pack items checked (Delivery Plan §5) |
|
|
218
226
|
| Hotfix → Bouncing | Complexity strictly L1 + Targets 1-2 files |
|
|
219
227
|
|
|
228
|
+
**Physical Move Rules for State Transitions:**
|
|
229
|
+
|
|
230
|
+
- **Sprint Setup Phase**: The Team Lead physically MOVES the `STORY-XXX.md` file from `product_plans/backlog/EPIC-XXX/` to `product_plans/sprints/sprint-{XX}/`.
|
|
231
|
+
- **Sprint Closure Phase**: The Team Lead physically MOVES the entire sprint folder (`sprints/sprint-{XX}/`) to `product_plans/archive/sprints/sprint-{XX}/`.
|
|
232
|
+
- **Epic Closure**: Once every story attached to an Epic has been archived, the Epic folder itself is moved from `backlog/` to `archive/epics/`.
|
|
233
|
+
|
|
220
234
|
**V-Bounce State transitions for Stories:**
|
|
221
235
|
|
|
222
236
|
```
|
|
@@ -249,19 +263,19 @@ Bouncing → Done: Dev implements + Human manually verifies + DevOps runs `hotfi
|
|
|
249
263
|
| **Scribe** | Product documentation, _manifest.json | Sprint Report, Dev Reports, codebase |
|
|
250
264
|
| **PM/BA (Human)** | Charter, Roadmap, Epic, Story §1 + §2 | Everything |
|
|
251
265
|
|
|
252
|
-
##
|
|
266
|
+
## Sprint Archiving
|
|
253
267
|
|
|
254
|
-
When a
|
|
268
|
+
When a sprint is complete:
|
|
255
269
|
|
|
256
|
-
1. Team Lead moves the entire
|
|
270
|
+
1. Team Lead moves the entire sprint folder to the archive:
|
|
271
|
+
```bash
|
|
272
|
+
mv product_plans/sprints/sprint-{XX}/ product_plans/archive/sprints/sprint-{XX}/
|
|
273
|
+
```
|
|
274
|
+
2. Team Lead checks the parent Epics of the completed stories. If an Epic is now 100% complete (all its stories are in the archive), the Team Lead moves the Epic folder:
|
|
257
275
|
```bash
|
|
258
|
-
mv product_plans/
|
|
276
|
+
mv product_plans/backlog/EPIC-{NNN}_{name}/ product_plans/archive/epics/EPIC-{NNN}_{name}/
|
|
259
277
|
```
|
|
260
|
-
|
|
261
|
-
- Delivery ID, date, release tag
|
|
262
|
-
- Release Notes (summary of sprint reports from this delivery)
|
|
263
|
-
- Key metrics (stories delivered, bounce ratio, correction tax averages)
|
|
264
|
-
3. Update Roadmap §2 Release Plan: set the release status to "Delivered"
|
|
278
|
+
3. Team Lead updates the Epic tracking checklists to reflect the newly archived states.
|
|
265
279
|
|
|
266
280
|
## Critical Rules
|
|
267
281
|
|