agent-bober 0.1.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/.claude-plugin/plugin.json +9 -0
- package/LICENSE +21 -0
- package/README.md +495 -0
- package/agents/bober-evaluator.md +323 -0
- package/agents/bober-generator.md +245 -0
- package/agents/bober-planner.md +248 -0
- package/dist/cli/commands/eval.d.ts +6 -0
- package/dist/cli/commands/eval.d.ts.map +1 -0
- package/dist/cli/commands/eval.js +129 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/init.d.ts +5 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +547 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +5 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +87 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/run.d.ts +5 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +120 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/sprint.d.ts +6 -0
- package/dist/cli/commands/sprint.d.ts.map +1 -0
- package/dist/cli/commands/sprint.js +206 -0
- package/dist/cli/commands/sprint.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +124 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/defaults.d.ts +15 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +226 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +8 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +18 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +189 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +904 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +181 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/contracts/eval-result.d.ts +205 -0
- package/dist/contracts/eval-result.d.ts.map +1 -0
- package/dist/contracts/eval-result.js +87 -0
- package/dist/contracts/eval-result.js.map +1 -0
- package/dist/contracts/index.d.ts +4 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +16 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/spec.d.ts +101 -0
- package/dist/contracts/spec.d.ts.map +1 -0
- package/dist/contracts/spec.js +51 -0
- package/dist/contracts/spec.js.map +1 -0
- package/dist/contracts/sprint-contract.d.ts +141 -0
- package/dist/contracts/sprint-contract.d.ts.map +1 -0
- package/dist/contracts/sprint-contract.js +80 -0
- package/dist/contracts/sprint-contract.js.map +1 -0
- package/dist/evaluators/builtin/api-check.d.ts +13 -0
- package/dist/evaluators/builtin/api-check.d.ts.map +1 -0
- package/dist/evaluators/builtin/api-check.js +152 -0
- package/dist/evaluators/builtin/api-check.js.map +1 -0
- package/dist/evaluators/builtin/build-check.d.ts +17 -0
- package/dist/evaluators/builtin/build-check.d.ts.map +1 -0
- package/dist/evaluators/builtin/build-check.js +155 -0
- package/dist/evaluators/builtin/build-check.js.map +1 -0
- package/dist/evaluators/builtin/command-runner.d.ts +26 -0
- package/dist/evaluators/builtin/command-runner.d.ts.map +1 -0
- package/dist/evaluators/builtin/command-runner.js +114 -0
- package/dist/evaluators/builtin/command-runner.js.map +1 -0
- package/dist/evaluators/builtin/lint.d.ts +17 -0
- package/dist/evaluators/builtin/lint.d.ts.map +1 -0
- package/dist/evaluators/builtin/lint.js +264 -0
- package/dist/evaluators/builtin/lint.js.map +1 -0
- package/dist/evaluators/builtin/playwright.d.ts +16 -0
- package/dist/evaluators/builtin/playwright.d.ts.map +1 -0
- package/dist/evaluators/builtin/playwright.js +238 -0
- package/dist/evaluators/builtin/playwright.js.map +1 -0
- package/dist/evaluators/builtin/typescript-check.d.ts +12 -0
- package/dist/evaluators/builtin/typescript-check.d.ts.map +1 -0
- package/dist/evaluators/builtin/typescript-check.js +155 -0
- package/dist/evaluators/builtin/typescript-check.js.map +1 -0
- package/dist/evaluators/builtin/unit-test.d.ts +18 -0
- package/dist/evaluators/builtin/unit-test.d.ts.map +1 -0
- package/dist/evaluators/builtin/unit-test.js +279 -0
- package/dist/evaluators/builtin/unit-test.js.map +1 -0
- package/dist/evaluators/index.d.ts +11 -0
- package/dist/evaluators/index.d.ts.map +1 -0
- package/dist/evaluators/index.js +13 -0
- package/dist/evaluators/index.js.map +1 -0
- package/dist/evaluators/plugin-interface.d.ts +50 -0
- package/dist/evaluators/plugin-interface.d.ts.map +1 -0
- package/dist/evaluators/plugin-interface.js +2 -0
- package/dist/evaluators/plugin-interface.js.map +1 -0
- package/dist/evaluators/plugin-loader.d.ts +18 -0
- package/dist/evaluators/plugin-loader.d.ts.map +1 -0
- package/dist/evaluators/plugin-loader.js +107 -0
- package/dist/evaluators/plugin-loader.js.map +1 -0
- package/dist/evaluators/registry.d.ts +78 -0
- package/dist/evaluators/registry.d.ts.map +1 -0
- package/dist/evaluators/registry.js +238 -0
- package/dist/evaluators/registry.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/context-handoff.d.ts +543 -0
- package/dist/orchestrator/context-handoff.d.ts.map +1 -0
- package/dist/orchestrator/context-handoff.js +133 -0
- package/dist/orchestrator/context-handoff.js.map +1 -0
- package/dist/orchestrator/evaluator-agent.d.ts +15 -0
- package/dist/orchestrator/evaluator-agent.d.ts.map +1 -0
- package/dist/orchestrator/evaluator-agent.js +233 -0
- package/dist/orchestrator/evaluator-agent.js.map +1 -0
- package/dist/orchestrator/generator-agent.d.ts +16 -0
- package/dist/orchestrator/generator-agent.d.ts.map +1 -0
- package/dist/orchestrator/generator-agent.js +147 -0
- package/dist/orchestrator/generator-agent.js.map +1 -0
- package/dist/orchestrator/pipeline.d.ts +24 -0
- package/dist/orchestrator/pipeline.d.ts.map +1 -0
- package/dist/orchestrator/pipeline.js +290 -0
- package/dist/orchestrator/pipeline.js.map +1 -0
- package/dist/orchestrator/planner-agent.d.ts +10 -0
- package/dist/orchestrator/planner-agent.d.ts.map +1 -0
- package/dist/orchestrator/planner-agent.js +187 -0
- package/dist/orchestrator/planner-agent.js.map +1 -0
- package/dist/state/helpers.d.ts +5 -0
- package/dist/state/helpers.d.ts.map +1 -0
- package/dist/state/helpers.js +8 -0
- package/dist/state/helpers.js.map +1 -0
- package/dist/state/history.d.ts +39 -0
- package/dist/state/history.d.ts.map +1 -0
- package/dist/state/history.js +162 -0
- package/dist/state/history.js.map +1 -0
- package/dist/state/index.d.ts +8 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +22 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/plan-state.d.ts +21 -0
- package/dist/state/plan-state.d.ts.map +1 -0
- package/dist/state/plan-state.js +108 -0
- package/dist/state/plan-state.js.map +1 -0
- package/dist/state/sprint-state.d.ts +20 -0
- package/dist/state/sprint-state.d.ts.map +1 -0
- package/dist/state/sprint-state.js +98 -0
- package/dist/state/sprint-state.js.map +1 -0
- package/dist/utils/fs.d.ts +31 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +67 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/git.d.ts +35 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +84 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +45 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +73 -0
- package/dist/utils/logger.js.map +1 -0
- package/hooks/hooks.json +10 -0
- package/package.json +67 -0
- package/scripts/detect-stack.sh +287 -0
- package/scripts/init-project.sh +206 -0
- package/scripts/run-eval.sh +175 -0
- package/skills/bober.anchor/SKILL.md +365 -0
- package/skills/bober.anchor/references/anchor-guide.md +567 -0
- package/skills/bober.brownfield/SKILL.md +422 -0
- package/skills/bober.brownfield/references/codebase-analysis.md +304 -0
- package/skills/bober.eval/SKILL.md +235 -0
- package/skills/bober.eval/references/eval-strategies.md +407 -0
- package/skills/bober.eval/references/feedback-format.md +182 -0
- package/skills/bober.plan/SKILL.md +244 -0
- package/skills/bober.plan/references/clarification-guide.md +124 -0
- package/skills/bober.plan/references/spec-schema.md +253 -0
- package/skills/bober.react/SKILL.md +330 -0
- package/skills/bober.react/references/react-scaffold.md +344 -0
- package/skills/bober.run/SKILL.md +303 -0
- package/skills/bober.solidity/SKILL.md +416 -0
- package/skills/bober.solidity/references/solidity-guide.md +487 -0
- package/skills/bober.sprint/SKILL.md +280 -0
- package/skills/bober.sprint/references/contract-schema.md +251 -0
- package/templates/base/CLAUDE.md +20 -0
- package/templates/base/bober.config.json +35 -0
- package/templates/brownfield/CLAUDE.md +34 -0
- package/templates/brownfield/bober.config.json +37 -0
- package/templates/presets/anchor/CLAUDE.md +163 -0
- package/templates/presets/anchor/bober.config.json +9 -0
- package/templates/presets/api-node/CLAUDE.md +153 -0
- package/templates/presets/api-node/bober.config.json +10 -0
- package/templates/presets/nextjs/CLAUDE.md +82 -0
- package/templates/presets/nextjs/bober.config.json +14 -0
- package/templates/presets/python-api/CLAUDE.md +202 -0
- package/templates/presets/python-api/bober.config.json +9 -0
- package/templates/presets/react-vite/CLAUDE.md +71 -0
- package/templates/presets/react-vite/bober.config.json +53 -0
- package/templates/presets/react-vite/scaffold/package.json +45 -0
- package/templates/presets/react-vite/scaffold/server/index.ts +38 -0
- package/templates/presets/react-vite/scaffold/server/tsconfig.json +24 -0
- package/templates/presets/react-vite/scaffold/src/App.tsx +37 -0
- package/templates/presets/react-vite/scaffold/src/index.html +12 -0
- package/templates/presets/react-vite/scaffold/src/main.tsx +12 -0
- package/templates/presets/react-vite/scaffold/tsconfig.json +27 -0
- package/templates/presets/react-vite/scaffold/vite.config.ts +34 -0
- package/templates/presets/solidity/CLAUDE.md +106 -0
- package/templates/presets/solidity/bober.config.json +9 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober.run
|
|
3
|
+
description: Full autonomous pipeline — plan a feature, execute all sprints, evaluate each one, and iterate until complete or stuck.
|
|
4
|
+
argument-hint: <task-description>
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# bober.run — Full Pipeline Orchestrator
|
|
8
|
+
|
|
9
|
+
You are running the **bober.run** skill. This is the top-level orchestrator that runs the entire Generator-Evaluator pipeline from start to finish: planning, sprint execution, evaluation, and iteration. The user provides a task description and you deliver a working implementation.
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The pipeline follows this flow:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
User Task Description
|
|
17
|
+
|
|
|
18
|
+
v
|
|
19
|
+
[1. PLAN] -----> PlanSpec + Sprint Contracts
|
|
20
|
+
|
|
|
21
|
+
v
|
|
22
|
+
[2. SPRINT LOOP]
|
|
23
|
+
|
|
|
24
|
+
+----> [2a. Generate] ---> Code changes
|
|
25
|
+
| |
|
|
26
|
+
| v
|
|
27
|
+
| [2b. Evaluate] ---> Pass/Fail
|
|
28
|
+
| |
|
|
29
|
+
| fail + retries left?
|
|
30
|
+
| |
|
|
31
|
+
| yes: feedback --> [2a. Generate]
|
|
32
|
+
| no: escalate
|
|
33
|
+
|
|
|
34
|
+
| pass: next sprint
|
|
35
|
+
|
|
|
36
|
+
v
|
|
37
|
+
[3. COMPLETE] ---> All sprints done
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Step 1: Initialize and Plan
|
|
41
|
+
|
|
42
|
+
### 1a. Check Project State
|
|
43
|
+
|
|
44
|
+
Read `bober.config.json`. If it does not exist:
|
|
45
|
+
- Ask the user the minimal initialization questions: project name, mode (greenfield vs brownfield), and what they are building
|
|
46
|
+
- Determine the appropriate `mode` and `preset` (if any) from the user's description
|
|
47
|
+
- Create `bober.config.json` with appropriate defaults
|
|
48
|
+
- Create the `.bober/` directory structure
|
|
49
|
+
|
|
50
|
+
If `bober.config.json` exists, read the configuration.
|
|
51
|
+
|
|
52
|
+
### 1b. Check for Existing Plans
|
|
53
|
+
|
|
54
|
+
Read `.bober/specs/` and `.bober/progress.md`. If there is an existing plan with incomplete sprints:
|
|
55
|
+
|
|
56
|
+
Ask the user:
|
|
57
|
+
```
|
|
58
|
+
I found an existing plan: "<plan title>" with <N> sprints (<M> completed, <K> remaining).
|
|
59
|
+
|
|
60
|
+
A) Continue with the existing plan (resume from sprint <next>)
|
|
61
|
+
B) Create a new plan for your task (the existing plan stays but won't be executed)
|
|
62
|
+
C) Archive the existing plan and start fresh
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 1c. Run the Planning Phase
|
|
66
|
+
|
|
67
|
+
If creating a new plan, execute the bober.plan workflow:
|
|
68
|
+
|
|
69
|
+
1. Gather codebase context (read key files, survey structure)
|
|
70
|
+
2. Ask 3-5 clarifying questions about the task
|
|
71
|
+
3. Wait for user responses
|
|
72
|
+
4. Generate the PlanSpec with sprint decomposition
|
|
73
|
+
5. Save everything to `.bober/`
|
|
74
|
+
|
|
75
|
+
**Configuration values that matter:**
|
|
76
|
+
- `planner.maxClarifications`: Max questions to ask
|
|
77
|
+
- `sprint.maxSprints`: Maximum number of sprints in the plan
|
|
78
|
+
- `sprint.sprintSize`: Size calibration for sprint decomposition
|
|
79
|
+
|
|
80
|
+
Report the plan summary to the user and proceed.
|
|
81
|
+
|
|
82
|
+
## Step 2: Sprint Execution Loop
|
|
83
|
+
|
|
84
|
+
Load the sprint contracts from `.bober/contracts/` in order. For each sprint with status `proposed` or `needs-rework`:
|
|
85
|
+
|
|
86
|
+
### 2a. Pre-Sprint Checks
|
|
87
|
+
|
|
88
|
+
1. **Verify dependencies:** All sprints in `dependsOn` must have status `completed`
|
|
89
|
+
2. **Verify build state:** The project must build before starting a new sprint
|
|
90
|
+
```bash
|
|
91
|
+
# Run configured build/compile command (varies by stack)
|
|
92
|
+
# e.g., npm run build, anchor build, forge build, cargo build
|
|
93
|
+
```
|
|
94
|
+
If the build is broken BEFORE the sprint starts, stop and report this to the user. Do not start a sprint on a broken codebase.
|
|
95
|
+
3. **Verify git state:** Ensure we are on the correct feature branch
|
|
96
|
+
```bash
|
|
97
|
+
git branch --show-current
|
|
98
|
+
```
|
|
99
|
+
4. **Check iteration budget:** Read `pipeline.maxIterations` from config. Track total iterations across all sprints. If the budget is exhausted, stop.
|
|
100
|
+
|
|
101
|
+
### 2b. Contract Negotiation
|
|
102
|
+
|
|
103
|
+
If the sprint status is `proposed`:
|
|
104
|
+
- Review success criteria for executability
|
|
105
|
+
- Verify evaluation strategies are available
|
|
106
|
+
- Adjust criteria if needed
|
|
107
|
+
- Update status to `in-progress`
|
|
108
|
+
|
|
109
|
+
### 2c. Generate
|
|
110
|
+
|
|
111
|
+
Create a ContextHandoff for the Generator:
|
|
112
|
+
- Include the contract, project context, config, and any evaluator feedback (for retries)
|
|
113
|
+
- Include summaries of completed sprints
|
|
114
|
+
- Include relevant file paths
|
|
115
|
+
|
|
116
|
+
Spawn the `bober-generator` subagent.
|
|
117
|
+
|
|
118
|
+
After generation:
|
|
119
|
+
- Read the Generator's completion report
|
|
120
|
+
- Verify commits were made
|
|
121
|
+
- Proceed to evaluation
|
|
122
|
+
|
|
123
|
+
### 2d. Evaluate
|
|
124
|
+
|
|
125
|
+
Create a ContextHandoff for the Evaluator:
|
|
126
|
+
- Include the contract, Generator's report, config
|
|
127
|
+
|
|
128
|
+
Spawn the `bober-evaluator` subagent.
|
|
129
|
+
|
|
130
|
+
After evaluation:
|
|
131
|
+
- Read the EvalResult
|
|
132
|
+
- Save it to `.bober/eval-results/`
|
|
133
|
+
- Determine pass/fail
|
|
134
|
+
|
|
135
|
+
### 2e. Process Result
|
|
136
|
+
|
|
137
|
+
**On PASS:**
|
|
138
|
+
1. Update contract status to `completed`
|
|
139
|
+
2. Update `.bober/progress.md`
|
|
140
|
+
3. Log to `.bober/history.jsonl`
|
|
141
|
+
4. Report milestone to user:
|
|
142
|
+
```
|
|
143
|
+
Sprint <N>/<total> PASSED: <title>
|
|
144
|
+
Progress: [=====> ] <N>/<total> sprints complete
|
|
145
|
+
Next: <next sprint title>
|
|
146
|
+
```
|
|
147
|
+
5. Move to next sprint
|
|
148
|
+
|
|
149
|
+
**On FAIL with retries remaining:**
|
|
150
|
+
1. Check if iteration count < `evaluator.maxIterations` (default: 3)
|
|
151
|
+
2. Feed evaluator feedback back to Generator (go to 2c)
|
|
152
|
+
3. Report retry:
|
|
153
|
+
```
|
|
154
|
+
Sprint <N> iteration <M> failed. Retrying with evaluator feedback...
|
|
155
|
+
Failed: <brief failure summary>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**On FAIL with no retries:**
|
|
159
|
+
1. Update contract status to `needs-rework`
|
|
160
|
+
2. Decide whether to continue or stop based on severity:
|
|
161
|
+
- If the failure is in a non-blocking sprint (nothing depends on it), skip and continue
|
|
162
|
+
- If the failure blocks subsequent sprints, stop the pipeline
|
|
163
|
+
3. Report to user with full context
|
|
164
|
+
|
|
165
|
+
### 2f. Context Reset
|
|
166
|
+
|
|
167
|
+
After each sprint completes (pass or fail), check `pipeline.contextReset`:
|
|
168
|
+
- `always`: Fresh context for the next sprint. The next sprint's Generator receives only its handoff document.
|
|
169
|
+
- `on-threshold`: Continue with current context unless it is getting large. If context exceeds a reasonable threshold (use your judgment), reset.
|
|
170
|
+
- `never`: Carry all context forward (not recommended for long pipelines).
|
|
171
|
+
|
|
172
|
+
### 2g. Iteration Budget
|
|
173
|
+
|
|
174
|
+
Track total Generator-Evaluator iterations across all sprints:
|
|
175
|
+
- Each Generator+Evaluator cycle counts as 1 iteration
|
|
176
|
+
- When total iterations reach `pipeline.maxIterations` (default: 20), stop the pipeline regardless of sprint status
|
|
177
|
+
- Report the budget status:
|
|
178
|
+
```
|
|
179
|
+
Iteration budget: <used>/<max>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Step 3: Completion
|
|
183
|
+
|
|
184
|
+
When all sprints are complete (or the pipeline stops):
|
|
185
|
+
|
|
186
|
+
### All Sprints Passed
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
## Pipeline Complete
|
|
190
|
+
|
|
191
|
+
All <N> sprints passed successfully.
|
|
192
|
+
|
|
193
|
+
### Results
|
|
194
|
+
1. [PASS] Sprint 1: <title>
|
|
195
|
+
2. [PASS] Sprint 2: <title>
|
|
196
|
+
...
|
|
197
|
+
|
|
198
|
+
### Statistics
|
|
199
|
+
- Total iterations: <N>
|
|
200
|
+
- Sprints: <N>/<N> passed
|
|
201
|
+
- Time: <start> to <end>
|
|
202
|
+
|
|
203
|
+
### What Was Built
|
|
204
|
+
<Brief summary of the complete feature>
|
|
205
|
+
|
|
206
|
+
### Next Steps
|
|
207
|
+
- Review the code on branch: bober/<feature-slug>
|
|
208
|
+
- Run the test suite: npm test
|
|
209
|
+
- Merge to main when ready: git merge bober/<feature-slug>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Pipeline Stopped (failures or budget exhausted)
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
## Pipeline Stopped
|
|
216
|
+
|
|
217
|
+
Completed <M> of <N> sprints. Stopped because: <reason>
|
|
218
|
+
|
|
219
|
+
### Results
|
|
220
|
+
1. [PASS] Sprint 1: <title>
|
|
221
|
+
2. [PASS] Sprint 2: <title>
|
|
222
|
+
3. [FAIL] Sprint 3: <title> -- <failure reason>
|
|
223
|
+
4. [PENDING] Sprint 4: <title>
|
|
224
|
+
|
|
225
|
+
### Failed Sprint Details
|
|
226
|
+
Sprint 3: <title>
|
|
227
|
+
- Failed criteria: <list>
|
|
228
|
+
- Last evaluator feedback: <summary>
|
|
229
|
+
- Iterations used: <N>/<max>
|
|
230
|
+
|
|
231
|
+
### Recommended Actions
|
|
232
|
+
- Review evaluator feedback for Sprint 3
|
|
233
|
+
- Consider simplifying the sprint scope
|
|
234
|
+
- Run /bober.sprint 3 to retry Sprint 3 individually
|
|
235
|
+
- Run /bober.plan to revise the plan
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Human Escalation Protocol
|
|
239
|
+
|
|
240
|
+
Escalate to the user (pause and ask) when:
|
|
241
|
+
|
|
242
|
+
1. **Approval required:** If `pipeline.requireApproval` is `true` in config, pause before each sprint and show the contract summary. Wait for user approval before proceeding.
|
|
243
|
+
|
|
244
|
+
2. **Sprint failed after max iterations:** Report the full failure context and ask the user how to proceed:
|
|
245
|
+
- A) Retry the sprint with revised instructions
|
|
246
|
+
- B) Skip this sprint and continue with the next
|
|
247
|
+
- C) Revise the plan
|
|
248
|
+
- D) Stop the pipeline
|
|
249
|
+
|
|
250
|
+
3. **Ambiguous situation:** If the codebase state is unclear, the build is broken from external causes, or there is a conflict with existing code, escalate rather than guessing.
|
|
251
|
+
|
|
252
|
+
4. **Halfway checkpoint:** For plans with 5+ sprints, pause after completing half the sprints to report progress and ask if the user wants to continue, adjust, or stop.
|
|
253
|
+
|
|
254
|
+
## Progress Tracking
|
|
255
|
+
|
|
256
|
+
Throughout the pipeline, keep `.bober/progress.md` updated:
|
|
257
|
+
|
|
258
|
+
```markdown
|
|
259
|
+
# Bober Progress
|
|
260
|
+
|
|
261
|
+
Project: <name>
|
|
262
|
+
Mode: <mode>
|
|
263
|
+
Preset: <preset or "custom">
|
|
264
|
+
Initialized: <date>
|
|
265
|
+
Last updated: <timestamp>
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Plan: <title>
|
|
270
|
+
- Spec: <specId>
|
|
271
|
+
- Created: <date>
|
|
272
|
+
- Status: in-progress
|
|
273
|
+
|
|
274
|
+
### Sprint Breakdown
|
|
275
|
+
1. [completed] Sprint 1: <title> -- Passed on iteration 1
|
|
276
|
+
2. [completed] Sprint 2: <title> -- Passed on iteration 2
|
|
277
|
+
3. [in-progress] Sprint 3: <title> -- Iteration 1 in progress
|
|
278
|
+
4. [proposed] Sprint 4: <title>
|
|
279
|
+
5. [proposed] Sprint 5: <title>
|
|
280
|
+
|
|
281
|
+
### Pipeline Statistics
|
|
282
|
+
- Total iterations used: 4 / 20
|
|
283
|
+
- Sprints completed: 2 / 5
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
And keep `.bober/history.jsonl` updated with events:
|
|
287
|
+
- `pipeline-started`
|
|
288
|
+
- `sprint-started`
|
|
289
|
+
- `sprint-iteration-started`
|
|
290
|
+
- `sprint-iteration-completed` (with pass/fail)
|
|
291
|
+
- `sprint-completed`
|
|
292
|
+
- `sprint-failed`
|
|
293
|
+
- `pipeline-completed`
|
|
294
|
+
- `pipeline-stopped`
|
|
295
|
+
- `human-escalation`
|
|
296
|
+
|
|
297
|
+
## Error Recovery
|
|
298
|
+
|
|
299
|
+
- **Git conflicts:** Pause and report to user. Do not auto-resolve.
|
|
300
|
+
- **npm install failures:** Try once. If it fails, report to user.
|
|
301
|
+
- **Dev server won't start:** Needed for API checks and Playwright. Report as a configuration issue.
|
|
302
|
+
- **Out of context window:** If the conversation is getting extremely long, proactively reset context by summarizing progress and starting a fresh handoff.
|
|
303
|
+
- **Previous sprint broke something:** If a completed sprint's code is causing issues in a later sprint, note this but do not go back and modify completed sprints. Instead, have the current sprint fix the issue within its scope.
|