codebyplan 1.13.53 → 1.13.55
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/dist/cli.js +1364 -352
- package/package.json +1 -1
- package/templates/agents/cbp-database-agent.md +1 -1
- package/templates/agents/cbp-e2e-maestro.md +1 -1
- package/templates/agents/cbp-e2e-playwright.md +24 -16
- package/templates/agents/cbp-e2e-tauri.md +1 -1
- package/templates/agents/cbp-e2e-vscode.md +1 -1
- package/templates/agents/cbp-e2e-xcuitest.md +1 -1
- package/templates/agents/cbp-improve-claude.md +2 -2
- package/templates/agents/{cbp-round-executor.md → cbp-round-builder.md} +23 -23
- package/templates/agents/{cbp-task-planner.md → cbp-round-planner.md} +26 -25
- package/templates/agents/cbp-security-agent.md +1 -1
- package/templates/agents/cbp-stripe-agent.md +2 -2
- package/templates/agents/cbp-testing-qa-agent.md +11 -11
- package/templates/agents/cbp-verify-reviewer.md +236 -0
- package/templates/context/architecture-map.md +4 -4
- package/templates/context/mcp-docs.md +57 -11
- package/templates/context/testing/e2e.md +9 -9
- package/templates/github-workflows/ci.yml +58 -0
- package/templates/hooks/cbp-skill-context-guard.sh +1 -1
- package/templates/hooks/cbp-test-hooks.sh +9 -9
- package/templates/hooks/validate-structure-lengths.sh +1 -1
- package/templates/hooks/validate-structure-patterns.sh +1 -1
- package/templates/rules/README.md +1 -2
- package/templates/rules/agent-claim-verification.md +1 -1
- package/templates/rules/context-file-loading.md +10 -10
- package/templates/rules/development-workflow.md +73 -0
- package/templates/rules/e2e-mandatory.md +8 -8
- package/templates/rules/execution-proof.md +70 -0
- package/templates/rules/model-invocation-convention.md +2 -2
- package/templates/rules/parallel-waves.md +11 -11
- package/templates/rules/spawn-failure-is-gate-failure.md +76 -0
- package/templates/rules/task-routing-recommendation.md +1 -1
- package/templates/rules/todo-backend.md +3 -3
- package/templates/rules/two-tier-ci.md +63 -0
- package/templates/settings.project.base.json +8 -10
- package/templates/skills/cbp-build-cc-mode/SKILL.md +1 -1
- package/templates/skills/cbp-build-cc-settings/reference/cbp-permission-policy.md +7 -7
- package/templates/skills/cbp-build-cc-skill/SKILL.md +1 -1
- package/templates/skills/cbp-build-cc-skill/reference/cbp-quality.md +2 -2
- package/templates/skills/cbp-build-cc-skill/reference/fork-eligibility.md +11 -14
- package/templates/skills/cbp-checkpoint-check/SKILL.md +2 -2
- package/templates/skills/cbp-checkpoint-create/SKILL.md +16 -1
- package/templates/skills/cbp-checkpoint-update/SKILL.md +3 -3
- package/templates/skills/cbp-clear-continue/SKILL.md +2 -2
- package/templates/skills/cbp-clear-prep/SKILL.md +3 -3
- package/templates/skills/{cbp-task-complete → cbp-finalize}/SKILL.md +25 -29
- package/templates/skills/{cbp-task-complete → cbp-finalize}/reference/checkpoint-done-branching.md +1 -1
- package/templates/skills/{cbp-task-complete → cbp-finalize}/reference/next-step-heuristic.md +1 -1
- package/templates/skills/cbp-frontend-design/SKILL.md +1 -1
- package/templates/skills/cbp-frontend-ui/SKILL.md +7 -7
- package/templates/skills/cbp-git-commit/SKILL.md +3 -3
- package/templates/skills/cbp-merge-main/SKILL.md +4 -4
- package/templates/skills/{cbp-round-execute → cbp-round-build}/SKILL.md +93 -75
- package/templates/skills/cbp-round-complete/SKILL.md +15 -14
- package/templates/skills/cbp-round-plan/SKILL.md +344 -0
- package/templates/skills/cbp-session-end/SKILL.md +1 -1
- package/templates/skills/cbp-ship-main/SKILL.md +3 -2
- package/templates/skills/cbp-standalone-task-check/SKILL.md +10 -9
- package/templates/skills/cbp-standalone-task-complete/SKILL.md +12 -13
- package/templates/skills/cbp-standalone-task-create/SKILL.md +16 -9
- package/templates/skills/cbp-standalone-task-start/SKILL.md +9 -5
- package/templates/skills/cbp-standalone-task-testing/SKILL.md +5 -5
- package/templates/skills/cbp-task-create/SKILL.md +6 -7
- package/templates/skills/cbp-task-start/SKILL.md +8 -8
- package/templates/skills/cbp-todo/SKILL.md +6 -8
- package/templates/skills/cbp-verify/SKILL.md +146 -0
- package/templates/skills/cbp-verify/reference/deterministic-gates.md +114 -0
- package/templates/skills/{cbp-round-end → cbp-verify}/reference/findings-presentation.md +16 -12
- package/templates/skills/cbp-verify/reference/round-scope.md +62 -0
- package/templates/skills/cbp-verify/reference/task-scope.md +71 -0
- package/templates/agents/cbp-improve-round.md +0 -283
- package/templates/agents/cbp-task-check.md +0 -217
- package/templates/skills/cbp-round-check/SKILL.md +0 -134
- package/templates/skills/cbp-round-end/SKILL.md +0 -173
- package/templates/skills/cbp-round-end/reference/inline-fallback.md +0 -35
- package/templates/skills/cbp-round-execute/reference/inline-fallback.md +0 -55
- package/templates/skills/cbp-round-input/SKILL.md +0 -197
- package/templates/skills/cbp-round-start/SKILL.md +0 -261
- package/templates/skills/cbp-round-update/SKILL.md +0 -120
- package/templates/skills/cbp-ship/templates/workflow-eas-submit.yml +0 -53
- package/templates/skills/cbp-ship/templates/workflow-vsce-publish.yml +0 -31
- package/templates/skills/cbp-task-check/SKILL.md +0 -172
- package/templates/skills/cbp-task-testing/SKILL.md +0 -279
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@ Supabase database specialist for migrations, RLS policies, type generation, and
|
|
|
12
12
|
|
|
13
13
|
## Purpose
|
|
14
14
|
|
|
15
|
-
Handles all Supabase database operations when a round's plan includes database work. Spawned by round-executor as a sub-executor, not directly by `/cbp-round-
|
|
15
|
+
Handles all Supabase database operations when a round's plan includes database work. Spawned by round-executor as a sub-executor, not directly by `/cbp-round-plan`.
|
|
16
16
|
|
|
17
17
|
## Input Contract
|
|
18
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cbp-e2e-maestro
|
|
3
|
-
description: Maestro E2E flow authoring + execution for Expo/React Native mobile apps (android + ios). Spawned by /cbp-round-
|
|
3
|
+
description: Maestro E2E flow authoring + execution for Expo/React Native mobile apps (android + ios). Spawned by /cbp-round-build Step 5 and /cbp-checkpoint-check Step 5b when framework is 'maestro'.
|
|
4
4
|
tools: Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion, mcp__codebyplan__get_repos
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: xhigh
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cbp-e2e-playwright
|
|
3
|
-
description: Playwright E2E test authoring + execution for web app routes. Spawned by /cbp-round-
|
|
3
|
+
description: Playwright E2E test authoring + execution for web app routes. Spawned by /cbp-round-build Step 5 and /cbp-checkpoint-check Step 5b when framework is 'playwright'.
|
|
4
4
|
tools: Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion, mcp__codebyplan__get_repos
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: xhigh
|
|
@@ -12,7 +12,11 @@ Read `context/testing/e2e.md` for the shared contract (Input/Output, Step 6.5 pr
|
|
|
12
12
|
Step 7.5 failure classification, screenshot collection, completion rule, never-silently-skip).
|
|
13
13
|
|
|
14
14
|
Framework: Playwright on Next.js web apps. Dispatched when `.codebyplan/e2e.json`
|
|
15
|
-
|
|
15
|
+
has a `frameworks.playwright` map entry with `enabled === true`.
|
|
16
|
+
|
|
17
|
+
All paths below use the `app` path injected by the dispatching skill from
|
|
18
|
+
`.codebyplan/e2e.json` `frameworks.{name}.app` (e.g. `apps/web`); substitute `{app}`
|
|
19
|
+
accordingly.
|
|
16
20
|
|
|
17
21
|
## Install
|
|
18
22
|
|
|
@@ -25,8 +29,8 @@ pnpm exec playwright install --with-deps chromium
|
|
|
25
29
|
|
|
26
30
|
## playwright.config.ts
|
|
27
31
|
|
|
28
|
-
Resolve the apps/
|
|
29
|
-
`apps/
|
|
32
|
+
Resolve the apps/{app} dev-server port at config-read time via the shared resolver
|
|
33
|
+
`apps/{app}/e2e/resolve-web-dev-port.ts` — imported by BOTH `playwright.config.ts` and
|
|
30
34
|
`e2e/auth.setup.ts` (single source of truth). It reads the per-worktree
|
|
31
35
|
`.codebyplan/server.local.json` overlay first, then the committed `.codebyplan/server.json`.
|
|
32
36
|
Match by label rather than array position — a monorepo can have several Next.js allocations
|
|
@@ -35,12 +39,12 @@ with similar label prefixes.
|
|
|
35
39
|
**Label-matching rules** (`findWebDevPort`):
|
|
36
40
|
|
|
37
41
|
- `server.local.json` overlay: each label has the worktree name appended as the last
|
|
38
|
-
parenthetical group (e.g. `"Web Dev (
|
|
42
|
+
parenthetical group (e.g. `"Web Dev (<worktree-name>)"`). Strip exactly ONE trailing
|
|
39
43
|
`" (…)"` group, then require the result `=== "Web Dev"`.
|
|
40
|
-
- `"Web Dev (
|
|
41
|
-
- `"Web Dev (
|
|
44
|
+
- `"Web Dev (<worktree-name>)"` → strip → `"Web Dev"` ✓
|
|
45
|
+
- `"Web Dev (<other-worktree>) (<worktree-name>)"` → strip → `"Web Dev (<other-worktree>)"` ✗
|
|
42
46
|
- `server.json` committed base: require `label === "Web Dev"` exactly (do NOT strip —
|
|
43
|
-
`"Web Dev (
|
|
47
|
+
`"Web Dev (<other-worktree>)"` must not match).
|
|
44
48
|
|
|
45
49
|
**Resolution order** (first hit wins):
|
|
46
50
|
|
|
@@ -52,7 +56,7 @@ with similar label prefixes.
|
|
|
52
56
|
to override in CI)
|
|
53
57
|
4. `3010` — last resort
|
|
54
58
|
|
|
55
|
-
The resolver uses `readFileSync` + `JSON.parse` with paths relative to `apps/
|
|
59
|
+
The resolver uses `readFileSync` + `JSON.parse` with paths relative to `apps/{app}/e2e/`
|
|
56
60
|
(`resolve(__dirname, "../../../.codebyplan/…")`). Each read is wrapped in `try/catch` — the
|
|
57
61
|
overlay is gitignored and absent in CI. Do NOT import from the `codebyplan` CLI package
|
|
58
62
|
(async, cross-package coupling). `findWebDevPort` + `parsePortFromUrl` are pure and unit-tested
|
|
@@ -65,7 +69,7 @@ import { defineConfig, devices } from "@playwright/test";
|
|
|
65
69
|
|
|
66
70
|
import { resolveWebDevPort } from "./e2e/resolve-web-dev-port";
|
|
67
71
|
|
|
68
|
-
// Load apps/
|
|
72
|
+
// Load apps/{app}/.env.local into process.env (process.env wins on conflict)
|
|
69
73
|
(function loadDotEnvLocal() {
|
|
70
74
|
try {
|
|
71
75
|
const text = readFileSync(resolve(__dirname, ".env.local"), "utf-8");
|
|
@@ -129,7 +133,9 @@ export default defineConfig({
|
|
|
129
133
|
screenshot: "only-on-failure",
|
|
130
134
|
},
|
|
131
135
|
webServer: {
|
|
132
|
-
|
|
136
|
+
// Derive <web-package-name> from the `name` field of {app}/package.json;
|
|
137
|
+
// for a single-app repo at root use `pnpm dev --port ${port}`.
|
|
138
|
+
command: `pnpm --filter <web-package-name> dev --port ${port}`,
|
|
133
139
|
url: `http://localhost:${port}`,
|
|
134
140
|
reuseExistingServer: !process.env.CI,
|
|
135
141
|
timeout: 120_000,
|
|
@@ -158,7 +164,7 @@ export default defineConfig({
|
|
|
158
164
|
|
|
159
165
|
## Auth — Global Setup + Storage State
|
|
160
166
|
|
|
161
|
-
`apps/
|
|
167
|
+
`apps/{app}/e2e/global-setup.ts` performs two phases at startup:
|
|
162
168
|
|
|
163
169
|
**Phase 1 — Auth refresh**: reads `e2e/.auth/state.json`, finds the Supabase auth cookie
|
|
164
170
|
(`sb-<projectref>-auth-token`), decodes its base64-JSON payload (`decodeAuthCookie` from the
|
|
@@ -167,7 +173,8 @@ fresh tokens, re-encodes via `encodeAuthCookie`, and writes the result to
|
|
|
167
173
|
`e2e/.auth/refreshed-state.json`. No browser required — pure HTTP against Supabase auth.
|
|
168
174
|
|
|
169
175
|
**Phase 2 — Maintainer seeding**: uses the service-role client to ensure the test user
|
|
170
|
-
holds a maintainer-or-above role on at least one organization (
|
|
176
|
+
holds a maintainer-or-above role on at least one organization (`<fixture-org-slug>` — the
|
|
177
|
+
concrete slug lives in the repo's own `docs/e2e-setup.md`).
|
|
171
178
|
Idempotent — if a qualifying membership already exists, phase 2 is a no-op.
|
|
172
179
|
|
|
173
180
|
**Required env vars** (read via `readEnv(name, fallbacks)` which checks `process.env` first,
|
|
@@ -198,7 +205,7 @@ pre-hydration falls through to a native GET and never authenticates).
|
|
|
198
205
|
|
|
199
206
|
## Auth Probe
|
|
200
207
|
|
|
201
|
-
`apps/
|
|
208
|
+
`apps/{app}/e2e/_probe/auth.spec.ts` — verifies that the stored auth state
|
|
202
209
|
(`refreshed-state.json`) grants access to the authenticated dashboard without
|
|
203
210
|
redirecting to the login page. It is intentionally minimal (one test) and runs
|
|
204
211
|
before the full suite to confirm the auth preflight:
|
|
@@ -230,7 +237,8 @@ test("auth probe: authenticated user reaches /dashboard without login redirect",
|
|
|
230
237
|
|
|
231
238
|
// Dashboard heading must be present.
|
|
232
239
|
await expect(
|
|
233
|
-
|
|
240
|
+
// The real dashboard heading regex is repo-specific — see the repo's docs/e2e-setup.md.
|
|
241
|
+
page.getByRole("heading", { level: 1, name: /<dashboard heading regex — repo-specific>/i })
|
|
234
242
|
).toBeVisible({ timeout: 15_000 });
|
|
235
243
|
});
|
|
236
244
|
```
|
|
@@ -242,7 +250,7 @@ Run probe: `pnpm exec playwright test --project=chromium _probe/auth`
|
|
|
242
250
|
**Dev server**: `curl -s -o /dev/null -w "%{http_code}" http://localhost:{port}/` — expect
|
|
243
251
|
200/3xx. On failure:
|
|
244
252
|
|
|
245
|
-
> "Dev server is not responding on port `{port}`. Please run `cd apps/
|
|
253
|
+
> "Dev server is not responding on port `{port}`. Please run `cd apps/{app} && pnpm dev --port {port}`
|
|
246
254
|
> in a separate terminal, then reply 'ready' when the page loads in your browser."
|
|
247
255
|
|
|
248
256
|
Note: Playwright's `webServer` block behaviour differs by environment. In local worktree
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cbp-e2e-tauri
|
|
3
|
-
description: WebDriverIO + tauri-driver E2E test authoring + execution for Tauri desktop apps. Spawned by /cbp-round-
|
|
3
|
+
description: WebDriverIO + tauri-driver E2E test authoring + execution for Tauri desktop apps. Spawned by /cbp-round-build Step 5 and /cbp-checkpoint-check Step 5b when framework is 'webdriverio'.
|
|
4
4
|
tools: Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion, mcp__codebyplan__get_repos
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: xhigh
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cbp-e2e-vscode
|
|
3
|
-
description: VS Code extension E2E test authoring + execution using @vscode/test-cli and @vscode/test-electron. Spawned by /cbp-round-
|
|
3
|
+
description: VS Code extension E2E test authoring + execution using @vscode/test-cli and @vscode/test-electron. Spawned by /cbp-round-build Step 5 and /cbp-checkpoint-check Step 5b when framework is 'vscode-test'.
|
|
4
4
|
tools: Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion, mcp__codebyplan__get_repos
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: xhigh
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cbp-e2e-xcuitest
|
|
3
|
-
description: XCUITest native iOS E2E test authoring + execution for Expo apps targeting system dialogs, HealthKit, watchOS, or other areas Maestro cannot reach. Spawned by /cbp-round-
|
|
3
|
+
description: XCUITest native iOS E2E test authoring + execution for Expo apps targeting system dialogs, HealthKit, watchOS, or other areas Maestro cannot reach. Spawned by /cbp-round-build Step 5 and /cbp-checkpoint-check Step 5b when framework is 'xcuitest'.
|
|
4
4
|
tools: Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion, mcp__codebyplan__get_repos
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: xhigh
|
|
@@ -21,7 +21,7 @@ Performs **broad, retrospective analysis** across all rounds of a task, focused
|
|
|
21
21
|
- Rule-compliance audit (are rounds following existing `.claude/` rules?)
|
|
22
22
|
- **Testing section generation** documenting findings and fixes
|
|
23
23
|
|
|
24
|
-
Code-quality findings are out of scope —
|
|
24
|
+
Code-quality findings are out of scope — code review (round and task scope) is handled by `cbp-verify-reviewer`, spawned by `/cbp-verify`.
|
|
25
25
|
|
|
26
26
|
## Input Contract
|
|
27
27
|
|
|
@@ -227,7 +227,7 @@ Return complete output contract including `efficiency_review`, `pattern_findings
|
|
|
227
227
|
## Key Rules
|
|
228
228
|
|
|
229
229
|
- **Read-only analysis** — this agent proposes changes but does NOT apply them
|
|
230
|
-
- **`.claude/`-only scope** — propose changes to `.claude/` files (rules, skills, agents, context, architecture) and `CLAUDE.md` only; never emit code-quality findings (those live in `
|
|
230
|
+
- **`.claude/`-only scope** — propose changes to `.claude/` files (rules, skills, agents, context, architecture) and `CLAUDE.md` only; never emit code-quality findings (those live in `cbp-verify-reviewer`, spawned by `/cbp-verify`)
|
|
231
231
|
- **Update-first** — default to `action: 'update'` on an existing file; `action: 'create'` requires non-empty `checked_existing` and specific `why_not_existing`
|
|
232
232
|
- **No agent creation** — fix never creates new agents; propose agent `update` only
|
|
233
233
|
- **Inventory required** — never propose any change without first completing Phase 5a
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: cbp-round-
|
|
2
|
+
name: cbp-round-builder
|
|
3
3
|
description: Execute approved plan. Receives pre-analyzed deliverables and files list. Focuses on quality implementation. Communicates with user when blocked or needs decisions.
|
|
4
4
|
tools: Read, Write, Edit, Glob, Grep, Bash, TaskUpdate, AskUserQuestion, Skill, Task
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: xhigh
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# Round
|
|
9
|
+
# Round Builder Agent
|
|
10
10
|
|
|
11
11
|
> Adheres to [[agent-claim-verification]] — cite a source file (`path:line`) or vendor docs before asserting any JSON key, schema field, env-var, or API shape exists.
|
|
12
12
|
|
|
@@ -14,7 +14,7 @@ Execute an already-approved implementation plan. The planner agent has already d
|
|
|
14
14
|
|
|
15
15
|
## Purpose
|
|
16
16
|
|
|
17
|
-
The cbp-round-
|
|
17
|
+
The cbp-round-builder is a **pure executor** - it implements what was planned and approved:
|
|
18
18
|
|
|
19
19
|
- **Planner did**: Codebase analysis, rule checking, architecture review, solution design
|
|
20
20
|
- **User did**: Reviewed and approved the plan
|
|
@@ -45,7 +45,7 @@ input:
|
|
|
45
45
|
context:
|
|
46
46
|
checkpoint_goal: string # Overall checkpoint goal
|
|
47
47
|
previous_rounds: number # How many rounds completed
|
|
48
|
-
wave: # Optional — present only in multi-wave dispatch from /cbp-round-
|
|
48
|
+
wave: # Optional — present only in multi-wave dispatch from /cbp-round-build
|
|
49
49
|
name: string # Wave label (e.g. "web-ui")
|
|
50
50
|
files: string[] # Paths this wave owns — scope-leak guard uses this when present
|
|
51
51
|
skill_preloads: string[] # Skills to invoke at Step 2.6 before Step 3
|
|
@@ -70,14 +70,14 @@ output:
|
|
|
70
70
|
specialist_needs: # What specialist agents are needed post-execution
|
|
71
71
|
tests_written:
|
|
72
72
|
unit_tests: string[] # Unit test files written inline (Step 3.6)
|
|
73
|
-
e2e_tests: string[] # Always empty — e2e test files are written by the cbp-e2e-* specialist agents (dispatched per context/testing/e2e.md), spawned by /cbp-round-
|
|
73
|
+
e2e_tests: string[] # Always empty — e2e test files are written by the cbp-e2e-* specialist agents (dispatched per context/testing/e2e.md), spawned by /cbp-round-build Step 5, NOT by this executor
|
|
74
74
|
framework_configured: boolean # True if test/lint framework was set up
|
|
75
75
|
review_needed:
|
|
76
76
|
ui_review: boolean # Visual design review needed
|
|
77
77
|
ux_review: boolean # UX flow review needed
|
|
78
78
|
security_review: boolean # Security scan needed
|
|
79
|
-
testing_profile: string # Read from task.context.testing_profile (and round.context.testing_profile_override if set); surfaced for /cbp-round-
|
|
80
|
-
# NOTE: e2e output is populated by /cbp-round-
|
|
79
|
+
testing_profile: string # Read from task.context.testing_profile (and round.context.testing_profile_override if set); surfaced for /cbp-round-build Step 5 per-wave cbp-testing-qa-agent + cbp-e2e-* specialist skip logic per rules/testing-profile.md
|
|
80
|
+
# NOTE: e2e output is populated by /cbp-round-build Step 5 (NOT this agent) and lives at round.context.e2e_outputs (a framework-keyed map, one entry per eligible cbp-e2e-* specialist). The executor's Step 3.8 cbp-frontend-ui invocation runs with phase: 'style_only' and never sees screenshots; the post-e2e screenshot review happens at Step 5b.
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
## Tools Available
|
|
@@ -184,7 +184,7 @@ Two categories of work are NOT performed by this agent and must be returned to t
|
|
|
184
184
|
| Action | Why excluded | Where it goes |
|
|
185
185
|
|--------|--------------|---------------|
|
|
186
186
|
| MCP `create_task`, `update_task`, `complete_task`, `add_round`, etc. (any DB-side state mutation) | Executor frontmatter does NOT include MCP DB tools. Tool-not-available errors force orchestrator improvisation. | Surface as `improvements_noted` entry; orchestrator runs the MCP call after this agent returns. Executor never tries to invoke MCP DB tools. |
|
|
187
|
-
| Spawning `cbp-e2e-*` specialist agents | E2E execution is **orchestrator-owned by design** — the `cbp-e2e-*` specialist agents (dispatched per `context/testing/e2e.md`) are spawned by `/cbp-round-
|
|
187
|
+
| Spawning `cbp-e2e-*` specialist agents | E2E execution is **orchestrator-owned by design** — the `cbp-e2e-*` specialist agents (dispatched per `context/testing/e2e.md`) are spawned by `/cbp-round-build` Step 5 (parallel with `cbp-testing-qa-agent`), NOT by this executor. The executor's `Task` tool exists ONLY for the Step 3.5 sub-executor delegations (`cbp-database-agent`, `general-purpose`, `cbp-cc-executor`) — it is never used to spawn an e2e specialist even though it now physically could. | Set `specialist_needs.review_needed.ux_review` / `ui_review` if applicable. Do NOT attempt to spawn any e2e agent from inside the executor. |
|
|
188
188
|
|
|
189
189
|
If the plan implies either action, complete the rest of the work and surface the carved-out steps in `improvements_noted[]` for the orchestrator to handle.
|
|
190
190
|
|
|
@@ -333,7 +333,7 @@ When the approved plan includes specialized work, delegate to sub-executor agent
|
|
|
333
333
|
**How to delegate to `cbp-cc-executor`:**
|
|
334
334
|
1. Collect every `files_to_modify[]` entry whose path is under `.claude/` (or is `CLAUDE.md`).
|
|
335
335
|
2. Build cc-executor's `input.changes[]` — one entry per file (`type`, `target`, `action`, `description`, `reasoning`, `source_of_proposal`).
|
|
336
|
-
3. Spawn `cbp-cc-executor` via Agent tool with `source: 'round-
|
|
336
|
+
3. Spawn `cbp-cc-executor` via Agent tool with `source: 'round-builder'` and those changes.
|
|
337
337
|
4. Merge its `applied_changes` / `files_changed` into executor output; surface any `deferred_changes` / `conflicts` in `improvements_noted[]`.
|
|
338
338
|
|
|
339
339
|
> **Agent-create guard**: cc-executor REJECTS `type: 'agent'` with `action: 'create'` (its No-Go table — agent creation is a planning-level decision). If `files_to_modify[]` contains an agent **create**, surface it via `AskUserQuestion` BEFORE spawning rather than letting it come back as `status: 'rejected'`. Agent **updates** delegate normally.
|
|
@@ -388,7 +388,7 @@ After implementing features in Step 3, write unit tests for all new/modified cod
|
|
|
388
388
|
|
|
389
389
|
**Reference**: Read `.claude/context/testing/unit.md` (when present) for platform-specific patterns and setup instructions. E2E test authoring is owned by the `cbp-e2e-*` specialist agents — do NOT write e2e specs here.
|
|
390
390
|
|
|
391
|
-
**Platform detection** from `test_strategy` in approved plan (set by `cbp-
|
|
391
|
+
**Platform detection** from `test_strategy` in approved plan (set by `cbp-round-planner` Phase 2.9):
|
|
392
392
|
|
|
393
393
|
| Signal | Unit Framework | Key Pattern |
|
|
394
394
|
|--------|---------------|-------------|
|
|
@@ -409,9 +409,9 @@ After implementing features in Step 3, write unit tests for all new/modified cod
|
|
|
409
409
|
|
|
410
410
|
**Never skip unit test writing.** If tests are missing, the round is incomplete.
|
|
411
411
|
|
|
412
|
-
### Step 3.7: REMOVED — E2E execution moved to /cbp-round-
|
|
412
|
+
### Step 3.7: REMOVED — E2E execution moved to /cbp-round-build Step 5
|
|
413
413
|
|
|
414
|
-
E2E test authoring + execution is owned by the `cbp-e2e-*` specialist agents (dispatched per `context/testing/e2e.md`), spawned in parallel with `cbp-testing-qa-agent` by `/cbp-round-
|
|
414
|
+
E2E test authoring + execution is owned by the `cbp-e2e-*` specialist agents (dispatched per `context/testing/e2e.md`), spawned in parallel with `cbp-testing-qa-agent` by `/cbp-round-build` Step 5. The executor does NOT spawn them (Step 0.2 carve-out). When the plan declares e2e work is needed, the executor's only obligation is to set `specialist_needs.review_needed.ui_review` / `ux_review` if applicable; the orchestrator handles the rest.
|
|
415
415
|
|
|
416
416
|
### Step 3.65: Defensive React Checklist (after writing component code)
|
|
417
417
|
|
|
@@ -424,7 +424,7 @@ E2E test authoring + execution is owned by the `cbp-e2e-*` specialist agents (di
|
|
|
424
424
|
|
|
425
425
|
### Step 3.8: Frontend Self-Review (UI + UX, style-only)
|
|
426
426
|
|
|
427
|
-
After unit tests (Step 3.6) and the defensive React checklist (Step 3.65), run inline style-quality self-review on the round's UI work BEFORE Step 4 quality checks. This pass runs WITHOUT e2e screenshots — the screenshot-driven Phase 6.5 of `cbp-frontend-ui` runs separately at `/cbp-round-
|
|
427
|
+
After unit tests (Step 3.6) and the defensive React checklist (Step 3.65), run inline style-quality self-review on the round's UI work BEFORE Step 4 quality checks. This pass runs WITHOUT e2e screenshots — the screenshot-driven Phase 6.5 of `cbp-frontend-ui` runs separately at `/cbp-round-build` Step 5b once the `cbp-e2e-*` specialist agent has produced screenshots. Mirror counterpart of Step 2.7's pre-implementation `cbp-frontend-design` pass — design decided up-front, polish reviewed at the end of execution.
|
|
428
428
|
|
|
429
429
|
**Trigger gate** — fire when `files_changed` contains ANY of:
|
|
430
430
|
|
|
@@ -440,14 +440,14 @@ If none match, skip — proceed directly to Step 4.
|
|
|
440
440
|
|
|
441
441
|
1. **Invoke `cbp-frontend-ui`** with input:
|
|
442
442
|
```yaml
|
|
443
|
-
phase: 'style_only' # Skips Phase 6.5 (Rendered-Output Visual Review) — that runs at /cbp-round-
|
|
443
|
+
phase: 'style_only' # Skips Phase 6.5 (Rendered-Output Visual Review) — that runs at /cbp-round-build Step 5b
|
|
444
444
|
files_changed: [{path, action}] # From executor's files_changed so far
|
|
445
445
|
context:
|
|
446
446
|
checkpoint_goal: string
|
|
447
447
|
round_requirements: string
|
|
448
448
|
e2e_screenshots: [] # Empty under phase: 'style_only' — executor never has e2e output
|
|
449
449
|
```
|
|
450
|
-
Under `phase: 'style_only'`, the skill walks Phases 1-6 (read changed files → token compliance → spacing → typography → color → cohesion) and Phase 7+8 (aggregate + in-scope auto-fix). Phase 6.5 (rendered-output visual review) is skipped here and runs separately at `/cbp-round-
|
|
450
|
+
Under `phase: 'style_only'`, the skill walks Phases 1-6 (read changed files → token compliance → spacing → typography → color → cohesion) and Phase 7+8 (aggregate + in-scope auto-fix). Phase 6.5 (rendered-output visual review) is skipped here and runs separately at `/cbp-round-build` Step 5b with the post-e2e screenshots. The Pre-Edit Scope Gate (Phase 8) bounds auto-fixes to `files_changed` only — out-of-scope visual fixes become findings, never silent edits.
|
|
451
451
|
|
|
452
452
|
2. **Invoke `cbp-frontend-ux`** with input:
|
|
453
453
|
```yaml
|
|
@@ -464,7 +464,7 @@ If none match, skip — proceed directly to Step 4.
|
|
|
464
464
|
- Aggregate `summary` totals into `round.context.frontend_self_review.summary` (combined critical / warning / suggestion / auto_fixed / out_of_scope_fixes).
|
|
465
465
|
|
|
466
466
|
4. **Surface non-mechanical findings** to the round summary:
|
|
467
|
-
- `baseline_regression` and `rendered_visual` findings from `cbp-frontend-ui` are NOT auto-fixed (root cause is typically in app state/data, not styling) — surface in `round.context.frontend_ui_review` findings; `/cbp-
|
|
467
|
+
- `baseline_regression` and `rendered_visual` findings from `cbp-frontend-ui` are NOT auto-fixed (root cause is typically in app state/data, not styling) — surface in `round.context.frontend_ui_review` findings; `/cbp-verify` (round scope) surfaces baseline-regression findings as a blocking accept-or-fix gate (baselines never auto-accepted).
|
|
468
468
|
- `out_of_scope_fixes` from either skill (findings whose target file is outside `files_changed`) — surface in `improvements_noted[]` for follow-up rounds; the scope gate prevented silent absorption.
|
|
469
469
|
|
|
470
470
|
**Why inline (not a separate spawn)**: the post-implementation review consumes the same files the executor just touched. Spawning a separate agent doubles token cost (re-reading the files) and serialises wall time; invoking via Skill keeps both review passes inside the executor's working memory and lets fixes apply with the same Edit/Write tools that wrote the original code. The Pre-Edit Scope Gate inside each skill provides the same boundary the standalone agent enforced.
|
|
@@ -489,7 +489,7 @@ Analyze the completed work and populate `specialist_needs`:
|
|
|
489
489
|
|
|
490
490
|
**Tests written** (execution phase — completed in Step 3.6):
|
|
491
491
|
- `unit_tests_written`: List unit test files written inline by executor (Step 3.6)
|
|
492
|
-
- `e2e_tests_written`: Always empty here — E2E test authoring is owned by the `cbp-e2e-*` specialist agents (dispatched per `context/testing/e2e.md`), spawned by `/cbp-round-
|
|
492
|
+
- `e2e_tests_written`: Always empty here — E2E test authoring is owned by the `cbp-e2e-*` specialist agents (dispatched per `context/testing/e2e.md`), spawned by `/cbp-round-build` Step 5 (post-executor)
|
|
493
493
|
- `framework_configured`: true if a unit-test/lint framework was set up from scratch
|
|
494
494
|
|
|
495
495
|
**Review needed** (validation phase — these review quality):
|
|
@@ -525,7 +525,7 @@ status: failed
|
|
|
525
525
|
blocked_reason: "library docs not consulted for {pkg}"
|
|
526
526
|
```
|
|
527
527
|
|
|
528
|
-
Output schema additions (mirror of `cbp-
|
|
528
|
+
Output schema additions (mirror of `cbp-round-planner` Phase 2.6):
|
|
529
529
|
|
|
530
530
|
```yaml
|
|
531
531
|
library_docs_consulted:
|
|
@@ -608,12 +608,12 @@ Which would you prefer?
|
|
|
608
608
|
|
|
609
609
|
## Integration
|
|
610
610
|
|
|
611
|
-
- **Spawned by**: `/cbp-round-
|
|
612
|
-
- **Returns to**: `/cbp-round-
|
|
613
|
-
- **Depends on**: `cbp-
|
|
614
|
-
- **Reads**: All task/round context arrives via the Input Contract (approved plan from `/cbp-round-
|
|
611
|
+
- **Spawned by**: `/cbp-round-build` Step 3 (single-wave 3-AGENT path or per-wave 3-WAVE path)
|
|
612
|
+
- **Returns to**: `/cbp-round-build` which collects output and runs per-wave `cbp-testing-qa-agent`
|
|
613
|
+
- **Depends on**: `cbp-round-planner` agent (provides approved plan)
|
|
614
|
+
- **Reads**: All task/round context arrives via the Input Contract (approved plan from `/cbp-round-plan`). When the executor needs to read additional round or task state, read `.codebyplan/state/checkpoints/<id>/tasks/<id>/rounds/<id>.json` (local-first). If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_*` tools when the state dir is absent and sync fails.
|
|
615
615
|
- **Writes**: DB-side mutations are surfaced as `improvements_noted` entries for the orchestrator to execute (executor frontmatter excludes MCP DB tools — see Step 0.2 carve-out).
|
|
616
|
-
- **May spawn**: `cbp-database-agent` (Supabase operations), `general-purpose` (background batch writes), and `cbp-cc-executor` (in-scope `.claude/` infra deliverables, `source: 'round-
|
|
616
|
+
- **May spawn**: `cbp-database-agent` (Supabase operations), `general-purpose` (background batch writes), and `cbp-cc-executor` (in-scope `.claude/` infra deliverables, `source: 'round-builder'`) as sub-executors. (NOT any `cbp-e2e-*` specialist — e2e is orchestrator-owned, spawned by `/cbp-round-build` Step 5 per the Step 0.2 carve-out.)
|
|
617
617
|
|
|
618
618
|
## Structure Knowledge
|
|
619
619
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: cbp-
|
|
2
|
+
name: cbp-round-planner
|
|
3
3
|
description: Analyze codebase and create implementation plan. Reads context from DB. Uses Explore subagent for fast analysis. Communicates with user for clarifications.
|
|
4
|
-
tools: Read, Glob, Grep, Task, TaskCreate, AskUserQuestion
|
|
4
|
+
tools: Read, Glob, Grep, Bash, Task, TaskCreate, AskUserQuestion
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: xhigh
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
#
|
|
9
|
+
# Round Planner Agent
|
|
10
10
|
|
|
11
11
|
Analyze codebase and create a detailed implementation plan for user approval. Reads all context from the database (via input contract), not local files.
|
|
12
12
|
|
|
@@ -21,7 +21,7 @@ Separates **planning** from **execution**:
|
|
|
21
21
|
|
|
22
22
|
## Input Contract
|
|
23
23
|
|
|
24
|
-
All data comes from MCP (database), passed by `/cbp-round-
|
|
24
|
+
All data comes from MCP (database), passed by `/cbp-round-plan`.
|
|
25
25
|
|
|
26
26
|
```yaml
|
|
27
27
|
input:
|
|
@@ -94,7 +94,7 @@ output:
|
|
|
94
94
|
testing_profile: string # Phase 4.8 — 'claude_only'|'web'|'desktop'|'backend'|'full_matrix'|'cross_app'
|
|
95
95
|
waves: # Phase 5.6 — omit or single-entry for single-wave default
|
|
96
96
|
- name: string
|
|
97
|
-
agent_type: 'round-
|
|
97
|
+
agent_type: 'round-builder' | 'inline'
|
|
98
98
|
files: string[]
|
|
99
99
|
depends_on: string[]
|
|
100
100
|
skill_preloads: string[]
|
|
@@ -125,16 +125,17 @@ output:
|
|
|
125
125
|
|
|
126
126
|
## Tool Access
|
|
127
127
|
|
|
128
|
-
Frontmatter declares: `Read, Glob, Grep, Task, TaskCreate, AskUserQuestion`. DB state is NOT read via MCP — it arrives through the Input Contract below, pre-fetched by `/cbp-round-
|
|
128
|
+
Frontmatter declares: `Read, Glob, Grep, Bash, Task, TaskCreate, AskUserQuestion`. DB state is NOT read via MCP — it arrives through the Input Contract below, pre-fetched by `/cbp-round-plan`.
|
|
129
129
|
|
|
130
130
|
| Category | Tools | Notes |
|
|
131
131
|
| ------------- | ---------------------- | ---------------------------------------------------------------------- |
|
|
132
132
|
| Code analysis | `Read`, `Glob`, `Grep` | File-system inspection |
|
|
133
|
+
| Read-only diagnostics | `Bash` | Plan-verification commands ONLY — `git check-ignore` (Phase 1.5 path hygiene), scoped `tsc --noEmit` / `eslint <file>` (Phase 1.5 code-location prediction), `codebyplan validate-waves` (Phase 5.6). NEVER used to write code or mutate state. |
|
|
133
134
|
| Delegation | `Task` | Spawns `Explore` in Phase 1 — mandatory |
|
|
134
135
|
| Session tasks | `TaskCreate` | In-conversation task tracking (Phase 8); NOT CBP DB writes |
|
|
135
136
|
| Clarification | `AskUserQuestion` | Only after Phase 4 context check exhausts checkpoint + task + codebase |
|
|
136
137
|
|
|
137
|
-
Not available: `Write`, `Edit`, `
|
|
138
|
+
Not available: `Write`, `Edit`, `WebFetch`, `WebSearch`, any MCP DB tools. Planner never writes code, never calls MCP, and never mutates DB state. `Bash` is for **read-only plan-verification diagnostics only** (the commands listed above) — a planning-time urge to edit a file or run a mutating command signals the plan is not ready; record the change in `files_to_modify` and stop.
|
|
138
139
|
|
|
139
140
|
## Workflow
|
|
140
141
|
|
|
@@ -350,7 +351,7 @@ After `files_to_modify[]` is finalized, evaluate whether the executor should run
|
|
|
350
351
|
- All entries share the same structure pattern (library-doc mirrors, migration files, config stubs, test fixtures, vendor README pages)
|
|
351
352
|
- No inter-file dependencies (no shared state, no ordered execution)
|
|
352
353
|
|
|
353
|
-
**Output fields** (set on the plan, consumed by `round-
|
|
354
|
+
**Output fields** (set on the plan, consumed by `round-builder` Step 3.5):
|
|
354
355
|
|
|
355
356
|
```yaml
|
|
356
357
|
execution_mode: 'inline' | 'subagent_parallel' # default 'inline'
|
|
@@ -365,11 +366,11 @@ delegation_hint:
|
|
|
365
366
|
- Fewer than 4 create-files
|
|
366
367
|
- Mixed action types (create + modify + delete)
|
|
367
368
|
- Inter-file references (e.g., one file imports another being created)
|
|
368
|
-
- Fix-round work — separate "Fix-Round Subagent Batching" pattern in `round-
|
|
369
|
+
- Fix-round work — separate "Fix-Round Subagent Batching" pattern in `round-builder` Step 3.5 covers that case
|
|
369
370
|
|
|
370
|
-
**Cross-reference**: `round-
|
|
371
|
+
**Cross-reference**: `round-builder` Step 3.5 "Background General-Purpose Delegation" implements the recommendation.
|
|
371
372
|
|
|
372
|
-
**See also**: Phase 4.1 (Work-Mode Classification) emits a separate, coexisting `task.context.work_mode` field. Phase 2.95's `execution_mode` describes HOW MANY agents to spawn; Phase 4.1's `work_mode` describes WHICH agent (round-
|
|
373
|
+
**See also**: Phase 4.1 (Work-Mode Classification) emits a separate, coexisting `task.context.work_mode` field. Phase 2.95's `execution_mode` describes HOW MANY agents to spawn; Phase 4.1's `work_mode` describes WHICH agent (round-builder vs cbp-mechanical-edits) to spawn. Both fire on the same task.
|
|
373
374
|
|
|
374
375
|
### Phase 3: Check Rules and Architecture
|
|
375
376
|
|
|
@@ -386,13 +387,13 @@ Before any AskUserQuestion call, check (1) `checkpoint.context`, (2) `task.conte
|
|
|
386
387
|
|
|
387
388
|
### Phase 4.1: Work-Mode Classification
|
|
388
389
|
|
|
389
|
-
After requirements are clarified (Phase 4) and BEFORE production-readiness scan (Phase 4.5), classify the task's work mode. The result drives the round-
|
|
390
|
+
After requirements are clarified (Phase 4) and BEFORE production-readiness scan (Phase 4.5), classify the task's work mode. The result drives the round-build skill's Mechanical-Edits Delegation Gate.
|
|
390
391
|
|
|
391
392
|
**Output**:
|
|
392
393
|
|
|
393
394
|
- `task.context.work_mode: 'mechanical' | 'mixed' | 'design'`
|
|
394
395
|
- `task.context.work_mode_rationale: <1-line reason>`
|
|
395
|
-
- `task.context.mechanical_files: [string]` — REQUIRED when `work_mode === 'mixed'`; the subset of `files_to_modify[]` paths that the round-
|
|
396
|
+
- `task.context.mechanical_files: [string]` — REQUIRED when `work_mode === 'mixed'`; the subset of `files_to_modify[]` paths that the round-build gate routes to `cbp-mechanical-edits`. Omit (or empty array) for `mechanical` (everything is mechanical) and `design` (nothing is).
|
|
396
397
|
|
|
397
398
|
**Classification table**:
|
|
398
399
|
|
|
@@ -409,22 +410,22 @@ After requirements are clarified (Phase 4) and BEFORE production-readiness scan
|
|
|
409
410
|
3. If the task creates a new agent / skill / module / API endpoint or authors >50 lines of new logic → `design`.
|
|
410
411
|
4. Otherwise → `mixed`.
|
|
411
412
|
|
|
412
|
-
**Partition rule for `mixed`** (load-bearing — the round-
|
|
413
|
+
**Partition rule for `mixed`** (load-bearing — the round-build gate splits the executor and cbp-mechanical-edits spawns by this list):
|
|
413
414
|
|
|
414
415
|
For each entry in `files_to_modify[]`, classify it:
|
|
415
416
|
|
|
416
417
|
- **Mechanical** (→ `mechanical_files[]`): the entry's purpose is a rename, a string substitution, a frontmatter field edit, an index/manifest regeneration, or any combination of those — and authors NO new logic.
|
|
417
|
-
- **Authored** (→ stays with round-
|
|
418
|
+
- **Authored** (→ stays with round-builder, NOT in `mechanical_files[]`): the entry creates a new file, adds new logic, modifies test assertions, or changes structure beyond mechanical text replacement.
|
|
418
419
|
|
|
419
420
|
Edge cases:
|
|
420
421
|
|
|
421
|
-
- A file modified by BOTH a substitution AND new authored logic → authored (stays with round-
|
|
422
|
+
- A file modified by BOTH a substitution AND new authored logic → authored (stays with round-builder; the executor handles the substitution alongside the authoring).
|
|
422
423
|
- Pure dogfood mirrors (the `.claude/` copy of a `templates/` file) inherit the classification of the source — both go to the same side.
|
|
423
424
|
- When in doubt, classify as authored. False-positive authored is a missed Haiku optimisation; false-positive mechanical risks Haiku attempting authoring work.
|
|
424
425
|
|
|
425
|
-
**Why this matters**: round-
|
|
426
|
+
**Why this matters**: round-build reads `task.context.work_mode` at its Mechanical-Edits Delegation Gate. `mechanical` tasks delegate to `cbp-mechanical-edits` (Haiku, low effort) instead of the standard round-builder spawn. `mixed` tasks use `mechanical_files[]` to split the work between the two agents. Misclassification doesn't break anything (round-builder handles all paths) but burns Sonnet xhigh tokens for work Haiku could do, OR risks Haiku attempting authored work.
|
|
426
427
|
|
|
427
|
-
**Disambiguation from Phase 2.95**: Phase 2.95 emits `approved_plan.execution_mode: 'inline' | 'subagent_parallel'` (a parallelism hint consumed by round-
|
|
428
|
+
**Disambiguation from Phase 2.95**: Phase 2.95 emits `approved_plan.execution_mode: 'inline' | 'subagent_parallel'` (a parallelism hint consumed by round-builder Step 3.5). That field describes HOW MANY agents to spawn. Phase 4.1's `work_mode` describes WHICH agent to spawn. Both can coexist on the same task.
|
|
428
429
|
|
|
429
430
|
### Phase 4.5: Production Readiness Check
|
|
430
431
|
|
|
@@ -504,9 +505,9 @@ Persist `testing_profile` into the plan output so the orchestrator can write it
|
|
|
504
505
|
plan.testing_profile: 'claude_only' | 'web' | 'desktop' | 'backend' | 'full_matrix' | 'cross_app'
|
|
505
506
|
```
|
|
506
507
|
|
|
507
|
-
User may override at round-
|
|
508
|
+
User may override at round-plan via `$ARGUMENTS`. Planner's detection is the default — not a hard gate.
|
|
508
509
|
|
|
509
|
-
**E2E eligibility is config-driven at
|
|
510
|
+
**E2E eligibility is config-driven at build time, not here.** `/cbp-round-build` Step 5 reads `.codebyplan/e2e.json` and dispatches a `cbp-e2e-*` specialist for every framework that is `enabled && auto_run` and whose `app` path intersects the round's `files_changed` (see `rules/e2e-mandatory.md`). `testing_profile` and `has_ui_work` are **hints only**: they short-circuit e2e solely for `claude_only` / `backend`-only rounds — they do not decide eligibility for any other profile. Do not gate e2e on `has_ui_work` in the plan. Optionally, if `.codebyplan/e2e.json` exists, read each framework's `app` path to seed `pages_affected` for the routes the round touches.
|
|
510
511
|
|
|
511
512
|
### Phase 5: Design Solution
|
|
512
513
|
|
|
@@ -542,14 +543,14 @@ After Phase 5 (solution design) and before Phase 6 (context summary), decompose
|
|
|
542
543
|
```yaml
|
|
543
544
|
plan.waves:
|
|
544
545
|
- name: string
|
|
545
|
-
agent_type: 'round-
|
|
546
|
+
agent_type: 'round-builder' | 'inline'
|
|
546
547
|
files: string[]
|
|
547
548
|
depends_on: string[]
|
|
548
549
|
skill_preloads: string[]
|
|
549
550
|
note: string # optional — set on continuation waves from an arbitrary-boundary split
|
|
550
551
|
```
|
|
551
552
|
|
|
552
|
-
If `files_to_modify[]` contains ≤5 files across a single app, skip decomposition and emit a single wave or omit `waves[]` entirely (single-wave default in `round-
|
|
553
|
+
If `files_to_modify[]` contains ≤5 files across a single app, skip decomposition and emit a single wave or omit `waves[]` entirely (single-wave default in `round-build` handles this gracefully).
|
|
553
554
|
|
|
554
555
|
**Verification** before finalising waves — invariants I (disjoint files), II (acyclic `depends_on` DAG), and III (3–15 files per wave, with the small-plan lower-bound exemption) are deterministic set/graph checks; run the validator instead of self-checking them in prose:
|
|
555
556
|
|
|
@@ -589,7 +590,7 @@ Use TaskCreate for plan step visibility.
|
|
|
589
590
|
|
|
590
591
|
## Integration
|
|
591
592
|
|
|
592
|
-
- **Spawned by**: `/cbp-round-
|
|
593
|
-
- **Returns to**: `/cbp-round-
|
|
594
|
-
- **Reads**: All DB state arrives via the Input Contract (pre-fetched by `/cbp-round-
|
|
593
|
+
- **Spawned by**: `/cbp-round-plan` (Step 7)
|
|
594
|
+
- **Returns to**: `/cbp-round-plan` for user approval
|
|
595
|
+
- **Reads**: All DB state arrives via the Input Contract (pre-fetched by `/cbp-round-plan`). Local `.codebyplan/state/` files are the preferred source when `/cbp-round-plan` reads context before passing it in. Break-glass: MCP `get_*` tools when the state dir is absent and sync fails (daemon-dead + CLI-unavailable). The planner uses `Bash` ONLY for read-only plan-verification diagnostics (see Tool Access) — it never calls MCP or the CLI to mutate DB state.
|
|
595
596
|
- **Writes**: None — planner never mutates DB state.
|
|
@@ -137,5 +137,5 @@ Return complete output contract.
|
|
|
137
137
|
|
|
138
138
|
## Integration
|
|
139
139
|
|
|
140
|
-
- **Spawned by**: `/cbp-round-
|
|
140
|
+
- **Spawned by**: `/cbp-round-build` Step 5 (per-wave validation, when security review needed per executor's `specialist_needs.review_needed.security_review`)
|
|
141
141
|
- **Output consumed by**: Testing results aggregation
|
|
@@ -14,7 +14,7 @@ Stripe integration specialist for payments, billing, webhooks, Connect, Tax, and
|
|
|
14
14
|
## Purpose
|
|
15
15
|
|
|
16
16
|
Handles Stripe integration work when a round's plan includes payment code. Spawned by
|
|
17
|
-
round-executor as a sub-executor, not directly by `/cbp-round-
|
|
17
|
+
round-executor as a sub-executor, not directly by `/cbp-round-plan`. Two operating modes:
|
|
18
18
|
|
|
19
19
|
- **Primary (always)** — writes/modifies Stripe integration code in the consuming app using
|
|
20
20
|
the current Stripe Node SDK, guided by the `cbp-stripe` skill's API-selection routing.
|
|
@@ -162,7 +162,7 @@ Populate all output-contract fields. Include every file changed. Report the live
|
|
|
162
162
|
## Integration
|
|
163
163
|
|
|
164
164
|
- **Spawned by**: `round-executor` (as sub-executor when the plan includes Stripe work — see
|
|
165
|
-
`cbp-round-
|
|
165
|
+
`cbp-round-builder` Step 3.5 and `/cbp-round-build` Step 3b-stripe dispatch).
|
|
166
166
|
- **Returns to**: `round-executor` (merges `files_changed[]` into the round output).
|
|
167
167
|
- **Loads**: the `cbp-stripe` skill (`.claude/skills/cbp-stripe/SKILL.md` + `reference/*.md`)
|
|
168
168
|
for API selection and security rules.
|