@sandrinio/vbounce 1.8.0 → 1.9.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 +168 -160
- package/bin/vbounce.mjs +234 -25
- package/brains/AGENTS.md +4 -4
- package/brains/CHANGELOG.md +2 -2
- package/brains/CLAUDE.md +4 -4
- package/brains/GEMINI.md +5 -5
- package/brains/SETUP.md +15 -15
- package/brains/claude-agents/architect.md +1 -1
- package/brains/claude-agents/developer.md +1 -1
- package/brains/claude-agents/devops.md +1 -1
- package/brains/claude-agents/qa.md +1 -1
- package/brains/claude-agents/scribe.md +1 -1
- package/brains/copilot/copilot-instructions.md +3 -3
- package/brains/cursor-rules/vbounce-docs.mdc +2 -2
- package/brains/cursor-rules/vbounce-process.mdc +3 -3
- package/brains/cursor-rules/vbounce-rules.mdc +2 -2
- package/brains/windsurf/.windsurfrules +2 -2
- package/docs/HOTFIX_EDGE_CASES.md +1 -1
- package/package.json +5 -5
- package/scripts/doctor.mjs +3 -3
- package/scripts/hotfix_manager.sh +2 -2
- package/scripts/init_gate_config.sh +1 -1
- package/scripts/pre_gate_common.sh +1 -1
- package/scripts/pre_gate_runner.sh +1 -1
- package/scripts/suggest_improvements.mjs +1 -1
- package/scripts/validate_report.mjs +1 -1
- package/scripts/verify_framework.mjs +1 -1
- package/skills/doc-manager/SKILL.md +5 -5
- package/skills/improve/SKILL.md +2 -2
package/README.md
CHANGED
|
@@ -1,246 +1,254 @@
|
|
|
1
|
-
#
|
|
1
|
+
# V-Bounce Engine
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**A structured SDLC framework for AI coding agents.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
V-Bounce Engine turns AI assistants — Claude Code, Cursor, Gemini, Copilot, Codex — into disciplined engineering teams. Instead of letting agents code in a vacuum, it enforces a planning-first workflow with automated quality gates, structured handoffs, and a persistent learning loop.
|
|
6
6
|
|
|
7
|
-
>
|
|
7
|
+
> Inspired by the work of Cory Hymel
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## How It Works
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
V-Bounce Engine is built around a **Context Loop** — a closed feedback system that makes agents smarter with each sprint.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
```
|
|
16
|
+
Plan ──> Build ──> Bounce ──> Document ──> Learn
|
|
17
|
+
│ │ │ │
|
|
18
|
+
│ QA + Arch │ LESSONS.md
|
|
19
|
+
│ gate code Scribe maps │
|
|
20
|
+
│ the codebase │
|
|
21
|
+
└─────────────────────────────────────────────────────┘
|
|
22
|
+
Next sprint reads it all
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Plan.** The Team Lead writes requirements using structured templates (Charter, Epic, Story) before any code is written.
|
|
16
26
|
|
|
17
|
-
|
|
27
|
+
**Build.** The Developer agent implements each Story in an isolated git worktree and submits an Implementation Report.
|
|
18
28
|
|
|
19
|
-
|
|
20
|
-
2. **Bounce Reports (`.bounce/`)**: During implementation, the QA and Architect agents do not edit code. They run deep codebase audits and emit structured "Bounce Reports" summarizing anti-patterns and regressions. The Developer must fix the issues and run the loop again until the code passes validation.
|
|
21
|
-
3. **Product Documentation (`vdocs/`)**: The Scribe agent explores the *actual* codebase post-merge and uses our integrated `vdoc` tool to update feature-centric documentation and the semantic `_manifest.json` map.
|
|
29
|
+
**Bounce.** The QA agent validates against acceptance criteria. The Architect agent audits against your architecture rules. If either fails, the work bounces back to the Developer — up to 3 times before escalating to you. Every failure is tagged with a root cause (`missing_tests`, `adr_violation`, `spec_ambiguity`, etc.) for trend analysis.
|
|
22
30
|
|
|
23
|
-
|
|
31
|
+
**Document.** After merge, the Scribe agent maps the actual codebase into semantic product documentation using [vdoc](https://github.com/sandrinio/vdoc) (optional).
|
|
32
|
+
|
|
33
|
+
**Learn.** Sprint mistakes are recorded in `LESSONS.md`. All agents read it before writing future code. The framework also tracks its own performance — bounce rates, correction tax, recurring failure patterns — and suggests improvements to its own templates and skills.
|
|
24
34
|
|
|
25
35
|
---
|
|
26
36
|
|
|
27
|
-
##
|
|
37
|
+
## Quick Start
|
|
28
38
|
|
|
29
|
-
|
|
39
|
+
```bash
|
|
40
|
+
npx @sandrinio/vbounce install claude # Claude Code
|
|
41
|
+
npx @sandrinio/vbounce install cursor # Cursor
|
|
42
|
+
npx @sandrinio/vbounce install gemini # Gemini CLI
|
|
43
|
+
npx @sandrinio/vbounce install codex # OpenAI Codex
|
|
44
|
+
npx @sandrinio/vbounce install vscode # GitHub Copilot
|
|
45
|
+
```
|
|
30
46
|
|
|
31
|
-
|
|
32
|
-
- **`backlog/`**: Where unassigned work lives. Epics and their child Stories are refined here until selected for a sprint.
|
|
33
|
-
- **`sprints/`**: The active execution workspace. A physical `sprint-XX/` boundary is created and Stories are moved in. Only one sprint is "Active" at a time.
|
|
34
|
-
- **`hotfixes/`**: Trivial, emergency tasks that bypass sprint cycles.
|
|
35
|
-
- **`archive/`**: Immutable history. Finished sprint folders and fully completed Epics are permanently moved here.
|
|
47
|
+
Then verify your setup:
|
|
36
48
|
|
|
37
|
-
|
|
49
|
+
```bash
|
|
50
|
+
npx vbounce doctor
|
|
51
|
+
```
|
|
38
52
|
|
|
39
|
-
|
|
53
|
+
### What gets installed
|
|
40
54
|
|
|
41
|
-
|
|
55
|
+
Here's what lands in your repo (example: Claude Code):
|
|
42
56
|
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
57
|
+
```
|
|
58
|
+
your-project/
|
|
59
|
+
├── CLAUDE.md # Brain file — teaches the agent the V-Bounce process
|
|
60
|
+
├── .claude/agents/ # Subagent instructions (Claude Code only)
|
|
61
|
+
│ ├── developer.md
|
|
62
|
+
│ ├── qa.md
|
|
63
|
+
│ ├── architect.md
|
|
64
|
+
│ ├── devops.md
|
|
65
|
+
│ └── scribe.md
|
|
66
|
+
├── templates/ # 9 Markdown + YAML frontmatter templates
|
|
67
|
+
│ ├── charter.md
|
|
68
|
+
│ ├── roadmap.md
|
|
69
|
+
│ ├── epic.md
|
|
70
|
+
│ ├── story.md
|
|
71
|
+
│ ├── sprint.md
|
|
72
|
+
│ ├── delivery_plan.md
|
|
73
|
+
│ ├── sprint_report.md
|
|
74
|
+
│ ├── hotfix.md
|
|
75
|
+
│ └── risk_registry.md
|
|
76
|
+
├── skills/ # 7 modular skill files (see Skills below)
|
|
77
|
+
│ ├── agent-team/
|
|
78
|
+
│ ├── doc-manager/
|
|
79
|
+
│ ├── lesson/
|
|
80
|
+
│ ├── vibe-code-review/
|
|
81
|
+
│ ├── write-skill/
|
|
82
|
+
│ ├── improve/
|
|
83
|
+
│ └── react-best-practices/ # Example — customize for your stack
|
|
84
|
+
├── scripts/ # 23 automation scripts (validation, context prep, state)
|
|
85
|
+
└── package.json # 3 deps: js-yaml, marked, commander. Nothing else.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Other platforms install the same `templates/`, `skills/`, and `scripts/` — only the brain file differs (`.cursor/rules/`, `GEMINI.md`, `AGENTS.md`, or `.github/copilot-instructions.md`).
|
|
89
|
+
|
|
90
|
+
Everything is plain Markdown and Node.js. No vector DBs, no embedding models, no background services.
|
|
47
91
|
|
|
48
92
|
---
|
|
49
93
|
|
|
50
|
-
##
|
|
94
|
+
## Supported Tools
|
|
51
95
|
|
|
52
|
-
|
|
96
|
+
V-Bounce Engine adapts to each tool's capabilities:
|
|
53
97
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
98
|
+
| Tier | Tool | How it works |
|
|
99
|
+
|------|------|-------------|
|
|
100
|
+
| 1 | Claude Code | Full orchestration — spawns subagents for each role, manages state, runs all CLI commands |
|
|
101
|
+
| 2 | Gemini CLI, Codex | Single-agent mode — follows the bounce loop sequentially, full CLI access |
|
|
102
|
+
| 3 | Cursor | Role-specific context injection via `.cursor/rules/` MDC files |
|
|
103
|
+
| 4 | Copilot, Windsurf | Awareness mode — checklist-driven, reads state, safe CLI operations |
|
|
57
104
|
|
|
58
|
-
|
|
59
|
-
npx @sandrinio/vbounce install cursor
|
|
105
|
+
---
|
|
60
106
|
|
|
61
|
-
|
|
62
|
-
npx @sandrinio/vbounce install gemini
|
|
107
|
+
## The Bounce Loop
|
|
63
108
|
|
|
64
|
-
|
|
65
|
-
npx @sandrinio/vbounce install vscode
|
|
109
|
+
This is the core execution cycle for every Story:
|
|
66
110
|
|
|
67
|
-
|
|
68
|
-
|
|
111
|
+
```
|
|
112
|
+
Developer QA Architect DevOps
|
|
113
|
+
│ │ │ │
|
|
114
|
+
Writes code in worktree │ │ │
|
|
115
|
+
Submits Implementation ──────> │ │ │
|
|
116
|
+
Report Validates against (waits for QA) │
|
|
117
|
+
acceptance criteria │ │
|
|
118
|
+
│ │ │
|
|
119
|
+
PASS ──────────────────────> │ │
|
|
120
|
+
FAIL ──> bounces back Audits against │
|
|
121
|
+
to Developer ADRs + safe zone │
|
|
122
|
+
│ │
|
|
123
|
+
PASS ──────────────────> │
|
|
124
|
+
FAIL ──> bounces back Merges worktree
|
|
125
|
+
to Developer into main branch
|
|
69
126
|
```
|
|
70
127
|
|
|
71
|
-
|
|
72
|
-
- **Agent Instructions:** The "Brain" file (e.g., `CLAUDE.md`, `.cursor/rules/`) that teaches your AI how to follow the V-Bounce process.
|
|
73
|
-
- **Templates:** Markdown templates for your Charter, Roadmap, Epics, Stories, Sprint Plans, and Delivery Plans.
|
|
74
|
-
- **Bundled Scripts:** 16+ automation scripts — validation pipeline, context preparation, state management, sprint lifecycle, and the self-improvement loop.
|
|
75
|
-
- **Lightweight Dependencies:** The installer runs `npm install` for `js-yaml`, `marked`, and `commander` — nothing else. No vector DBs, no embedding models.
|
|
76
|
-
- **vdoc Integration:** The installer offers to install [`@sandrinio/vdoc`](https://github.com/sandrinio/vdoc) for your platform — enabling automatic semantic product documentation generation via the Scribe agent.
|
|
128
|
+
After 3 failed bounces on either gate, the Story escalates to you for intervention.
|
|
77
129
|
|
|
78
|
-
|
|
130
|
+
Each FAIL report includes a `root_cause` tag that feeds into cross-sprint trend analysis via `vbounce trends`.
|
|
79
131
|
|
|
80
132
|
---
|
|
81
133
|
|
|
82
|
-
##
|
|
134
|
+
## Skills
|
|
83
135
|
|
|
84
|
-
|
|
136
|
+
Skills are modular markdown instructions the Team Lead invokes automatically during the SDLC:
|
|
85
137
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
vbounce state show # Print current state.json
|
|
96
|
-
vbounce state update STORY-001-01-login "QA Passed" # Update story state
|
|
97
|
-
vbounce state update STORY-001-01-login "Bouncing" --qa-bounce # Increment QA bounce
|
|
98
|
-
|
|
99
|
-
# Context preparation (context budget management)
|
|
100
|
-
vbounce prep sprint S-01 # Generate sprint-context-S-01.md (≤200 lines)
|
|
101
|
-
vbounce prep qa STORY-001-01-login # Generate qa-context-STORY-ID.md (≤300 lines)
|
|
102
|
-
vbounce prep arch STORY-001-01-login # Generate arch-context with truncated diff
|
|
103
|
-
|
|
104
|
-
# Validation gates
|
|
105
|
-
vbounce validate report .bounce/reports/STORY-001-01-login-qa.md
|
|
106
|
-
vbounce validate state # Validate state.json schema
|
|
107
|
-
vbounce validate sprint S-01 # Validate sprint plan structure + cross-refs
|
|
108
|
-
vbounce validate ready STORY-001-01-login # Pre-bounce readiness gate
|
|
109
|
-
|
|
110
|
-
# Self-improvement loop
|
|
111
|
-
vbounce trends # Compute sprint metrics → .bounce/trends.md
|
|
112
|
-
vbounce suggest S-01 # Generate improvement suggestions
|
|
113
|
-
|
|
114
|
-
# Framework health
|
|
115
|
-
vbounce doctor # Check all required files, scripts, templates
|
|
116
|
-
```
|
|
138
|
+
| Skill | Purpose |
|
|
139
|
+
|-------|---------|
|
|
140
|
+
| `agent-team` | Spawns temporary sub-agents (Dev, QA, Architect, DevOps, Scribe) to parallelize work |
|
|
141
|
+
| `doc-manager` | Enforces the document hierarchy for Epics and Stories |
|
|
142
|
+
| `lesson` | Extracts mistakes from sprints into `LESSONS.md` |
|
|
143
|
+
| `vibe-code-review` | Runs Quick Scan or Deep Audit against acceptance criteria and architecture rules |
|
|
144
|
+
| `write-skill` | Allows the Team Lead to author new skills when the team encounters a recurring problem |
|
|
145
|
+
| `improve` | Self-improvement loop — reads agent friction signals across sprints and proposes framework changes (with your approval) |
|
|
146
|
+
| `react-best-practices` | Example tech-stack skill — customize this for your own stack |
|
|
117
147
|
|
|
118
148
|
---
|
|
119
149
|
|
|
120
|
-
##
|
|
150
|
+
## State Management
|
|
121
151
|
|
|
122
|
-
|
|
152
|
+
Sprint state lives in `.bounce/state.json` — a machine-readable snapshot that survives context resets and session interruptions:
|
|
123
153
|
|
|
124
154
|
```json
|
|
125
155
|
{
|
|
126
156
|
"sprint_id": "S-01",
|
|
127
|
-
"delivery_id": "D-01",
|
|
128
157
|
"current_phase": "bouncing",
|
|
129
|
-
"last_action": "QA failed STORY-001-01-login — bounce 1",
|
|
130
158
|
"stories": {
|
|
131
159
|
"STORY-001-01-login": {
|
|
132
160
|
"state": "Bouncing",
|
|
133
161
|
"qa_bounces": 1,
|
|
134
162
|
"arch_bounces": 0,
|
|
135
|
-
"worktree": ".worktrees/STORY-001-01-login"
|
|
136
|
-
"updated_at": "2026-03-12T10:00:00Z"
|
|
163
|
+
"worktree": ".worktrees/STORY-001-01-login"
|
|
137
164
|
}
|
|
138
165
|
}
|
|
139
166
|
}
|
|
140
167
|
```
|
|
141
168
|
|
|
142
|
-
When a
|
|
169
|
+
When a session starts, the Team Lead reads `state.json` to resume exactly where the sprint left off.
|
|
143
170
|
|
|
144
171
|
---
|
|
145
172
|
|
|
146
|
-
##
|
|
173
|
+
## CLI Reference
|
|
147
174
|
|
|
148
|
-
|
|
175
|
+
```bash
|
|
176
|
+
# Sprint lifecycle
|
|
177
|
+
vbounce sprint init S-01 D-01 # Initialize sprint
|
|
178
|
+
vbounce sprint close S-01 # Validate, archive, close
|
|
149
179
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
3. **Improvement Suggestions**: `vbounce suggest S-{XX}` reads trends, LESSONS.md, and the improvement log to flag stale lessons, recurring failure patterns, and graduation candidates.
|
|
153
|
-
4. **Improvement Log**: `.bounce/improvement-log.md` tracks every suggestion with Applied/Rejected/Deferred status — so nothing falls through the cracks.
|
|
180
|
+
# Story lifecycle
|
|
181
|
+
vbounce story complete STORY-ID # Mark story done, update state
|
|
154
182
|
|
|
155
|
-
|
|
183
|
+
# State management
|
|
184
|
+
vbounce state show # Print current state
|
|
185
|
+
vbounce state update STORY-ID STATE # Update story state
|
|
156
186
|
|
|
157
|
-
|
|
187
|
+
# Context preparation
|
|
188
|
+
vbounce prep sprint S-01 # Sprint context pack
|
|
189
|
+
vbounce prep qa STORY-ID # QA context pack
|
|
190
|
+
vbounce prep arch STORY-ID # Architect context pack
|
|
158
191
|
|
|
159
|
-
|
|
192
|
+
# Validation
|
|
193
|
+
vbounce validate report <file> # Validate report YAML
|
|
194
|
+
vbounce validate state # Validate state.json schema
|
|
195
|
+
vbounce validate sprint S-01 # Validate sprint plan
|
|
196
|
+
vbounce validate ready STORY-ID # Pre-bounce readiness gate
|
|
160
197
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
| **Tier 2** | Gemini CLI, OpenAI Codex | `brains/GEMINI.md`, `brains/codex/` | Single-agent — follows bounce loop, reads state.json, all CLI commands |
|
|
165
|
-
| **Tier 3** | Cursor | `brains/cursor-rules/` | Role-specific context injection via `.cursor/rules/` MDC files |
|
|
166
|
-
| **Tier 4** | GitHub Copilot, Windsurf | `brains/copilot/`, `brains/windsurf/` | Awareness mode — checklist-driven, reads state.json, CLI commands for safe operations |
|
|
198
|
+
# Self-improvement
|
|
199
|
+
vbounce trends # Cross-sprint trend analysis
|
|
200
|
+
vbounce suggest S-01 # Generate improvement suggestions
|
|
167
201
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
npx @sandrinio/vbounce install claude # Tier 1
|
|
171
|
-
npx @sandrinio/vbounce install gemini # Tier 2
|
|
172
|
-
npx @sandrinio/vbounce install cursor # Tier 3
|
|
173
|
-
npx @sandrinio/vbounce install vscode # Tier 4
|
|
202
|
+
# Health check
|
|
203
|
+
vbounce doctor # Verify setup
|
|
174
204
|
```
|
|
175
205
|
|
|
176
206
|
---
|
|
177
207
|
|
|
178
|
-
|
|
179
|
-
V-Bounce OS installs a powerful suite of specialized markdown `skills/` directly into your workspace. These act as modular capabilities you can invoke dynamically or that the Team Lead agent will invoke automatically during the SDLC process:
|
|
208
|
+
## Runtime Structure
|
|
180
209
|
|
|
181
|
-
|
|
182
|
-
|-------|------|---------|
|
|
183
|
-
| `agent-team` | Lead | Spawns temporary sub-agents (Dev, QA, DevOps) to parallelize complex tasks without losing context. |
|
|
184
|
-
| `doc-manager` | All | Enforces the strict hierarchy for managing Epic and Story documents *(Charter is optional, used only for new projects or brainstorming)*. |
|
|
185
|
-
| `lesson` | Lead | Extracts mistakes made during Sprints and updates `LESSONS.md` to prevent future regressions. |
|
|
186
|
-
| `react-best-practices` | Developer | A strict set of frontend execution rules the Developer must follow during implementation. <mark>*(Note: This skill serves as a template and must be customized by the human according to the specific tech stack being used.)*</mark> |
|
|
187
|
-
| `vibe-code-review` | QA/Architect | Runs distinct review modes (Quick Scan, Deep Audit) to validate code against Acceptance Criteria and Architecture rules. |
|
|
188
|
-
| `write-skill` | Lead | Allows the Team Lead to autonomously write and deploy entirely *new* skills if the team repeatedly encounters a novel problem. |
|
|
189
|
-
| `improve` | Lead | The framework's self-improvement loop. Reads agent friction signals from sprint retros and proposes targeted changes to templates, skills, brain files, and scripts — with human approval. |
|
|
210
|
+
As you use V-Bounce Engine, the framework creates these directories to manage your sprints:
|
|
190
211
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
You use the bundled templates to define the work.
|
|
199
|
-
`Charter ➔ Roadmap ➔ Epic ➔ Story`
|
|
212
|
+
```
|
|
213
|
+
product_plans/ # Created when you start planning
|
|
214
|
+
strategy/ # Charter, Roadmap, Risk Registry (frozen during sprints)
|
|
215
|
+
backlog/ # Epics and Stories awaiting sprint assignment
|
|
216
|
+
sprints/ # Active sprint workspace (one active at a time)
|
|
217
|
+
hotfixes/ # Emergency fixes that bypass sprint cycles
|
|
218
|
+
archive/ # Completed sprints and Epics (immutable history)
|
|
200
219
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
3. The **Architect** AI audits the successful QA build against your Safe Zone and Architecture Decision Records (ADRs).
|
|
206
|
-
4. Only when both gates pass does the **DevOps** AI merge the isolated worktree into your main branch.
|
|
220
|
+
.bounce/ # Created on first sprint init
|
|
221
|
+
state.json # Machine-readable sprint state (crash recovery)
|
|
222
|
+
reports/ # QA and Architect bounce reports
|
|
223
|
+
improvement-log.md # Tracked improvement suggestions
|
|
207
224
|
|
|
208
|
-
|
|
209
|
-
When a sprint concludes, V-Bounce OS generates structured reports so human reviewers can audit the work without reading every line of code:
|
|
210
|
-
- **Sprint Report**: A comprehensive summary by the Team Lead detailing what was delivered, execution metrics, story results, and a retro of what went wrong.
|
|
211
|
-
- **Sprint Release Report**: The DevOps agent's log of the merge process to the main branch, environment changes, and post-merge test validations.
|
|
212
|
-
- **Scribe Report**: The Scribe agent's complete audit of which product documentation files were generated, updated, or removed (using `vdoc`) to map the new codebase reality.
|
|
225
|
+
.worktrees/ # Git worktrees for isolated story branches
|
|
213
226
|
|
|
214
|
-
|
|
215
|
-
|
|
227
|
+
LESSONS.md # Accumulated mistakes — agents read this before coding
|
|
228
|
+
```
|
|
216
229
|
|
|
217
|
-
|
|
218
|
-
V-Bounce OS doesn't just improve your code — it improves *itself*. Every agent report includes a **Process Feedback** section where agents flag friction with the framework: a template missing a critical field, a handoff that lost context, a RAG query that returned irrelevant results, or a skill instruction that was unclear.
|
|
230
|
+
---
|
|
219
231
|
|
|
220
|
-
|
|
232
|
+
## End-of-Sprint Reports
|
|
221
233
|
|
|
222
|
-
|
|
223
|
-
1. Reads accumulated friction signals across sprints
|
|
224
|
-
2. Identifies recurring patterns (same complaint from multiple agents = real problem)
|
|
225
|
-
3. Proposes specific, targeted changes to templates, skills, brain files, or scripts
|
|
226
|
-
4. **Applies nothing without your approval** — you review every proposed change
|
|
234
|
+
When a sprint concludes, V-Bounce Engine generates three structured reports:
|
|
227
235
|
|
|
228
|
-
|
|
236
|
+
- **Sprint Report** — what was delivered, execution metrics (tokens, cost, bounce rates), story results, lessons learned, and a retrospective.
|
|
237
|
+
- **Release Report** — the DevOps agent's merge log, environment changes, and post-merge validations.
|
|
238
|
+
- **Scribe Report** — which product documentation was created, updated, or flagged as stale.
|
|
229
239
|
|
|
230
240
|
---
|
|
231
241
|
|
|
232
|
-
##
|
|
233
|
-
`ai coding agent` `claude code` `cursor` `github copilot` `gemini` `openai codex` `software development lifecycle` `sdlc` `ai software engineer` `autonomous coding` `agentic framework` `software architecture` `ai team` `vdoc` `ai documentation` `prompt engineering`
|
|
242
|
+
## Documentation
|
|
234
243
|
|
|
235
|
-
|
|
244
|
+
- [Epic template and structure](templates/epic.md)
|
|
245
|
+
- [Hotfix edge cases](docs/HOTFIX_EDGE_CASES.md)
|
|
246
|
+
- [vdoc integration](https://github.com/sandrinio/vdoc)
|
|
247
|
+
|
|
248
|
+
## Contributing
|
|
236
249
|
|
|
237
|
-
|
|
238
|
-
- [How to structure an Epic](templates/epic.md)
|
|
239
|
-
- [How the Bounce Loop handles Hotfixes](docs/HOTFIX_EDGE_CASES.md)
|
|
240
|
-
- [Integrating with vdoc](https://github.com/sandrinio/vdoc)
|
|
250
|
+
Contributions, issues, and feature requests are welcome. Check the [issues page](https://github.com/sandrinio/v-bounce-engine/issues).
|
|
241
251
|
|
|
242
|
-
##
|
|
243
|
-
Contributions, issues, and feature requests are welcome! Feel free to check the [issues page]().
|
|
252
|
+
## License
|
|
244
253
|
|
|
245
|
-
|
|
246
|
-
This project is [MIT](LICENSE) licensed.
|
|
254
|
+
[MIT](LICENSE)
|
package/bin/vbounce.mjs
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
|
+
import crypto from 'crypto';
|
|
5
6
|
import { fileURLToPath } from 'url';
|
|
6
7
|
import readline from 'readline';
|
|
7
8
|
|
|
@@ -65,10 +66,10 @@ const askQuestion = (query) => new Promise(resolve => rl.question(query, resolve
|
|
|
65
66
|
|
|
66
67
|
function displayHelp() {
|
|
67
68
|
console.log(`
|
|
68
|
-
V-Bounce
|
|
69
|
+
V-Bounce Engine CLI
|
|
69
70
|
|
|
70
71
|
Usage:
|
|
71
|
-
vbounce install <platform> Install V-Bounce
|
|
72
|
+
vbounce install <platform> Install V-Bounce Engine into a project
|
|
72
73
|
vbounce state show Show current sprint state
|
|
73
74
|
vbounce state update <storyId> <state|--qa-bounce>
|
|
74
75
|
vbounce sprint init <sprintId> <deliveryId> [--stories STORY-001,...]
|
|
@@ -227,6 +228,7 @@ if (command === 'install') {
|
|
|
227
228
|
}
|
|
228
229
|
|
|
229
230
|
const CWD = process.cwd();
|
|
231
|
+
const pkgVersion = JSON.parse(fs.readFileSync(path.join(pkgRoot, 'package.json'), 'utf8')).version;
|
|
230
232
|
|
|
231
233
|
// Map vbounce platform names to vdoc platform names
|
|
232
234
|
const vdocPlatformMap = {
|
|
@@ -287,34 +289,208 @@ if (command === 'install') {
|
|
|
287
289
|
displayHelp();
|
|
288
290
|
}
|
|
289
291
|
|
|
290
|
-
|
|
292
|
+
// ---------------------------------------------------------------------------
|
|
293
|
+
// Upgrade-safe install helpers
|
|
294
|
+
// ---------------------------------------------------------------------------
|
|
291
295
|
|
|
292
|
-
const
|
|
293
|
-
const
|
|
296
|
+
const META_PATH = path.join(CWD, '.bounce', 'install-meta.json');
|
|
297
|
+
const BACKUPS_DIR = path.join(CWD, '.bounce', 'backups');
|
|
294
298
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
const
|
|
299
|
+
/** Compute MD5 hash of a single file's contents. */
|
|
300
|
+
function computeFileHash(filePath) {
|
|
301
|
+
const content = fs.readFileSync(filePath);
|
|
302
|
+
return crypto.createHash('md5').update(content).digest('hex');
|
|
303
|
+
}
|
|
298
304
|
|
|
299
|
-
|
|
300
|
-
|
|
305
|
+
/** Compute a combined hash for a directory by hashing all files sorted by relative path. */
|
|
306
|
+
function computeDirHash(dirPath) {
|
|
307
|
+
const hash = crypto.createHash('md5');
|
|
308
|
+
const entries = [];
|
|
309
|
+
|
|
310
|
+
function walk(dir, rel) {
|
|
311
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
312
|
+
const fullPath = path.join(dir, entry.name);
|
|
313
|
+
const relPath = path.join(rel, entry.name);
|
|
314
|
+
if (entry.isDirectory()) {
|
|
315
|
+
walk(fullPath, relPath);
|
|
316
|
+
} else {
|
|
317
|
+
entries.push({ relPath, fullPath });
|
|
318
|
+
}
|
|
319
|
+
}
|
|
301
320
|
}
|
|
302
321
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
322
|
+
walk(dirPath, '');
|
|
323
|
+
entries.sort((a, b) => a.relPath.localeCompare(b.relPath));
|
|
324
|
+
for (const e of entries) {
|
|
325
|
+
hash.update(e.relPath);
|
|
326
|
+
hash.update(fs.readFileSync(e.fullPath));
|
|
307
327
|
}
|
|
308
|
-
|
|
328
|
+
return hash.digest('hex');
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/** Compute hash for a path (file or directory). */
|
|
332
|
+
function computeHash(p) {
|
|
333
|
+
const stats = fs.statSync(p);
|
|
334
|
+
return stats.isDirectory() ? computeDirHash(p) : computeFileHash(p);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/** Count files in a path (1 for a file, recursive count for a directory). */
|
|
338
|
+
function countFiles(p) {
|
|
339
|
+
const stats = fs.statSync(p);
|
|
340
|
+
if (!stats.isDirectory()) return 1;
|
|
341
|
+
let count = 0;
|
|
342
|
+
function walk(dir) {
|
|
343
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
344
|
+
if (entry.isDirectory()) walk(path.join(dir, entry.name));
|
|
345
|
+
else count++;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
walk(p);
|
|
349
|
+
return count;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/** Read install-meta.json, returns null if missing. */
|
|
353
|
+
function readInstallMeta() {
|
|
354
|
+
if (!fs.existsSync(META_PATH)) return null;
|
|
355
|
+
try {
|
|
356
|
+
return JSON.parse(fs.readFileSync(META_PATH, 'utf8'));
|
|
357
|
+
} catch {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/** Write install-meta.json. */
|
|
363
|
+
function writeInstallMeta(version, platform, files, hashes) {
|
|
364
|
+
const meta = {
|
|
365
|
+
version,
|
|
366
|
+
platform,
|
|
367
|
+
installed_at: new Date().toISOString(),
|
|
368
|
+
files,
|
|
369
|
+
hashes
|
|
370
|
+
};
|
|
371
|
+
fs.mkdirSync(path.dirname(META_PATH), { recursive: true });
|
|
372
|
+
fs.writeFileSync(META_PATH, JSON.stringify(meta, null, 2) + '\n');
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/** Backup files to .bounce/backups/<version>/. Removes previous backup first. */
|
|
376
|
+
function backupFiles(version, paths) {
|
|
377
|
+
// Remove previous backup (keep only one)
|
|
378
|
+
if (fs.existsSync(BACKUPS_DIR)) {
|
|
379
|
+
for (const entry of fs.readdirSync(BACKUPS_DIR, { withFileTypes: true })) {
|
|
380
|
+
if (entry.isDirectory()) {
|
|
381
|
+
fs.rmSync(path.join(BACKUPS_DIR, entry.name), { recursive: true, force: true });
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
const backupDir = path.join(BACKUPS_DIR, version);
|
|
387
|
+
fs.mkdirSync(backupDir, { recursive: true });
|
|
388
|
+
|
|
389
|
+
for (const relPath of paths) {
|
|
390
|
+
const src = path.join(CWD, relPath);
|
|
391
|
+
const dest = path.join(backupDir, relPath);
|
|
392
|
+
|
|
393
|
+
if (!fs.existsSync(src)) continue;
|
|
394
|
+
|
|
395
|
+
const stats = fs.statSync(src);
|
|
396
|
+
if (stats.isDirectory()) {
|
|
397
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
398
|
+
fs.cpSync(src, dest, { recursive: true });
|
|
399
|
+
} else {
|
|
400
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
401
|
+
fs.copyFileSync(src, dest);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
return backupDir;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Classify files into unchanged, modified, and newFiles.
|
|
410
|
+
* - unchanged: dest exists and matches what was installed (safe to overwrite)
|
|
411
|
+
* - modified: dest exists but differs from what was installed (user changed it)
|
|
412
|
+
* - newFiles: dest does not exist
|
|
413
|
+
*/
|
|
414
|
+
function classifyFiles(mappingRules, meta) {
|
|
415
|
+
const unchanged = [];
|
|
416
|
+
const modified = [];
|
|
417
|
+
const newFiles = [];
|
|
418
|
+
|
|
419
|
+
for (const rule of mappingRules) {
|
|
420
|
+
const sourcePath = path.join(pkgRoot, rule.src);
|
|
421
|
+
const destPath = path.join(CWD, rule.dest);
|
|
422
|
+
|
|
423
|
+
if (!fs.existsSync(sourcePath)) continue;
|
|
309
424
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
425
|
+
if (!fs.existsSync(destPath)) {
|
|
426
|
+
newFiles.push(rule);
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// Dest exists — classify as unchanged or modified
|
|
431
|
+
if (!meta || !meta.hashes || !meta.hashes[rule.dest]) {
|
|
432
|
+
// No metadata (first upgrade) — treat as modified to be safe
|
|
433
|
+
modified.push(rule);
|
|
434
|
+
continue;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
const currentHash = computeHash(destPath);
|
|
438
|
+
const installedHash = meta.hashes[rule.dest];
|
|
439
|
+
|
|
440
|
+
if (currentHash === installedHash) {
|
|
441
|
+
unchanged.push(rule);
|
|
442
|
+
} else {
|
|
443
|
+
modified.push(rule);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return { unchanged, modified, newFiles };
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// ---------------------------------------------------------------------------
|
|
451
|
+
// Begin install flow
|
|
452
|
+
// ---------------------------------------------------------------------------
|
|
453
|
+
|
|
454
|
+
const meta = readInstallMeta();
|
|
455
|
+
const isUpgrade = meta !== null;
|
|
456
|
+
|
|
457
|
+
if (isUpgrade) {
|
|
458
|
+
console.log(`\n🚀 V-Bounce Engine \x1b[36m${pkgVersion}\x1b[0m (upgrading from \x1b[33m${meta.version}\x1b[0m)\n`);
|
|
459
|
+
} else {
|
|
460
|
+
console.log(`\n🚀 Preparing to install V-Bounce Engine \x1b[36m${pkgVersion}\x1b[0m for \x1b[36m${targetPlatform}\x1b[0m...\n`);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
const { unchanged, modified, newFiles } = classifyFiles(mapping, meta);
|
|
464
|
+
|
|
465
|
+
if (unchanged.length > 0) {
|
|
466
|
+
console.log('Will update (unchanged by you):');
|
|
467
|
+
for (const rule of unchanged) {
|
|
468
|
+
const destPath = path.join(CWD, rule.dest);
|
|
469
|
+
const n = countFiles(destPath);
|
|
470
|
+
const label = n > 1 ? `(${n} files)` : '';
|
|
471
|
+
console.log(` \x1b[32m✓\x1b[0m ${rule.dest} ${label}`);
|
|
472
|
+
}
|
|
313
473
|
}
|
|
314
474
|
|
|
315
|
-
if (
|
|
316
|
-
|
|
317
|
-
|
|
475
|
+
if (modified.length > 0) {
|
|
476
|
+
const backupLabel = isUpgrade ? `.bounce/backups/${meta.version}/` : '.bounce/backups/pre-install/';
|
|
477
|
+
console.log(`\nModified by you (backed up to ${backupLabel}):`);
|
|
478
|
+
for (const rule of modified) {
|
|
479
|
+
console.log(` \x1b[33m⚠\x1b[0m ${rule.dest}`);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
if (newFiles.length > 0) {
|
|
484
|
+
console.log('\nNew in this version:');
|
|
485
|
+
for (const rule of newFiles) {
|
|
486
|
+
console.log(` \x1b[32m+\x1b[0m ${rule.dest}`);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
if (unchanged.length === 0 && modified.length === 0 && newFiles.length === 0) {
|
|
491
|
+
rl.close();
|
|
492
|
+
console.log('Nothing to install — all source files are missing from the package.');
|
|
493
|
+
process.exit(0);
|
|
318
494
|
}
|
|
319
495
|
|
|
320
496
|
console.log('');
|
|
@@ -328,13 +504,23 @@ if (command === 'install') {
|
|
|
328
504
|
process.exit(0);
|
|
329
505
|
}
|
|
330
506
|
|
|
507
|
+
// Backup modified files before overwriting
|
|
508
|
+
if (modified.length > 0) {
|
|
509
|
+
const backupVersion = isUpgrade ? meta.version : 'pre-install';
|
|
510
|
+
const backupDir = backupFiles(backupVersion, modified.map(r => r.dest));
|
|
511
|
+
console.log(`\n📂 Backed up modified files to ${path.relative(CWD, backupDir)}/`);
|
|
512
|
+
}
|
|
513
|
+
|
|
331
514
|
console.log('\n📦 Installing files...');
|
|
332
515
|
|
|
333
|
-
|
|
516
|
+
const installedFiles = [];
|
|
517
|
+
const hashes = {};
|
|
518
|
+
|
|
519
|
+
for (const rule of [...unchanged, ...modified, ...newFiles]) {
|
|
334
520
|
const sourcePath = path.join(pkgRoot, rule.src);
|
|
335
521
|
const destPath = path.join(CWD, rule.dest);
|
|
336
522
|
|
|
337
|
-
if (!fs.existsSync(sourcePath))
|
|
523
|
+
if (!fs.existsSync(sourcePath)) continue;
|
|
338
524
|
|
|
339
525
|
const stats = fs.statSync(sourcePath);
|
|
340
526
|
if (stats.isDirectory()) {
|
|
@@ -347,8 +533,16 @@ if (command === 'install') {
|
|
|
347
533
|
}
|
|
348
534
|
fs.copyFileSync(sourcePath, destPath);
|
|
349
535
|
}
|
|
536
|
+
|
|
537
|
+
// Record hash of what we just installed (from source)
|
|
538
|
+
hashes[rule.dest] = computeHash(sourcePath);
|
|
539
|
+
installedFiles.push(rule.dest);
|
|
350
540
|
console.log(` \x1b[32m✓\x1b[0m ${rule.dest}`);
|
|
351
|
-
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// Write install metadata
|
|
544
|
+
writeInstallMeta(pkgVersion, targetPlatform, installedFiles, hashes);
|
|
545
|
+
console.log(` \x1b[32m✓\x1b[0m .bounce/install-meta.json`);
|
|
352
546
|
|
|
353
547
|
console.log('\n⚙️ Installing dependencies...');
|
|
354
548
|
try {
|
|
@@ -380,7 +574,22 @@ if (command === 'install') {
|
|
|
380
574
|
}
|
|
381
575
|
}
|
|
382
576
|
|
|
383
|
-
|
|
577
|
+
// Auto-run doctor to verify installation
|
|
578
|
+
console.log('\n🩺 Running doctor to verify installation...');
|
|
579
|
+
const doctorPath = path.join(CWD, 'scripts', 'doctor.mjs');
|
|
580
|
+
if (fs.existsSync(doctorPath)) {
|
|
581
|
+
const result = spawnSync(process.execPath, [doctorPath], {
|
|
582
|
+
stdio: 'inherit',
|
|
583
|
+
cwd: CWD
|
|
584
|
+
});
|
|
585
|
+
if (result.status !== 0) {
|
|
586
|
+
console.error('\n \x1b[33m⚠\x1b[0m Doctor reported issues. Review the output above.');
|
|
587
|
+
}
|
|
588
|
+
} else {
|
|
589
|
+
console.log(' \x1b[33m⚠\x1b[0m Doctor script not found — skipping verification.');
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
console.log('\n✅ V-Bounce Engine successfully installed! Welcome to the team.\n');
|
|
384
593
|
});
|
|
385
594
|
|
|
386
595
|
} else {
|
package/brains/AGENTS.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# V-Bounce
|
|
1
|
+
# V-Bounce Engine — Agent Brain (Codex CLI)
|
|
2
2
|
|
|
3
|
-
> This file configures OpenAI Codex CLI to operate within the V-Bounce
|
|
3
|
+
> This file configures OpenAI Codex CLI to operate within the V-Bounce Engine framework.
|
|
4
4
|
|
|
5
5
|
## Identity
|
|
6
6
|
|
|
7
|
-
You are an AI coding agent operating within **V-Bounce
|
|
7
|
+
You are an AI coding agent operating within **V-Bounce Engine** — a structured system for planning, implementing, and validating software using AI agents. You work as part of a team: Team Lead, Developer, QA, Architect, DevOps, and Scribe agents collaborate through structured reports.
|
|
8
8
|
|
|
9
9
|
You MUST follow the V-Bounce process. Deviating from it — skipping validation, ignoring LESSONS.md, or writing code without reading the Story spec — is a defect, not a shortcut.
|
|
10
10
|
|
|
@@ -106,7 +106,7 @@ Bouncing → Escalated (3+ failures)
|
|
|
106
106
|
## Framework Structure
|
|
107
107
|
|
|
108
108
|
```
|
|
109
|
-
V-Bounce
|
|
109
|
+
V-Bounce Engine/
|
|
110
110
|
├── brains/ — Agent brain files (this file)
|
|
111
111
|
├── templates/ — Document templates (immutable)
|
|
112
112
|
├── skills/ — Agent skills (SKILL.md files)
|
package/brains/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# V-Bounce
|
|
1
|
+
# V-Bounce Engine Brains & Skills Changelog
|
|
2
2
|
|
|
3
3
|
This log tracks modifications to the core agentic framework (e.g., `brains/`, `skills/`).
|
|
4
4
|
Per **Rule 13: Framework Integrity**, anytime an entry is made here, all tool-specific brain files must be reviewed for consistency.
|
|
@@ -21,7 +21,7 @@ Per **Rule 13: Framework Integrity**, anytime an entry is made here, all tool-sp
|
|
|
21
21
|
- **Modified**: `.gitignore` — Removed `.bounce/.lancedb/` entry.
|
|
22
22
|
- **Rationale**: Modern LLMs have 200K+ token context windows. The prep scripts (`vbounce prep sprint/qa/arch`) + LESSONS.md graduation provide targeted, deterministic context without embedding models, sync steps, or heavy dependencies. Removes ~50MB of node_modules and eliminates the most common setup failure point.
|
|
23
23
|
|
|
24
|
-
## [2026-03-12] — V-Bounce
|
|
24
|
+
## [2026-03-12] — V-Bounce Engine Optimization Plan (12-Change Batch)
|
|
25
25
|
|
|
26
26
|
### State Management (Change #1)
|
|
27
27
|
- **Added**: `.bounce/state.json` — machine-readable sprint state snapshot for crash recovery. Tracks sprint_id, delivery_id, current_phase, last_action, and per-story state (V-Bounce state, bounce counts, worktree path, updated_at).
|
package/brains/CLAUDE.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# V-Bounce
|
|
1
|
+
# V-Bounce Engine — Agent Brain
|
|
2
2
|
|
|
3
|
-
> This file configures Claude Code to operate within the V-Bounce
|
|
3
|
+
> This file configures Claude Code to operate within the V-Bounce Engine framework.
|
|
4
4
|
|
|
5
5
|
## Identity
|
|
6
6
|
|
|
7
|
-
You are an AI coding agent operating within **V-Bounce
|
|
7
|
+
You are an AI coding agent operating within **V-Bounce Engine** — a structured system for planning, implementing, and validating software using AI agents. You work as part of a team: Team Lead, Developer, QA, Architect, DevOps, and Scribe agents collaborate through structured reports.
|
|
8
8
|
|
|
9
9
|
You MUST follow the V-Bounce process. Deviating from it — skipping validation, ignoring LESSONS.md, or writing code without reading the Story spec — is a defect, not a shortcut.
|
|
10
10
|
|
|
@@ -127,7 +127,7 @@ Draft → Refinement → Ready to Bounce → Bouncing → QA Passed → Architec
|
|
|
127
127
|
## Framework Structure
|
|
128
128
|
|
|
129
129
|
```
|
|
130
|
-
V-Bounce
|
|
130
|
+
V-Bounce Engine/
|
|
131
131
|
├── brains/ — Agent brain files (this file)
|
|
132
132
|
├── templates/ — Document templates (immutable)
|
|
133
133
|
├── skills/ — Agent skills (SKILL.md files)
|
package/brains/GEMINI.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# V-Bounce
|
|
1
|
+
# V-Bounce Engine — Agent Brain
|
|
2
2
|
|
|
3
|
-
> This file configures Gemini CLI and Antigravity to operate within the V-Bounce
|
|
3
|
+
> This file configures Gemini CLI and Antigravity to operate within the V-Bounce Engine framework.
|
|
4
4
|
> Place at project root for Gemini CLI. For Antigravity, also copy skills to `.agents/skills/`.
|
|
5
5
|
|
|
6
6
|
## Identity
|
|
7
7
|
|
|
8
|
-
You are an AI coding agent operating within **V-Bounce
|
|
8
|
+
You are an AI coding agent operating within **V-Bounce Engine** — a structured system for planning, implementing, and validating software using AI agents. You work as part of a team: Team Lead, Developer, QA, Architect, DevOps, and Scribe agents collaborate through structured reports.
|
|
9
9
|
|
|
10
10
|
You MUST follow the V-Bounce process. Deviating from it — skipping validation, ignoring LESSONS.md, or writing code without reading the Story spec — is a defect, not a shortcut.
|
|
11
11
|
|
|
@@ -27,7 +27,7 @@ For Antigravity: copy skills to `.agents/skills/` for workspace-scoped discovery
|
|
|
27
27
|
|
|
28
28
|
## CLI Commands
|
|
29
29
|
|
|
30
|
-
V-Bounce
|
|
30
|
+
V-Bounce Engine ships a CLI. Use these commands for state management instead of editing files manually:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
33
|
# Sprint management
|
|
@@ -149,7 +149,7 @@ Draft → Refinement → Ready to Bounce → Bouncing → QA Passed → Architec
|
|
|
149
149
|
## Framework Structure
|
|
150
150
|
|
|
151
151
|
```
|
|
152
|
-
V-Bounce
|
|
152
|
+
V-Bounce Engine/
|
|
153
153
|
├── brains/ — Agent brain files (this file)
|
|
154
154
|
├── templates/ — Document templates (immutable)
|
|
155
155
|
├── skills/ — Agent skills (SKILL.md files)
|
package/brains/SETUP.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# Adding V-Bounce
|
|
1
|
+
# Adding V-Bounce Engine to Any Repo
|
|
2
2
|
|
|
3
|
-
Step-by-step guide to set up V-Bounce
|
|
3
|
+
Step-by-step guide to set up V-Bounce Engine in an existing or new project.
|
|
4
4
|
|
|
5
5
|
## Prerequisites
|
|
6
6
|
|
|
7
|
-
- A git repository (V-Bounce
|
|
7
|
+
- A git repository (V-Bounce Engine uses branches and worktrees)
|
|
8
8
|
- Node.js installed (for validation and semantic search scripts)
|
|
9
9
|
- At least one supported AI coding tool installed
|
|
10
|
-
- The V-Bounce
|
|
10
|
+
- The V-Bounce Engine folder (this repo)
|
|
11
11
|
|
|
12
12
|
## Step 1: Copy the Framework
|
|
13
13
|
|
|
@@ -15,11 +15,11 @@ Copy the `skills/` and `templates/` directories into your project root:
|
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
17
|
# From your project root
|
|
18
|
-
cp -r /path/to/V-Bounce-
|
|
19
|
-
cp -r /path/to/V-Bounce-
|
|
18
|
+
cp -r /path/to/V-Bounce-Engine/skills/ ./skills/
|
|
19
|
+
cp -r /path/to/V-Bounce-Engine/templates/ ./templates/
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
These are the core of V-Bounce
|
|
22
|
+
These are the core of V-Bounce Engine — skills define agent behavior, templates define document structure.
|
|
23
23
|
|
|
24
24
|
## Step 2: Deploy Brain File for Your AI Tool
|
|
25
25
|
|
|
@@ -27,32 +27,32 @@ Pick the tool you're using and deploy the corresponding brain file:
|
|
|
27
27
|
|
|
28
28
|
### Claude Code
|
|
29
29
|
```bash
|
|
30
|
-
cp /path/to/V-Bounce-
|
|
30
|
+
cp /path/to/V-Bounce-Engine/brains/CLAUDE.md ./CLAUDE.md
|
|
31
31
|
|
|
32
32
|
# Deploy subagent configs
|
|
33
33
|
mkdir -p .claude/agents
|
|
34
|
-
cp /path/to/V-Bounce-
|
|
34
|
+
cp /path/to/V-Bounce-Engine/brains/claude-agents/*.md .claude/agents/
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
### Codex CLI (OpenAI)
|
|
38
38
|
```bash
|
|
39
|
-
cp /path/to/V-Bounce-
|
|
39
|
+
cp /path/to/V-Bounce-Engine/brains/AGENTS.md ./AGENTS.md
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
### Cursor
|
|
43
43
|
```bash
|
|
44
44
|
mkdir -p .cursor/rules
|
|
45
|
-
cp /path/to/V-Bounce-
|
|
45
|
+
cp /path/to/V-Bounce-Engine/brains/cursor-rules/*.mdc .cursor/rules/
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
### Gemini CLI
|
|
49
49
|
```bash
|
|
50
|
-
cp /path/to/V-Bounce-
|
|
50
|
+
cp /path/to/V-Bounce-Engine/brains/GEMINI.md ./GEMINI.md
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
### Antigravity
|
|
54
54
|
```bash
|
|
55
|
-
cp /path/to/V-Bounce-
|
|
55
|
+
cp /path/to/V-Bounce-Engine/brains/GEMINI.md ./GEMINI.md
|
|
56
56
|
cp -r skills/ .agents/skills/
|
|
57
57
|
```
|
|
58
58
|
|
|
@@ -141,7 +141,7 @@ your-project/
|
|
|
141
141
|
├── CLAUDE.md ← brain file (or AGENTS.md / GEMINI.md)
|
|
142
142
|
├── LESSONS.md ← project-specific rules (grows over time)
|
|
143
143
|
├── .claude/agents/ ← subagent configs (Claude Code only)
|
|
144
|
-
├── skills/ ← V-Bounce
|
|
144
|
+
├── skills/ ← V-Bounce Engine skills
|
|
145
145
|
│ ├── agent-team/
|
|
146
146
|
│ ├── doc-manager/
|
|
147
147
|
│ ├── lesson/
|
|
@@ -192,4 +192,4 @@ brains/
|
|
|
192
192
|
└── vbounce-docs.mdc
|
|
193
193
|
```
|
|
194
194
|
|
|
195
|
-
Each brain file is self-contained and authoritative for its tool. When updating V-Bounce
|
|
195
|
+
Each brain file is self-contained and authoritative for its tool. When updating V-Bounce Engine rules, update each brain file directly and keep them in sync.
|
|
@@ -5,7 +5,7 @@ tools: Read, Glob, Grep, Bash
|
|
|
5
5
|
disallowedTools: Edit, Write
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
You are the **Architect Agent** in the V-Bounce
|
|
8
|
+
You are the **Architect Agent** in the V-Bounce Engine framework.
|
|
9
9
|
|
|
10
10
|
## Your Role
|
|
11
11
|
Audit the codebase for structural integrity, standards compliance, and long-term sustainability. You review — you do not implement. You are the last gate before human review.
|
|
@@ -5,7 +5,7 @@ tools: Read, Edit, Write, Bash, Glob, Grep
|
|
|
5
5
|
model: sonnet
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
You are the **Developer Agent** in the V-Bounce
|
|
8
|
+
You are the **Developer Agent** in the V-Bounce Engine framework.
|
|
9
9
|
|
|
10
10
|
## Your Role
|
|
11
11
|
Implement features and fix bugs as specified in Story documents. You write code — nothing more, nothing less.
|
|
@@ -5,7 +5,7 @@ tools: Read, Bash, Glob, Grep
|
|
|
5
5
|
disallowedTools: Edit, Write
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
You are the **QA Agent** in the V-Bounce
|
|
8
|
+
You are the **QA Agent** in the V-Bounce Engine framework.
|
|
9
9
|
|
|
10
10
|
## Your Role
|
|
11
11
|
Validate that the Developer's implementation meets the Story's acceptance criteria. You test — you do not fix. If something fails, you write a detailed bug report and send it back.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# V-Bounce
|
|
1
|
+
# V-Bounce Engine — GitHub Copilot Instructions
|
|
2
2
|
|
|
3
|
-
This project uses **V-Bounce
|
|
3
|
+
This project uses **V-Bounce Engine** — a structured AI-agent development framework.
|
|
4
4
|
|
|
5
5
|
## What This Means for You
|
|
6
6
|
|
|
7
|
-
You are operating in Tier 4 (Awareness) mode. You understand the project uses V-Bounce
|
|
7
|
+
You are operating in Tier 4 (Awareness) mode. You understand the project uses V-Bounce Engine but you do not orchestrate agents.
|
|
8
8
|
|
|
9
9
|
## Key Behaviors
|
|
10
10
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: V-Bounce
|
|
2
|
+
description: V-Bounce Engine document hierarchy — templates, locations, and report formats
|
|
3
3
|
globs:
|
|
4
4
|
alwaysApply: false
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# V-Bounce
|
|
7
|
+
# V-Bounce Engine — Document & Report Reference
|
|
8
8
|
|
|
9
9
|
## Document Locations
|
|
10
10
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: V-Bounce
|
|
2
|
+
description: V-Bounce Engine process rules — the core framework for AI-assisted software development
|
|
3
3
|
globs:
|
|
4
4
|
alwaysApply: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# V-Bounce
|
|
7
|
+
# V-Bounce Engine — Process Rules
|
|
8
8
|
|
|
9
|
-
You are an AI coding agent operating within **V-Bounce
|
|
9
|
+
You are an AI coding agent operating within **V-Bounce Engine** — a structured system for planning, implementing, and validating software using AI agents.
|
|
10
10
|
|
|
11
11
|
## The V-Bounce Process
|
|
12
12
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: V-Bounce
|
|
2
|
+
description: V-Bounce Engine critical rules — mandatory constraints for all implementation work
|
|
3
3
|
globs:
|
|
4
4
|
alwaysApply: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# V-Bounce
|
|
7
|
+
# V-Bounce Engine — Critical Rules
|
|
8
8
|
|
|
9
9
|
## Before Writing Code
|
|
10
10
|
1. **Read LESSONS.md** at the project root. Every time. No exceptions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Hotfix Workflow: Edge Cases & Mitigations
|
|
2
2
|
|
|
3
|
-
This document outlines the critical edge cases, failure modes, and required mitigations for the **V-Bounce
|
|
3
|
+
This document outlines the critical edge cases, failure modes, and required mitigations for the **V-Bounce Engine Hotfix (L1 Trivial)** workflow.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sandrinio/vbounce",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "V-Bounce
|
|
3
|
+
"version": "1.9.0",
|
|
4
|
+
"description": "V-Bounce Engine: Turn your AI coding assistant into a full engineering team through structured SDLC skills.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"vbounce": "./bin/vbounce.mjs"
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"repository": {
|
|
13
13
|
"type": "git",
|
|
14
|
-
"url": "git+https://github.com/sandrinio/v-bounce-
|
|
14
|
+
"url": "git+https://github.com/sandrinio/v-bounce-engine.git"
|
|
15
15
|
},
|
|
16
16
|
"keywords": [
|
|
17
17
|
"ai",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"author": "sandrinio",
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"bugs": {
|
|
31
|
-
"url": "https://github.com/sandrinio/v-bounce-
|
|
31
|
+
"url": "https://github.com/sandrinio/v-bounce-engine/issues"
|
|
32
32
|
},
|
|
33
|
-
"homepage": "https://github.com/sandrinio/v-bounce-
|
|
33
|
+
"homepage": "https://github.com/sandrinio/v-bounce-engine#readme",
|
|
34
34
|
"files": [
|
|
35
35
|
"bin",
|
|
36
36
|
"brains",
|
package/scripts/doctor.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* doctor.mjs
|
|
5
|
-
* V-Bounce
|
|
5
|
+
* V-Bounce Engine Health Check — validates all configs, templates, state files
|
|
6
6
|
* Usage: vbounce doctor
|
|
7
7
|
*/
|
|
8
8
|
|
|
@@ -42,7 +42,7 @@ const templatesDir = path.join(ROOT, 'templates');
|
|
|
42
42
|
let templateCount = 0;
|
|
43
43
|
for (const t of requiredTemplates) {
|
|
44
44
|
if (fs.existsSync(path.join(templatesDir, t))) templateCount++;
|
|
45
|
-
else fail(`templates/${t} missing`, `Create from V-Bounce
|
|
45
|
+
else fail(`templates/${t} missing`, `Create from V-Bounce Engine template`);
|
|
46
46
|
}
|
|
47
47
|
if (templateCount === requiredTemplates.length) pass(`templates/ complete (${templateCount}/${requiredTemplates.length})`);
|
|
48
48
|
|
|
@@ -130,7 +130,7 @@ if (fs.existsSync(path.join(ROOT, 'vbounce.config.json'))) {
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
// Print results
|
|
133
|
-
console.log('\nV-Bounce
|
|
133
|
+
console.log('\nV-Bounce Engine Health Check');
|
|
134
134
|
console.log('========================');
|
|
135
135
|
checks.forEach(c => console.log(c));
|
|
136
136
|
console.log('');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
|
-
# V-Bounce
|
|
3
|
+
# V-Bounce Engine: Hotfix Manager
|
|
4
4
|
# Handles edge cases for L1 Trivial tasks to save tokens and ensure framework integrity.
|
|
5
5
|
|
|
6
6
|
set -euo pipefail
|
|
@@ -14,7 +14,7 @@ REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) || {
|
|
|
14
14
|
COMMAND="${1:-}"
|
|
15
15
|
|
|
16
16
|
function show_help {
|
|
17
|
-
echo "V-Bounce
|
|
17
|
+
echo "V-Bounce Engine — Hotfix Manager"
|
|
18
18
|
echo ""
|
|
19
19
|
echo "Usage: ./scripts/hotfix_manager.sh <command> [args]"
|
|
20
20
|
echo ""
|
|
@@ -31,7 +31,7 @@ fi
|
|
|
31
31
|
# Resolve to absolute path
|
|
32
32
|
WORKTREE_PATH="$(cd "$WORKTREE_PATH" && pwd)"
|
|
33
33
|
|
|
34
|
-
echo -e "${CYAN}V-Bounce
|
|
34
|
+
echo -e "${CYAN}V-Bounce Engine Pre-Gate Scanner${NC}"
|
|
35
35
|
echo -e "Gate: ${YELLOW}${GATE_TYPE}${NC}"
|
|
36
36
|
echo -e "Target: ${WORKTREE_PATH}"
|
|
37
37
|
echo ""
|
|
@@ -159,7 +159,7 @@ suggestions.push({
|
|
|
159
159
|
num: itemNum++,
|
|
160
160
|
category: 'Health',
|
|
161
161
|
title: 'Run vbounce doctor',
|
|
162
|
-
detail: 'Verify the V-Bounce
|
|
162
|
+
detail: 'Verify the V-Bounce Engine installation is healthy after this sprint.',
|
|
163
163
|
recommendation: 'Run: `vbounce doctor` — checks brain files, templates, scripts, state.json validity.',
|
|
164
164
|
target: 'scripts/doctor.mjs',
|
|
165
165
|
effort: 'Trivial',
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* validate_report.mjs
|
|
5
5
|
*
|
|
6
|
-
* Strict YAML Frontmatter validation for V-Bounce
|
|
6
|
+
* Strict YAML Frontmatter validation for V-Bounce Engine Agent Reports.
|
|
7
7
|
* Fails loudly if an agent hallucinates formatting or omits required fields,
|
|
8
8
|
* so the orchestrator can bounce the prompt back.
|
|
9
9
|
*/
|
|
@@ -63,7 +63,7 @@ const EXPECTED_PROMPT_SIGNATURES = {
|
|
|
63
63
|
|
|
64
64
|
function main() {
|
|
65
65
|
console.log("===========================================");
|
|
66
|
-
console.log(" V-Bounce
|
|
66
|
+
console.log(" V-Bounce Engine: Framework Integrity Check");
|
|
67
67
|
console.log("===========================================\n");
|
|
68
68
|
|
|
69
69
|
let hasErrors = false;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: doc-manager
|
|
3
|
-
description: "Use when creating, modifying, or navigating V-Bounce
|
|
3
|
+
description: "Use when creating, modifying, or navigating V-Bounce Engine planning documents. Trigger on any request to create a charter, roadmap, epic, story, delivery plan, or risk registry — or when the user asks to update, refine, decompose, or transition documents between phases. Also trigger when an agent needs to know which template to use, where a document fits in the hierarchy, or what upstream/downstream documents to read before writing. This skill manages the full document lifecycle from Charter through Sprint execution."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Document Hierarchy Manager
|
|
7
7
|
|
|
8
8
|
## Purpose
|
|
9
9
|
|
|
10
|
-
This skill is the navigation system for V-Bounce
|
|
10
|
+
This skill is the navigation system for V-Bounce Engine planning documents. It knows the full document hierarchy, what each template contains, where to find templates, and the rules for creating, modifying, and transitioning documents between phases.
|
|
11
11
|
|
|
12
12
|
**Core principle:** No document exists in isolation. Every document inherits context from upstream and feeds downstream consumers. YOU MUST read upstream documents before creating any new document.
|
|
13
13
|
|
|
@@ -120,10 +120,10 @@ product_plans/
|
|
|
120
120
|
- `sprints/` contains active 1-week execution boundaries. A Story file physically moves here when a sprint begins.
|
|
121
121
|
- `archive/` is where finished Sprints and finished Epics are moved for permanent record keeping.
|
|
122
122
|
|
|
123
|
-
### V-Bounce
|
|
123
|
+
### V-Bounce Engine Framework Structure
|
|
124
124
|
|
|
125
125
|
```
|
|
126
|
-
V-Bounce
|
|
126
|
+
V-Bounce Engine/
|
|
127
127
|
├── brains/ — Agent brain files for each AI coding tool
|
|
128
128
|
│ ├── CLAUDE.md — Claude Code brain
|
|
129
129
|
│ ├── AGENTS.md — Codex CLI brain
|
|
@@ -148,7 +148,7 @@ When initializing a new project, deploy the correct brain file for the AI coding
|
|
|
148
148
|
| Gemini CLI | `brains/GEMINI.md` | Project root as `GEMINI.md` |
|
|
149
149
|
| Antigravity | `brains/GEMINI.md` | Project root + copy `skills/` to `.agents/skills/` |
|
|
150
150
|
|
|
151
|
-
Brain files contain the V-Bounce process, critical rules, and skill references. Each tool's brain file is self-contained and authoritative. When updating V-Bounce
|
|
151
|
+
Brain files contain the V-Bounce process, critical rules, and skill references. Each tool's brain file is self-contained and authoritative. When updating V-Bounce Engine rules, update each brain file directly and keep them in sync.
|
|
152
152
|
|
|
153
153
|
## Document Operations
|
|
154
154
|
|
package/skills/improve/SKILL.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: improve
|
|
3
|
-
description: "Use when the V-Bounce
|
|
3
|
+
description: "Use when the V-Bounce Engine framework needs to evolve based on accumulated agent feedback. Activates after sprint retros, when recurring friction patterns emerge, or when the user explicitly asks to improve the framework. Reads Process Feedback from sprint reports, identifies patterns, proposes specific changes to templates, skills, brain files, scripts, and agent configs, and applies approved changes. This is the system's self-improvement loop."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Framework Self-Improvement
|
|
7
7
|
|
|
8
8
|
## Purpose
|
|
9
9
|
|
|
10
|
-
V-Bounce
|
|
10
|
+
V-Bounce Engine is not static. Every sprint generates friction signals from agents who work within the framework daily. This skill closes the feedback loop: it reads what agents struggled with, identifies patterns, and proposes targeted improvements to the framework itself.
|
|
11
11
|
|
|
12
12
|
**Core principle:** No framework change happens without human approval. The system suggests — the human decides.
|
|
13
13
|
|