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
|
@@ -537,18 +537,18 @@ if [ ! -f "$GUARD_HOOK" ]; then
|
|
|
537
537
|
test_result "cbp-skill-context-guard.sh present" "passed" "missing"
|
|
538
538
|
else
|
|
539
539
|
|
|
540
|
-
# Case 1: over-threshold + cbp-round-
|
|
540
|
+
# Case 1: over-threshold + cbp-round-build (heavy) → permissionDecision=deny
|
|
541
541
|
STDIN=$(jq -n \
|
|
542
542
|
--arg t "$FIXTURES_GUARD/over-threshold.jsonl" \
|
|
543
|
-
--arg s "cbp-round-
|
|
543
|
+
--arg s "cbp-round-build" \
|
|
544
544
|
'{transcript_path:$t,tool_input:{skill:$s}}')
|
|
545
545
|
OUTPUT=$(echo "$STDIN" | CBP_CONTEXT_WARN_TOKENS=200000 bash "$GUARD_HOOK" 2>/dev/null)
|
|
546
546
|
EXIT_CODE=$?
|
|
547
547
|
if [ "$EXIT_CODE" = "0" ] \
|
|
548
548
|
&& echo "$OUTPUT" | jq -e '.hookSpecificOutput.permissionDecision == "deny"' >/dev/null 2>&1; then
|
|
549
|
-
test_result "cbp-skill-context-guard.sh over-threshold + cbp-round-
|
|
549
|
+
test_result "cbp-skill-context-guard.sh over-threshold + cbp-round-build → deny" "passed" "passed"
|
|
550
550
|
else
|
|
551
|
-
test_result "cbp-skill-context-guard.sh over-threshold + cbp-round-
|
|
551
|
+
test_result "cbp-skill-context-guard.sh over-threshold + cbp-round-build → deny" "passed" "failed (exit=$EXIT_CODE output=$(echo "$OUTPUT" | head -c 80))"
|
|
552
552
|
fi
|
|
553
553
|
|
|
554
554
|
# Case 2: over-threshold + cbp-clear-prep (exempt) → empty stdout, exit 0
|
|
@@ -577,17 +577,17 @@ else
|
|
|
577
577
|
test_result "cbp-skill-context-guard.sh over-threshold + cbp-clear-continue (exempt) → empty stdout" "passed" "failed (exit=$EXIT_CODE)"
|
|
578
578
|
fi
|
|
579
579
|
|
|
580
|
-
# Case 4: under-threshold + cbp-round-
|
|
580
|
+
# Case 4: under-threshold + cbp-round-build → empty stdout, exit 0
|
|
581
581
|
STDIN=$(jq -n \
|
|
582
582
|
--arg t "$FIXTURES_GUARD/under-threshold.jsonl" \
|
|
583
|
-
--arg s "cbp-round-
|
|
583
|
+
--arg s "cbp-round-build" \
|
|
584
584
|
'{transcript_path:$t,tool_input:{skill:$s}}')
|
|
585
585
|
OUTPUT=$(echo "$STDIN" | CBP_CONTEXT_WARN_TOKENS=200000 bash "$GUARD_HOOK" 2>/dev/null)
|
|
586
586
|
EXIT_CODE=$?
|
|
587
587
|
if [ "$EXIT_CODE" = "0" ] && [ -z "$OUTPUT" ]; then
|
|
588
|
-
test_result "cbp-skill-context-guard.sh under-threshold + cbp-round-
|
|
588
|
+
test_result "cbp-skill-context-guard.sh under-threshold + cbp-round-build → empty stdout" "passed" "passed"
|
|
589
589
|
else
|
|
590
|
-
test_result "cbp-skill-context-guard.sh under-threshold + cbp-round-
|
|
590
|
+
test_result "cbp-skill-context-guard.sh under-threshold + cbp-round-build → empty stdout" "passed" "failed (exit=$EXIT_CODE)"
|
|
591
591
|
fi
|
|
592
592
|
|
|
593
593
|
# Case 5: empty skill_name → empty stdout, exit 0
|
|
@@ -603,7 +603,7 @@ else
|
|
|
603
603
|
fi
|
|
604
604
|
|
|
605
605
|
# Case 6: missing transcript_path → empty stdout, exit 0 (fast-path)
|
|
606
|
-
STDIN=$(jq -n --arg s "cbp-round-
|
|
606
|
+
STDIN=$(jq -n --arg s "cbp-round-build" '{tool_input:{skill:$s}}')
|
|
607
607
|
OUTPUT=$(echo "$STDIN" | CBP_CONTEXT_WARN_TOKENS=200000 bash "$GUARD_HOOK" 2>/dev/null)
|
|
608
608
|
EXIT_CODE=$?
|
|
609
609
|
if [ "$EXIT_CODE" = "0" ] && [ -z "$OUTPUT" ]; then
|
|
@@ -12,7 +12,7 @@ _get_limit() {
|
|
|
12
12
|
# Documented exceptions — higher budget
|
|
13
13
|
/docs/templates/*/task.md) echo "450 900"; return;;
|
|
14
14
|
/.claude/docs/architecture/development.md) echo "1200 2000"; return;;
|
|
15
|
-
/.claude/skills/cbp-round-
|
|
15
|
+
/.claude/skills/cbp-round-plan/SKILL.md) echo "600 1000"; return;;
|
|
16
16
|
/.claude/rules/development-workflow.md) echo "250 400"; return;;
|
|
17
17
|
# Unlimited files
|
|
18
18
|
/CHANGELOG.md|*/CHANGELOG.md|*/user-input.md|/.claude/docs/research/*) echo ""; return;;
|
|
@@ -39,7 +39,7 @@ if match_path '^/\.claude/docs/stack/' \
|
|
|
39
39
|
fi
|
|
40
40
|
|
|
41
41
|
# Notation consistency (warn-only): flag bare-colon command notation in .claude/ markdown
|
|
42
|
-
# See: cbp-round-
|
|
42
|
+
# See: cbp-round-plan Step 0 "CHK / TASK / ROUND Identifier Notation Vocabulary" — all command refs must use /cbp-* form
|
|
43
43
|
if match_path '^/\.claude/(rules|skills|agents)/' && match_path '\.md$'; then
|
|
44
44
|
CONTENT=$(read_input_content)
|
|
45
45
|
[ -z "$CONTENT" ] && [ -f "$FILE_PATH" ] && CONTENT=$(cat "$FILE_PATH" 2>/dev/null || true)
|
|
@@ -34,7 +34,7 @@ The `install`/`update`/`uninstall` flow handles these files identically to how i
|
|
|
34
34
|
|
|
35
35
|
## Current status
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
Eight rules are shipped:
|
|
38
38
|
|
|
39
39
|
| Rule file | Scope | Summary |
|
|
40
40
|
|---|---|---|
|
|
@@ -45,7 +45,6 @@ Nine rules are shipped:
|
|
|
45
45
|
| `agent-claim-verification.md` | `org-shared` | Verify an agent's claimed outcomes against ground truth (git, filesystem, tool results) before trusting them |
|
|
46
46
|
| `e2e-mandatory.md` | `org-shared` | E2E is opt-out: an eligible framework whose source changed in a round must run its specialist or record a valid skip |
|
|
47
47
|
| `parallel-waves.md` | `org-shared` | Wave-dispatch contract for parallel round execution — topological ordering and per-wave testing |
|
|
48
|
-
| `task-routing-recommendation.md` | `repo-only:codebyplan` | Two-family command surface (checkpoint-bound vs standalone) and identifier-format routing — installed only in codebyplan-family repos |
|
|
49
48
|
| `cbp-operating-gotchas.md` | `org-shared` | Cross-repo CBP-tooling traps (ship/timeout/MCP-replace/worktree/lint-baseline/approval-reconcile) + behavioral prefs, inherited once by all consumers |
|
|
50
49
|
|
|
51
50
|
## Contributing a rule
|
|
@@ -10,7 +10,7 @@ paths:
|
|
|
10
10
|
<!-- Delivery: subagents receive this rule via the [[agent-claim-verification]] pointer in each
|
|
11
11
|
agent's .md file. The `paths:` frontmatter surfaces it when an agent file is being *edited*,
|
|
12
12
|
not when the agent is *running* — both mechanisms are intentional, so don't drop the pointer.
|
|
13
|
-
Scope is agents-only by design (cbp-round-
|
|
13
|
+
Scope is agents-only by design (cbp-round-builder, cbp-research); skill files are out of
|
|
14
14
|
scope this round. -->
|
|
15
15
|
|
|
16
16
|
Subagents routinely emit tool calls and explanatory text that depend on a named thing *existing* — a JSON config key, a schema field, an environment-variable name, an external API's request/response shape. When that name is recalled from memory instead of read from the source, it is often subtly wrong: a renamed field, a key that moved to a different file, an API shape from an older version. Those hallucinated names cost correction rounds.
|
|
@@ -12,20 +12,20 @@ paths:
|
|
|
12
12
|
|
|
13
13
|
| Context File | Loaded By | Phase | Purpose |
|
|
14
14
|
|--------------|-----------|-------|---------|
|
|
15
|
-
| `context/testing/unit.md` | `cbp-round-
|
|
15
|
+
| `context/testing/unit.md` | `cbp-round-builder` | Step 3.6 | Unit test patterns per framework |
|
|
16
16
|
| `context/testing/e2e.md` | `cbp-e2e-playwright`, `cbp-e2e-maestro`, `cbp-e2e-tauri`, `cbp-e2e-vscode`, `cbp-e2e-xcuitest` | Entry | Shared contract: Input/Output, preflight, failure classification, dispatch routing |
|
|
17
17
|
| `context/testing/e2e.md` | `cbp-testing-qa-agent` | Preflight | Env var list per framework |
|
|
18
18
|
| `context/testing/e2e.md` | `cbp-checkpoint-plan` | Step 4 | Discovery probe dispatch contract |
|
|
19
|
-
| `context/testing/e2e.md` | `cbp-round-
|
|
19
|
+
| `context/testing/e2e.md` | `cbp-round-build` | Step 5 | E2E specialist dispatch routing |
|
|
20
20
|
| `context/testing/e2e.md` | `cbp-checkpoint-check` | Step 5b | Whole-checkpoint e2e dispatch |
|
|
21
|
-
| `context/testing/eslint.md` | `cbp-
|
|
22
|
-
| `context/testing/eslint.md` | `cbp-
|
|
23
|
-
| `context/mcp-docs.md` | `cbp-
|
|
24
|
-
| `context/mcp-docs.md` | `cbp-round-
|
|
21
|
+
| `context/testing/eslint.md` | `cbp-round-planner` | Phase 1.5 | ESLint Compliance Checklist |
|
|
22
|
+
| `context/testing/eslint.md` | `cbp-verify-reviewer` | Config-File Mode | Config-file compliance audit |
|
|
23
|
+
| `context/mcp-docs.md` | `cbp-round-planner` | Phase 2.6 | MCP library doc lookup contract — per-dependency consultation via DocsByPlan MCP tools (resolve_library_id → search_chunks/lookup_symbol → get_chunk) |
|
|
24
|
+
| `context/mcp-docs.md` | `cbp-round-builder` | Step 3.4 | Library-specific reference — pre-write API verification via DocsByPlan MCP tools |
|
|
25
25
|
| `context/architecture/arch-map-spec.md` | `cbp-map-architecture` | Entry | Canonical architecture-map artifact format — per-module frontmatter + sections, INDEX.md row format, dependency-graph format |
|
|
26
|
-
| `context/architecture-map.md` | `cbp-
|
|
27
|
-
| `context/architecture-map.md` | `cbp-round-
|
|
28
|
-
| `rules/parallel-waves.md` | `cbp-
|
|
26
|
+
| `context/architecture-map.md` | `cbp-round-planner` | Phase 3 | Architecture map consultation contract — when + how to read per-module maps before finalizing scope |
|
|
27
|
+
| `context/architecture-map.md` | `cbp-round-builder` | Step 2.4 | Architecture map consultation contract — when + how to read per-module maps before editing files |
|
|
28
|
+
| `rules/parallel-waves.md` | `cbp-round-planner` | Phase 5.6 | Wave schema, invariants (3..15 file-count), and the proximity-split algorithm (a `rules/` file, not `context/**`; listed here for consumer discoverability) |
|
|
29
29
|
|
|
30
30
|
New context files MUST be added here in the same change that introduces the consumer — or the file is orphan infrastructure.
|
|
31
31
|
|
|
@@ -37,7 +37,7 @@ New context files MUST be added here in the same change that introduces the cons
|
|
|
37
37
|
|
|
38
38
|
## Why Fail Loudly
|
|
39
39
|
|
|
40
|
-
Silent fallback hides drift. A rename or deletion of `context/testing/unit.md` would let `cbp-round-
|
|
40
|
+
Silent fallback hides drift. A rename or deletion of `context/testing/unit.md` would let `cbp-round-builder` keep writing tests from memory, drifting from the canonical recipe. A failed agent surfaces the drift on the first invocation; silent fallback lets it compound.
|
|
41
41
|
|
|
42
42
|
## Path Convention
|
|
43
43
|
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: The full CodeByPlan development loop — session, planning, the round build/verify cycle, and checkpoint ship — as a concise skill map.
|
|
3
|
+
paths:
|
|
4
|
+
- ".claude/skills/cbp-session-start/**"
|
|
5
|
+
- ".claude/skills/cbp-todo/**"
|
|
6
|
+
- ".claude/skills/cbp-round-plan/**"
|
|
7
|
+
- ".claude/skills/cbp-verify/**"
|
|
8
|
+
- ".claude/skills/cbp-finalize/**"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Development Workflow
|
|
12
|
+
|
|
13
|
+
The full pipeline, as a map (not a tutorial). Each arrow is an auto-trigger or a single `Next:`
|
|
14
|
+
directive — never an A/B/C menu (`feedback-close-out-routing.md`). Skill names below are the
|
|
15
|
+
canonical post-redesign names.
|
|
16
|
+
|
|
17
|
+
## Session Frame
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
/cbp-session-start → ... work ... → /cbp-session-end
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`/cbp-todo` answers "what do I work on next" inside a session.
|
|
24
|
+
|
|
25
|
+
## Planning a Unit of Work
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
checkpoint-bound: /cbp-checkpoint-create → /cbp-checkpoint-plan → /cbp-checkpoint-start
|
|
29
|
+
standalone: /cbp-standalone-task-create → /cbp-standalone-task-start
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`cbp-checkpoint-create` is mechanical (checkpoint row + feat branch, zero tasks);
|
|
33
|
+
`cbp-checkpoint-plan` does the deep planning (tasks as vertical slices); `cbp-checkpoint-start`
|
|
34
|
+
activates + claims. Standalone work skips checkpoint shipment entirely.
|
|
35
|
+
|
|
36
|
+
## The Round Cycle (per task)
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
/cbp-round-plan → /cbp-round-build → /cbp-verify (scope=round) → /cbp-round-complete
|
|
40
|
+
↑ │
|
|
41
|
+
└──────────────── more work wanted on the task ───────────────────────┘
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- **`/cbp-round-plan`** — round planning entry (round-1 planning + the folded-in round-input
|
|
45
|
+
deep-analysis role). Spawns `cbp-round-planner`.
|
|
46
|
+
- **`/cbp-round-build`** — owns the plan-approval gate + per-wave execution. Spawns
|
|
47
|
+
`cbp-round-builder`; auto-triggers `/cbp-verify`.
|
|
48
|
+
- **`/cbp-verify` (round scope)** — unified verify stage: deterministic gates +
|
|
49
|
+
real-execution proof + fresh-context review (`cbp-verify-reviewer`). Any fail → `/cbp-round-plan`
|
|
50
|
+
fix round.
|
|
51
|
+
- **`/cbp-round-complete`** — the separate `ask`-tier, `disable-model-invocation` human git-add
|
|
52
|
+
finalizer. The user stages approved files; it reconciles + completes the round.
|
|
53
|
+
|
|
54
|
+
## Closing the Task → Checkpoint
|
|
55
|
+
|
|
56
|
+
On the **last clean round** of a task, verify escalates to task scope and finalizes:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
/cbp-verify (scope=task) → /cbp-finalize → /cbp-checkpoint-check → /cbp-checkpoint-end
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
- **`/cbp-verify` (scope=task)** — whole-repo `codebyplan check --scope task`, holistic reviewer,
|
|
63
|
+
one batched human walkthrough, writes `task.context.verify_verdict={verdict:'READY'}`.
|
|
64
|
+
- **`/cbp-finalize`** — task-level ship finalizer.
|
|
65
|
+
- **`/cbp-checkpoint-check`** then **`/cbp-checkpoint-end`** — checkpoint re-evaluation +
|
|
66
|
+
shipment (hardcore CI tier, `rules/two-tier-ci.md`).
|
|
67
|
+
|
|
68
|
+
## Cross-References
|
|
69
|
+
|
|
70
|
+
- `rules/two-tier-ci.md` — soft (round/task) vs hardcore (checkpoint) gate strictness.
|
|
71
|
+
- `rules/execution-proof.md` — the committed-artifact obligation at every verify.
|
|
72
|
+
- `rules/spawn-failure-is-gate-failure.md` — agent spawn failure is a STOP, not a self-grade.
|
|
73
|
+
- `rules/task-routing-recommendation.md` — checkpoint-bound vs standalone command families.
|
|
@@ -14,7 +14,7 @@ A framework is **eligible** in a round when ALL hold:
|
|
|
14
14
|
- The framework's `app` source path intersects the round's `files_changed` (repo root for
|
|
15
15
|
single-app repos).
|
|
16
16
|
|
|
17
|
-
When eligible, `/cbp-round-
|
|
17
|
+
When eligible, `/cbp-round-build` Step 5 spawns the matching specialist in parallel with
|
|
18
18
|
`cbp-testing-qa-agent`; `/cbp-checkpoint-check` Step 5b does the same against the aggregated
|
|
19
19
|
file union with `whole_checkpoint_mode: true`.
|
|
20
20
|
|
|
@@ -28,8 +28,8 @@ no hard-fail fires.
|
|
|
28
28
|
## `e2e_eligible_skipped` Hard-Fail
|
|
29
29
|
|
|
30
30
|
If a framework was eligible this round but no specialist ran AND no valid skip reason is
|
|
31
|
-
recorded, the round **hard-fails** and `/cbp-round-
|
|
32
|
-
`/cbp-round-
|
|
31
|
+
recorded, the round **hard-fails** and `/cbp-round-build` Step 6 auto-triggers
|
|
32
|
+
`/cbp-round-plan`. Silent skips are bugs, not conveniences — this is the enforcement behind
|
|
33
33
|
the opt-out contract.
|
|
34
34
|
|
|
35
35
|
**Valid skip reasons** (must be recorded in `round.context.e2e_outputs[framework]` or the
|
|
@@ -54,8 +54,8 @@ check. Pre-flight (`context/testing/e2e.md` Step 6.5.1) is the only mechanism fo
|
|
|
54
54
|
env-conditional skipping.
|
|
55
55
|
|
|
56
56
|
A spec that ran with `passed === 0 && skipped > 0` for any path touching `files_changed` is a
|
|
57
|
-
**hard fail**, not a pass — `cbp-
|
|
58
|
-
verdict on a zero-assertion e2e run and routes to a fix round per this rule.
|
|
57
|
+
**hard fail**, not a pass — `cbp-verify-reviewer` (`agents/cbp-verify-reviewer.md`) refuses a
|
|
58
|
+
READY verdict on a zero-assertion e2e run and routes to a fix round per this rule.
|
|
59
59
|
|
|
60
60
|
## Committed-Screenshot Enforcement
|
|
61
61
|
|
|
@@ -64,7 +64,7 @@ path it touched is a defect — not a valid pass. Every framework must write at
|
|
|
64
64
|
PNG to its committed dir (per the table in `context/testing/e2e.md` § Committed-Screenshot
|
|
65
65
|
Mandate) and `git add` it before reporting `status: 'completed'`.
|
|
66
66
|
|
|
67
|
-
`cbp-
|
|
67
|
+
`cbp-verify-reviewer` refuses a READY verdict when `e2e_gallery[]` is empty AND the round
|
|
68
68
|
touched UI source paths for an eligible framework — sole exception: `vscode-test`-only
|
|
69
69
|
rounds (SD-3, behavior-only extensions; see below). The fix path is the same as for a
|
|
70
70
|
zero-assertion run: open a fix round that captures the missing committed screenshots.
|
|
@@ -77,7 +77,7 @@ has no visual output (behavior-only tests). Agents must still define the dir and
|
|
|
77
77
|
|
|
78
78
|
- `context/testing/e2e.md` — Input/Output contract, pre-flight loop, failure classification,
|
|
79
79
|
committed-screenshot mandate, auto-new/gated-changed model, and dispatch routing table.
|
|
80
|
-
- `agents/cbp-
|
|
80
|
+
- `agents/cbp-verify-reviewer.md` — enforces the zero-assertion hard-fail and the empty
|
|
81
81
|
`e2e_gallery[]` hard-fail at verdict time.
|
|
82
|
-
- `skills/cbp-round-
|
|
82
|
+
- `skills/cbp-round-build/SKILL.md` Step 5/6, `skills/cbp-checkpoint-check/SKILL.md` Step 5b
|
|
83
83
|
— the config-driven dispatch and `e2e_eligible_skipped` gate implementations.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Real execution proof is a non-skippable verify obligation — tiered by what the round touched, every tier producing a COMMITTED artifact, never prose.
|
|
3
|
+
paths:
|
|
4
|
+
- ".claude/skills/cbp-verify/**"
|
|
5
|
+
- ".claude/skills/cbp-round-build/**"
|
|
6
|
+
- ".claude/agents/cbp-verify-reviewer.md"
|
|
7
|
+
- ".claude/agents/cbp-e2e-playwright.md"
|
|
8
|
+
- ".claude/agents/cbp-e2e-maestro.md"
|
|
9
|
+
- ".claude/agents/cbp-e2e-tauri.md"
|
|
10
|
+
- ".claude/agents/cbp-e2e-vscode.md"
|
|
11
|
+
- ".claude/agents/cbp-e2e-xcuitest.md"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Execution Proof
|
|
15
|
+
|
|
16
|
+
"I verified the build" is not proof. Proof is a **committed artifact** that an auditor can
|
|
17
|
+
re-inspect after the session ends. `cbp-verify` Phase 3 produces it; a passing verdict without
|
|
18
|
+
it is invalid. The required artifact is **tiered by what the round's diff actually touched** —
|
|
19
|
+
the tier is chosen from `files_changed`, not from a `has_ui_work` guess.
|
|
20
|
+
|
|
21
|
+
## Tiers
|
|
22
|
+
|
|
23
|
+
| Tier | Round touched | Proof obligation | Asserted by |
|
|
24
|
+
|------|---------------|------------------|-------------|
|
|
25
|
+
| **1** | A configured e2e framework's `app` source (`.codebyplan/e2e.json`) | `cbp-e2e-*` specialist runs the app and **commits screenshots** to the framework's committed dir | `codebyplan e2e verify-round` (non-empty gallery + non-zero assertions) |
|
|
26
|
+
| **2** | UI source, but NO e2e framework configured for that app | **MANDATORY** dev-server run + at least one committed route screenshot or HTTP response trace for each changed route | manifest `artifacts[]` + `git ls-files --error-unmatch` |
|
|
27
|
+
| **3** | Backend / API only (route handlers, server actions, endpoints) | Hit each changed endpoint; record an HTTP status trace (method, path, status, ms) committed to the round artifact dir | manifest `artifacts[]` |
|
|
28
|
+
| **4** | `claude_only` / docs / config only (no app surface) | Proof IS the build/test commands — `codebyplan check --scope round\|task` (+ `bash -n` for touched hooks); profile-valid, no screenshot | manifest `gates[]` |
|
|
29
|
+
|
|
30
|
+
A round can hit multiple tiers; satisfy each tier its diff touches.
|
|
31
|
+
|
|
32
|
+
## Hard Rules
|
|
33
|
+
|
|
34
|
+
- **Empty proof on a UI-touching diff is a GATE FAILURE.** A round whose `files_changed`
|
|
35
|
+
includes UI source but whose manifest carries zero committed screenshots/traces fails verify —
|
|
36
|
+
route to a fix round that captures the missing artifact. (Mirrors `e2e-mandatory.md`
|
|
37
|
+
Committed-Screenshot Enforcement; sole exception: `vscode-test`-only behavior rounds.)
|
|
38
|
+
- **Screenshots must be committed, not `/tmp`.** Each artifact path is proven present with
|
|
39
|
+
`git ls-files --error-unmatch <path>` — an unstaged or `/tmp` file is not proof.
|
|
40
|
+
- **Prose is never proof.** A narrative claim with no artifact path does not satisfy any tier.
|
|
41
|
+
|
|
42
|
+
## Manifest Schema
|
|
43
|
+
|
|
44
|
+
`cbp-verify` writes a `verify_manifest` into round/task context — the durable record of which
|
|
45
|
+
gates ran and what proof exists:
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
verify_manifest:
|
|
49
|
+
scope: round | task
|
|
50
|
+
gates: # deterministic gate results
|
|
51
|
+
- name: gate6 | lint | typecheck | tests | audit
|
|
52
|
+
exit_code: number
|
|
53
|
+
new_failures: string[] # post-baseline-diff; [] = pass
|
|
54
|
+
proof:
|
|
55
|
+
tier: 1 | 2 | 3 | 4
|
|
56
|
+
artifacts: # committed proof, one per affected surface
|
|
57
|
+
- kind: screenshot | http_trace | command_log
|
|
58
|
+
path: string # repo-relative; verified via git ls-files --error-unmatch
|
|
59
|
+
affected: string # route / endpoint / file this proves
|
|
60
|
+
e2e_verify_round: # present for Tier 1
|
|
61
|
+
pass: boolean
|
|
62
|
+
failed_checks: string[] # e2e_eligible_skipped | zero_assertion_run | empty_gallery
|
|
63
|
+
decided_at: ISO8601
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Cross-References
|
|
67
|
+
|
|
68
|
+
- `rules/e2e-mandatory.md` — Tier 1 opt-out contract + committed-screenshot mandate.
|
|
69
|
+
- `rules/two-tier-ci.md` — how proof feeds the soft (round/task) vs hardcore (checkpoint) tiers.
|
|
70
|
+
- `skills/cbp-verify/reference/deterministic-gates.md` — the gate command contracts + manifest write.
|
|
@@ -7,8 +7,8 @@ a skill is strictly user-only (i.e. it must never auto-trigger from another skil
|
|
|
7
7
|
|
|
8
8
|
The absence of `disable-model-invocation` (or `disable-model-invocation: false`) is the normal
|
|
9
9
|
state. It allows the skill to be auto-triggered via the Skill tool from within other skills —
|
|
10
|
-
which is how the auto-trigger close-out flow works (e.g. `cbp-
|
|
11
|
-
`cbp-
|
|
10
|
+
which is how the auto-trigger close-out flow works (e.g. `cbp-round-build` → `cbp-verify`,
|
|
11
|
+
`cbp-verify` task scope → `cbp-finalize`).
|
|
12
12
|
|
|
13
13
|
## The sole exception: `cbp-round-complete`
|
|
14
14
|
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: parallel-waves
|
|
3
|
-
description: Wave schema, invariants, and proximity-split algorithm for cbp-
|
|
3
|
+
description: Wave schema, invariants, and proximity-split algorithm for cbp-round-planner Phase 5.6 wave decomposition.
|
|
4
4
|
paths:
|
|
5
|
-
- .claude/agents/cbp-
|
|
5
|
+
- .claude/agents/cbp-round-planner.md
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Parallel Waves
|
|
9
9
|
|
|
10
|
-
Authoritative expansion of `cbp-
|
|
10
|
+
Authoritative expansion of `cbp-round-planner` Phase 5.6. The planner reads this file at wave decomposition time.
|
|
11
11
|
|
|
12
12
|
## Wave Schema
|
|
13
13
|
|
|
14
|
-
Each entry in `plan.waves[]` carries these fields (source: `.claude/agents/cbp-
|
|
14
|
+
Each entry in `plan.waves[]` carries these fields (source: `.claude/agents/cbp-round-planner.md` Phase 5.6 "Output" block):
|
|
15
15
|
|
|
16
16
|
```yaml
|
|
17
17
|
- name: string # short identifier, e.g. "web-ui", "backend", "db"
|
|
18
|
-
agent_type: 'round-
|
|
18
|
+
agent_type: 'round-builder' | 'inline'
|
|
19
19
|
files: string[] # repo-relative paths owned by this wave
|
|
20
20
|
depends_on: string[] # names of waves that must complete before this one starts
|
|
21
|
-
skill_preloads: string[] # skills invoked by the
|
|
21
|
+
skill_preloads: string[] # skills invoked by the builder before Step 3 (e.g. "frontend-design")
|
|
22
22
|
note: string # optional — required on continuation waves from an arbitrary-boundary split
|
|
23
23
|
```
|
|
24
24
|
|
|
@@ -31,9 +31,9 @@ Each entry in `plan.waves[]` carries these fields (source: `.claude/agents/cbp-t
|
|
|
31
31
|
**(III) 3–15 files per wave** — every wave holds between 3 and 15 files (inclusive).
|
|
32
32
|
- Below 3: merge into a sibling wave.
|
|
33
33
|
- Above 15: apply the proximity-split algorithm below.
|
|
34
|
-
- Sole exception — trivially small plans are exempt from the lower bound: a plan with fewer than 3 total files uses one single wave, and a single-app plan with ≤5 total files MAY skip decomposition entirely (one wave, or `waves[]` omitted — see `cbp-
|
|
34
|
+
- Sole exception — trivially small plans are exempt from the lower bound: a plan with fewer than 3 total files uses one single wave, and a single-app plan with ≤5 total files MAY skip decomposition entirely (one wave, or `waves[]` omitted — see `cbp-round-planner` Phase 5.6). Zero waves (omitted `waves[]`) trivially satisfies this invariant.
|
|
35
35
|
|
|
36
|
-
**(IV) UI skill preloads** — for each wave whose `files[]` contains UI-bearing paths (`*.tsx`, `*.jsx`, `*.scss`, etc.), add `"frontend-design"` to `skill_preloads[]` (source: `.claude/agents/cbp-
|
|
36
|
+
**(IV) UI skill preloads** — for each wave whose `files[]` contains UI-bearing paths (`*.tsx`, `*.jsx`, `*.scss`, etc.), add `"frontend-design"` to `skill_preloads[]` (source: `.claude/agents/cbp-round-planner.md` Phase 5.6 step "Populate `skill_preloads[]`").
|
|
37
37
|
|
|
38
38
|
## Proximity-Split Algorithm
|
|
39
39
|
|
|
@@ -57,7 +57,7 @@ Invariants I (disjoint files), II (acyclic `depends_on` DAG), and III (3–15 fi
|
|
|
57
57
|
|
|
58
58
|
## Cross-References
|
|
59
59
|
|
|
60
|
-
- `agents/cbp-
|
|
60
|
+
- `agents/cbp-round-planner.md` Phase 5.6 — consumer of this rule; steps 1–6 and the `validate-waves` verification call.
|
|
61
61
|
- `packages/codebyplan-package/src/lib/validate-waves.ts` — deterministic enforcement of invariants I–III.
|
|
62
|
-
- `agents/cbp-round-
|
|
63
|
-
- `skills/cbp-round-
|
|
62
|
+
- `agents/cbp-round-builder.md` Step 2.6 — wave-mode skill preloads.
|
|
63
|
+
- `skills/cbp-round-build/SKILL.md` Step 3 — per-wave builder dispatch.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: A subagent spawn failure is a HARD GATE FAILURE — STOP and retry, never walk the agent's steps inline and self-certify.
|
|
3
|
+
paths:
|
|
4
|
+
- ".claude/skills/cbp-verify/**"
|
|
5
|
+
- ".claude/skills/cbp-round-build/**"
|
|
6
|
+
- ".claude/skills/cbp-finalize/**"
|
|
7
|
+
- ".claude/agents/cbp-verify-reviewer.md"
|
|
8
|
+
- ".claude/agents/cbp-round-builder.md"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Spawn Failure Is Gate Failure
|
|
12
|
+
|
|
13
|
+
When a verify/execution stage delegates work to a subagent (e.g. `cbp-verify` spawning
|
|
14
|
+
`cbp-verify-reviewer`, `cbp-round-build` spawning `cbp-round-builder`), the agent is the
|
|
15
|
+
**fresh-context oracle**. If the agent cannot run, the orchestrator does NOT have an
|
|
16
|
+
equivalent signal — and it must NEVER manufacture one.
|
|
17
|
+
|
|
18
|
+
## The Rule
|
|
19
|
+
|
|
20
|
+
A **spawn failure** — the agent could not run, or died on a terminal error before producing
|
|
21
|
+
its output contract — is a **HARD GATE FAILURE**. The orchestrator STOPS and surfaces a retry
|
|
22
|
+
directive. It does NOT walk the agent's phase checklist inline with its own tools and grade its
|
|
23
|
+
own work. Self-certification by the orchestrator that spawned the agent is precisely the
|
|
24
|
+
fresh-context blind spot the agent exists to remove; reproducing the agent's steps inline
|
|
25
|
+
re-introduces it.
|
|
26
|
+
|
|
27
|
+
Spawn-failure classes (non-exhaustive): provider 5xx, rate-limit / monthly-cap / billing block,
|
|
28
|
+
context overflow at spawn, the agent process dying before emitting its output contract.
|
|
29
|
+
|
|
30
|
+
**Retry directive shape** (surface verbatim, then STOP):
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
## Verify blocked — reviewer could not spawn
|
|
34
|
+
|
|
35
|
+
The fresh-context reviewer (<agent>) failed to spawn: <class> — <verbatim error>.
|
|
36
|
+
This is a hard gate failure, not a pass. Retry when capacity returns:
|
|
37
|
+
Next: /cbp-verify
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Record `<scope>.context.verify.spawn_failure = { agent, class, error_message, decided_at }` so
|
|
41
|
+
the retry is auditable and a verdict is never written on a missing review.
|
|
42
|
+
|
|
43
|
+
## Spawn-Failed vs Spawn-Ran-And-Found-Problems
|
|
44
|
+
|
|
45
|
+
These are different outcomes with opposite routes — do not conflate them:
|
|
46
|
+
|
|
47
|
+
| Outcome | Meaning | Route |
|
|
48
|
+
|---------|---------|-------|
|
|
49
|
+
| **Spawn failed** | Agent never produced its output contract (terminal error). | HARD GATE FAILURE → STOP + retry directive. No verdict written. |
|
|
50
|
+
| **Spawn ran, found problems** | Agent returned findings / `NOT_READY`. | Normal flow → in-scope mechanical fix or `/cbp-round-plan` fix round. |
|
|
51
|
+
|
|
52
|
+
A returned `NOT_READY` is a *successful* review with a negative verdict — it is acted on, not
|
|
53
|
+
retried. Only the absence of a contract is a spawn failure.
|
|
54
|
+
|
|
55
|
+
## Carve-Out: The `claude_only` Profile Is Not Inline Fallback
|
|
56
|
+
|
|
57
|
+
The `claude_only` profile (rounds with no app surface — `.claude/`-only edits, docs, config)
|
|
58
|
+
has **no agent to spawn by design**. Its proof IS the deterministic command set:
|
|
59
|
+
`codebyplan check --scope round|task` plus `bash -n <hook>` for any touched shell file. Running
|
|
60
|
+
those inline is a **first-class deterministic verification path**, not a banned inline fallback —
|
|
61
|
+
there was never a subagent to substitute for. This carve-out applies ONLY when the resolved
|
|
62
|
+
profile is `claude_only`; for every other profile an agent is expected, and its spawn failure is
|
|
63
|
+
a hard gate failure per above.
|
|
64
|
+
|
|
65
|
+
## Why (Replaces Inline-Fallback Self-Certification)
|
|
66
|
+
|
|
67
|
+
The retired `inline-fallback.md` procedures let an orchestrator that just failed to spawn an
|
|
68
|
+
agent walk that agent's steps and pass its own work. That defeats the entire point of a
|
|
69
|
+
fresh-context review and silently downgraded quality under sustained outages. This rule replaces
|
|
70
|
+
those procedures: a missing review is a STOP, not a self-graded continue.
|
|
71
|
+
|
|
72
|
+
## Cross-References
|
|
73
|
+
|
|
74
|
+
- `skills/cbp-verify/SKILL.md` Phase 4 — the reviewer spawn + this hard-fail.
|
|
75
|
+
- `agents/cbp-verify-reviewer.md` — the reviewer whose absence triggers this rule.
|
|
76
|
+
- `rules/execution-proof.md` — the proof obligation a passing verdict still requires.
|
|
@@ -12,7 +12,7 @@ CodeByPlan has two families of task commands since CHK-141:
|
|
|
12
12
|
|
|
13
13
|
| Family | Commands | When to use |
|
|
14
14
|
|--------|----------|-------------|
|
|
15
|
-
| Checkpoint-bound | `/cbp-task-create`, `/cbp-task-start {chk}-{task}`, `/cbp-
|
|
15
|
+
| Checkpoint-bound | `/cbp-task-create`, `/cbp-task-start {chk}-{task}`, `/cbp-verify`, `/cbp-finalize` | Work that belongs to a CHK-NNN checkpoint |
|
|
16
16
|
| Standalone | `/cbp-standalone-task-create`, `/cbp-standalone-task-start {task}`, `/cbp-standalone-task-check`, `/cbp-standalone-task-testing`, `/cbp-standalone-task-complete` | Independent work not tied to any checkpoint |
|
|
17
17
|
|
|
18
18
|
## Round Commands (Both Families)
|
|
@@ -62,8 +62,8 @@ The queue head (`get_todos` `rows[0]`) maps to one of these slash commands. The
|
|
|
62
62
|
|
|
63
63
|
| State | Command | Required context |
|
|
64
64
|
|-------|---------|------------------|
|
|
65
|
-
| Round in progress | `/cbp-
|
|
66
|
-
| Round pending start | `/cbp-round-
|
|
65
|
+
| Round in progress | `/cbp-verify` | `{checkpoint_id, task_id, round_id}` |
|
|
66
|
+
| Round pending start | `/cbp-round-plan` | `{checkpoint_id, task_id}` |
|
|
67
67
|
| Task pending start | `/cbp-task-start` | `{checkpoint_id, task_id}` or `{task_id}` for standalone |
|
|
68
68
|
| Checkpoint pending activation | `/cbp-checkpoint-update` | `{checkpoint_id}` |
|
|
69
69
|
| Checkpoint done | `/cbp-checkpoint-check` | `{checkpoint_id}` |
|
|
@@ -118,4 +118,4 @@ CHK-111 shipped the original todos queue as Postgres triggers + a 583-LOC `regen
|
|
|
118
118
|
4. Env vars (from `apps/todo-worker/.env.example`): `SUPABASE_URL`, `SUPABASE_SECRET_KEY` (an `sb_secret_...` key), `LOG_LEVEL`, `WORKER_POLL_MS`.
|
|
119
119
|
5. Save the resulting `project_ref` to `.codebyplan.json` `shipment.surfaces.railway-todo-worker.project_ref`.
|
|
120
120
|
|
|
121
|
-
Smoke after deploy: run `/cbp-
|
|
121
|
+
Smoke after deploy: run `/cbp-finalize` in any worktree → tail Railway logs → expect a `claim → apply` cycle within `WORKER_POLL_MS`.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Two CI tiers — soft (round/task → feat) is baseline-tolerant; hardcore (checkpoint → main) is whole-repo absolute green. Branch model is feat→main direct.
|
|
3
|
+
paths:
|
|
4
|
+
- ".claude/skills/cbp-verify/**"
|
|
5
|
+
- ".claude/skills/cbp-checkpoint-check/**"
|
|
6
|
+
- ".claude/skills/cbp-checkpoint-end/**"
|
|
7
|
+
- ".claude/skills/cbp-ship-main/**"
|
|
8
|
+
- ".codebyplan/ci.json"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Two Tier CI
|
|
12
|
+
|
|
13
|
+
CodeByPlan gates work at two strictness tiers. The tier is chosen by **what is being
|
|
14
|
+
promoted**, not by preference.
|
|
15
|
+
|
|
16
|
+
## Soft Tier — round / task → feat branch
|
|
17
|
+
|
|
18
|
+
Runs at every `cbp-verify` (round scope) and the task-scope escalation. **Baseline-tolerant**:
|
|
19
|
+
pre-existing red is non-blocking; only NEW per-package failures fail.
|
|
20
|
+
|
|
21
|
+
- `codebyplan check --scope round|task` (NO `--no-baseline`). Each baselined check
|
|
22
|
+
(`lint` / `typecheck` / `tests` / `audit`) fails ONLY when its `new_failures[]` is non-empty
|
|
23
|
+
vs `.check-baseline.json`. `gate6` (sibling-identity parity) is **always hard** — never
|
|
24
|
+
baselined.
|
|
25
|
+
- `codebyplan e2e verify-round --round-id <id> --task-id <id>` per round (Tier-1 e2e proof).
|
|
26
|
+
- Fresh-context review via `cbp-verify-reviewer` (its spawn failure is a hard gate failure —
|
|
27
|
+
`rules/spawn-failure-is-gate-failure.md`).
|
|
28
|
+
|
|
29
|
+
The soft tier keeps the inner loop fast: a feat branch may carry the repo's known baseline red
|
|
30
|
+
forward without blocking, while guaranteeing the work being added is itself clean.
|
|
31
|
+
|
|
32
|
+
## Hardcore Tier — checkpoint → main
|
|
33
|
+
|
|
34
|
+
Runs at checkpoint close (`cbp-checkpoint-check` / `cbp-checkpoint-end` / ship). **Zero baseline
|
|
35
|
+
forgiveness — whole-repo absolute green.**
|
|
36
|
+
|
|
37
|
+
- `codebyplan check --scope merged --no-baseline` = every failing package and every GHSA id
|
|
38
|
+
counts; any red fails. (`gate6` unchanged — still always hard.)
|
|
39
|
+
- Aggregate e2e proof across the whole checkpoint diff.
|
|
40
|
+
- Every required `main` branch-protection PR check is green (repo-specific — read the repo's
|
|
41
|
+
configured required checks, never assume a single hardcoded check name).
|
|
42
|
+
|
|
43
|
+
## Critical Constraint — feat→main DIRECT, main-only
|
|
44
|
+
|
|
45
|
+
The branch model is **feat→main direct**; `.codebyplan/git.json` has `integration: null`,
|
|
46
|
+
`production: "main"`. There is **NO intermediate integration branch** — the "checkpoint branch"
|
|
47
|
+
IS the per-checkpoint feat branch. The hardcore tier runs against that feat branch's merged
|
|
48
|
+
state before it lands on main; do not assume a staging/integration hop exists.
|
|
49
|
+
|
|
50
|
+
## Report-Only Rollout
|
|
51
|
+
|
|
52
|
+
The whole-repo hardcore CI **job** lands **report-only first** (`continue-on-error: true`) and is
|
|
53
|
+
flipped to a required check ONLY after the `apps/web` baseline is burned down. Until then,
|
|
54
|
+
`--scope merged --no-baseline` is advisory in CI — surfaced, not enforced — so a pre-existing
|
|
55
|
+
`apps/web` red does not block a merge while the baseline is still being paid down. Locally,
|
|
56
|
+
`cbp-verify` still runs and reports it.
|
|
57
|
+
|
|
58
|
+
## Cross-References
|
|
59
|
+
|
|
60
|
+
- `rules/execution-proof.md` — the committed-artifact obligation feeding both tiers.
|
|
61
|
+
- `rules/spawn-failure-is-gate-failure.md` — fresh-context review is non-substitutable.
|
|
62
|
+
- `skills/cbp-verify/reference/deterministic-gates.md` — exact gate commands + JSON contracts.
|
|
63
|
+
- `.codebyplan/git.json` — authoritative branch model (`integration: null`, `production: main`).
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
"Skill(cbp-checkpoint-check)",
|
|
57
57
|
"Skill(cbp-checkpoint-complete)",
|
|
58
58
|
"Skill(cbp-round-complete)",
|
|
59
|
-
"Skill(cbp-round-
|
|
59
|
+
"Skill(cbp-round-build)",
|
|
60
60
|
"Skill(cbp-session-end)",
|
|
61
|
-
"Skill(cbp-
|
|
61
|
+
"Skill(cbp-finalize)",
|
|
62
62
|
"Skill(cbp-standalone-task-create)",
|
|
63
63
|
"Skill(cbp-standalone-task-start)",
|
|
64
64
|
"Skill(cbp-standalone-task-complete)",
|
|
@@ -126,12 +126,7 @@
|
|
|
126
126
|
"Skill(cbp-map-architecture)",
|
|
127
127
|
"Skill(cbp-merge-main)",
|
|
128
128
|
"Skill(cbp-refresh-arch-map)",
|
|
129
|
-
"Skill(cbp-
|
|
130
|
-
"Skill(cbp-round-check)",
|
|
131
|
-
"Skill(cbp-round-end)",
|
|
132
|
-
"Skill(cbp-round-input)",
|
|
133
|
-
"Skill(cbp-round-start)",
|
|
134
|
-
"Skill(cbp-round-update)",
|
|
129
|
+
"Skill(cbp-round-plan)",
|
|
135
130
|
"Skill(cbp-session-start)",
|
|
136
131
|
"Skill(cbp-setup-cd)",
|
|
137
132
|
"Skill(cbp-setup-ci)",
|
|
@@ -144,11 +139,10 @@
|
|
|
144
139
|
"Skill(cbp-supabase-branch-check)",
|
|
145
140
|
"Skill(cbp-supabase-migrate)",
|
|
146
141
|
"Skill(cbp-supabase-setup)",
|
|
147
|
-
"Skill(cbp-task-check)",
|
|
148
142
|
"Skill(cbp-task-create)",
|
|
149
143
|
"Skill(cbp-task-start)",
|
|
150
|
-
"Skill(cbp-task-testing)",
|
|
151
144
|
"Skill(cbp-todo)",
|
|
145
|
+
"Skill(cbp-verify)",
|
|
152
146
|
"Skill(supabase)",
|
|
153
147
|
"Skill(supabase-postgres-best-practices)",
|
|
154
148
|
"mcp__codebyplan__get_checkpoints",
|
|
@@ -214,6 +208,8 @@
|
|
|
214
208
|
"Bash(npx codebyplan ports:*)",
|
|
215
209
|
"Bash(codebyplan tech-stack:*)",
|
|
216
210
|
"Bash(npx codebyplan tech-stack:*)",
|
|
211
|
+
"Bash(codebyplan docs:*)",
|
|
212
|
+
"Bash(npx codebyplan docs:*)",
|
|
217
213
|
"Bash(codebyplan eslint:*)",
|
|
218
214
|
"Bash(npx codebyplan eslint:*)",
|
|
219
215
|
"Bash(codebyplan lsp:*)",
|
|
@@ -228,6 +224,8 @@
|
|
|
228
224
|
"Bash(npx codebyplan checkpoint:*)",
|
|
229
225
|
"Bash(codebyplan task:*)",
|
|
230
226
|
"Bash(npx codebyplan task:*)",
|
|
227
|
+
"Bash(codebyplan standalone-task:*)",
|
|
228
|
+
"Bash(npx codebyplan standalone-task:*)",
|
|
231
229
|
"Bash(codebyplan session:*)",
|
|
232
230
|
"Bash(npx codebyplan session:*)",
|
|
233
231
|
"Bash(codebyplan help:*)",
|