codebyplan 1.13.52 → 1.13.54
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 +3226 -897
- 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 +10 -2
- package/templates/agents/cbp-stripe-agent.md +2 -2
- package/templates/agents/cbp-testing-qa-agent.md +34 -20
- 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 +104 -0
- package/templates/github-workflows/publish.yml +8 -27
- package/templates/github-workflows/release-desktop.yml +215 -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 +15 -11
- 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 +11 -3
- package/templates/skills/cbp-checkpoint-create/SKILL.md +16 -1
- package/templates/skills/cbp-checkpoint-end/SKILL.md +5 -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-setup-cd/SKILL.md +291 -0
- package/templates/skills/cbp-setup-cd/reference/github-actions-cd.md +231 -0
- package/templates/skills/cbp-setup-ci/SKILL.md +175 -0
- package/templates/skills/cbp-setup-ci/reference/github-actions.md +100 -0
- package/templates/skills/cbp-ship/SKILL.md +21 -0
- 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 +16 -7
- 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 -132
- 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 -277
|
@@ -44,9 +44,9 @@ Given the parse from Step 0.5:
|
|
|
44
44
|
| `{chk}` | Scan `.codebyplan/state/checkpoints/*.json` for `number === {chk}` (local-first; if missing/stale run `npx codebyplan sync` once; break-glass: MCP `get_checkpoints`). |
|
|
45
45
|
| _(empty)_ | Read `.codebyplan/state/session/current.json` (with worktree_id from `npx codebyplan resolve-worktree`) to find the active checkpoint (fallback: MCP `get_current_task`). If no active checkpoint, scan local state for `pending` checkpoints (fallback: MCP `get_checkpoints` filtered by `pending`). |
|
|
46
46
|
|
|
47
|
-
### Step 1.5: Detect Entry Context (from `/cbp-
|
|
47
|
+
### Step 1.5: Detect Entry Context (from `/cbp-finalize` expand path)
|
|
48
48
|
|
|
49
|
-
When invoked with a preamble naming `Triggered from /cbp-
|
|
49
|
+
When invoked with a preamble naming `Triggered from /cbp-finalize with intent: expand`, the user just completed the last task in the checkpoint and chose Option B "Expand checkpoint with more tasks" per `task-complete/reference/checkpoint-done-branching.md`.
|
|
50
50
|
|
|
51
51
|
In that case, lead with explicit guidance:
|
|
52
52
|
|
|
@@ -111,4 +111,4 @@ Otherwise, no follow-up directive — the user is back in control.
|
|
|
111
111
|
|
|
112
112
|
- **Reads**: `.codebyplan/state/session/current.json`, `checkpoints/<id>.json` (local-first; `npx codebyplan sync` if stale; break-glass: MCP `get_current_task`, `get_checkpoints`)
|
|
113
113
|
- **Writes**: `codebyplan checkpoint update --id <id> [--field value ...]` (CLI write-through; break-glass: MCP `update_checkpoint`)
|
|
114
|
-
- **Triggered by**: User directly, OR `/cbp-
|
|
114
|
+
- **Triggered by**: User directly, OR `/cbp-finalize` Step 9c (expand path) — see `task-complete/reference/checkpoint-done-branching.md`
|
|
@@ -14,7 +14,7 @@ handoff file so a stale snapshot never misleads a future session.
|
|
|
14
14
|
## When Used
|
|
15
15
|
|
|
16
16
|
- After running `/clear` following a `/cbp-clear-prep` capture
|
|
17
|
-
- The user is ready to re-run the heavy skill (cbp-round-
|
|
17
|
+
- The user is ready to re-run the heavy skill (cbp-round-build, cbp-verify,
|
|
18
18
|
cbp-standalone-task-testing, cbp-checkpoint-check, cbp-checkpoint-end) that was denied
|
|
19
19
|
|
|
20
20
|
## Instructions
|
|
@@ -62,7 +62,7 @@ so even if the skill fails the handoff is gone and the user starts fresh next ti
|
|
|
62
62
|
|
|
63
63
|
Invoke the skill from `next_action` via the Skill tool, passing any recorded arguments.
|
|
64
64
|
|
|
65
|
-
Example: if `next_action` is `/cbp-round-
|
|
65
|
+
Example: if `next_action` is `/cbp-round-build 217-2-1`, invoke `Skill(cbp-round-build)`
|
|
66
66
|
with args `217-2-1`.
|
|
67
67
|
|
|
68
68
|
If the context window is STILL above threshold after `/clear` (unusual — compact may help),
|
|
@@ -9,7 +9,7 @@ effort: xhigh
|
|
|
9
9
|
# cbp-clear-prep
|
|
10
10
|
|
|
11
11
|
Capture a handoff snapshot before clearing context. Invoked when the `cbp-skill-context-guard`
|
|
12
|
-
PreToolUse hook denies a heavy skill (cbp-round-
|
|
12
|
+
PreToolUse hook denies a heavy skill (cbp-round-build, cbp-verify,
|
|
13
13
|
cbp-standalone-task-testing, cbp-checkpoint-check, cbp-checkpoint-end) because the context
|
|
14
14
|
window exceeds the configured threshold.
|
|
15
15
|
|
|
@@ -24,7 +24,7 @@ window exceeds the configured threshold.
|
|
|
24
24
|
### Step 1 — Identify the blocked skill
|
|
25
25
|
|
|
26
26
|
Check `$ARGUMENTS` first. If empty, identify the blocked skill from the recent guard deny message
|
|
27
|
-
in context — it will be one of: `cbp-round-
|
|
27
|
+
in context — it will be one of: `cbp-round-build`, `cbp-verify`,
|
|
28
28
|
`cbp-standalone-task-testing`, `cbp-checkpoint-check`, `cbp-checkpoint-end`.
|
|
29
29
|
|
|
30
30
|
### Step 2 — Resolve active task and round (local-first)
|
|
@@ -43,7 +43,7 @@ Capture: `checkpoint_id`, `checkpoint_number`, `task_id`, `task_number`, `round_
|
|
|
43
43
|
|
|
44
44
|
From context, determine:
|
|
45
45
|
- The exact skill the user was trying to invoke (blocked skill from Step 1)
|
|
46
|
-
- Any arguments it was called with (e.g. `cbp-round-
|
|
46
|
+
- Any arguments it was called with (e.g. `cbp-round-build` args: `217-2-1`)
|
|
47
47
|
- Any relevant in-flight state (round goal, step in progress, pending decisions)
|
|
48
48
|
|
|
49
49
|
### Step 4 — Write the handoff file
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: cbp-
|
|
3
|
-
description:
|
|
2
|
+
name: cbp-finalize
|
|
3
|
+
description: Finalize and complete the current task — commit, merge main, push, complete
|
|
4
4
|
argument-hint: [chk-task]
|
|
5
5
|
triggers: [cbp-task-start, cbp-checkpoint-check]
|
|
6
6
|
effort: xhigh
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
#
|
|
9
|
+
# Finalize Command
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Finalize and complete the current task. Auto-triggered by `/cbp-verify` (scope=task) once it writes a `READY` verdict. Can also be run manually.
|
|
12
12
|
|
|
13
|
-
This skill is gated by an `ask`-tier `Skill(cbp-
|
|
13
|
+
This skill is gated by an `ask`-tier `Skill(cbp-finalize)` permission rule in `settings.json`. **The permission prompt IS the user confirmation** — there is NO AskUserQuestion inside this skill. A declined permission is a clean no-op (nothing committed, merged, pushed, or completed).
|
|
14
14
|
|
|
15
15
|
## Instructions
|
|
16
16
|
|
|
17
17
|
### Step 1: Parse `$ARGUMENTS`
|
|
18
18
|
|
|
19
|
-
Parse the argument using the canonical chk-task-round notation (see `cbp-round-
|
|
19
|
+
Parse the argument using the canonical chk-task-round notation (see `cbp-round-plan` Step 0 "CHK / TASK / ROUND Identifier Notation Vocabulary"):
|
|
20
20
|
|
|
21
21
|
| Shape | Regex | Resolves to |
|
|
22
22
|
|-------|-------|-------------|
|
|
@@ -27,23 +27,23 @@ Parse the argument using the canonical chk-task-round notation (see `cbp-round-s
|
|
|
27
27
|
Anything else is malformed — surface this error and stop:
|
|
28
28
|
|
|
29
29
|
```
|
|
30
|
-
|
|
30
|
+
finalize: invalid argument `{value}`. Expected:
|
|
31
31
|
108-1 → CHK-108 TASK-1 (checkpoint-bound)
|
|
32
32
|
(empty) → active in-progress task
|
|
33
33
|
|
|
34
34
|
For standalone tasks, use `/cbp-standalone-task-complete {N}`.
|
|
35
|
-
For a specific round, use `/cbp-round-
|
|
35
|
+
For a specific round, use `/cbp-round-plan 108-1-2`.
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
Error cases: `108-1-2` (that is round-
|
|
38
|
+
Error cases: `108-1-2` (that is round-plan's shape), `abc`, `108-`, `-1`, `108--1`, anything with whitespace or non-numeric characters.
|
|
39
39
|
|
|
40
40
|
#### Worked examples
|
|
41
41
|
|
|
42
|
-
- `
|
|
43
|
-
- `
|
|
44
|
-
- `
|
|
45
|
-
- `
|
|
46
|
-
- `
|
|
42
|
+
- `finalize 108-1` → CHK-108 TASK-1
|
|
43
|
+
- `finalize` (no arg) → active in-progress task via `get_current_task`
|
|
44
|
+
- `finalize 45` → error: "Use /cbp-standalone-task-complete 45 instead — bare numbers no longer route to standalone tasks."
|
|
45
|
+
- `finalize 108-1-2` → error: "use `/cbp-round-plan 108-1-2`"
|
|
46
|
+
- `finalize abc` → error: malformed
|
|
47
47
|
|
|
48
48
|
### Step 1.5: Get Current Task
|
|
49
49
|
|
|
@@ -65,28 +65,24 @@ If any round is `in_progress`:
|
|
|
65
65
|
```
|
|
66
66
|
## Cannot Complete Task
|
|
67
67
|
|
|
68
|
-
TASK-[N] has an active round (Round [N]). Run `/cbp-round-
|
|
68
|
+
TASK-[N] has an active round (Round [N]). Run `/cbp-round-complete` to finish it.
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
Stop here.
|
|
72
72
|
|
|
73
|
-
Verify at least one round has `
|
|
73
|
+
Verify at least one round has a `verify_manifest` in its context (the durable record `/cbp-verify` writes — gates + execution proof). If not:
|
|
74
74
|
|
|
75
75
|
```
|
|
76
76
|
## Cannot Complete Task
|
|
77
77
|
|
|
78
|
-
No
|
|
78
|
+
No /cbp-verify run found on any round. Run `/cbp-round-plan` to execute a verified round.
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
Stop here.
|
|
82
82
|
|
|
83
|
-
### Step 2.5: Verify `/cbp-
|
|
83
|
+
### Step 2.5: Verify `/cbp-verify` (scope=task) Has Run READY
|
|
84
84
|
|
|
85
|
-
`task.context.
|
|
86
|
-
|
|
87
|
-
### Step 2.6: Verify `/cbp-task-testing` Has Run
|
|
88
|
-
|
|
89
|
-
`task.context.task_testing_output` must exist with `all_passed: true`. If not, surface "Run `/cbp-task-testing` first" and stop.
|
|
85
|
+
`task.context.verify_verdict` must exist and have `verdict: 'READY'` (written by `/cbp-verify` Phase 6 when it runs at task scope — whole-repo `codebyplan check --scope task`, holistic `cbp-verify-reviewer`, and the single batched human walkthrough all passed). If absent or not `READY`, surface "Run `/cbp-verify` first" and stop.
|
|
90
86
|
|
|
91
87
|
### Step 3: Verify QA and File Approval
|
|
92
88
|
|
|
@@ -95,7 +91,7 @@ Load `task.qa` and `task.files_changed`:
|
|
|
95
91
|
1. **QA**: count items by status (pass / fail / pending / skipped) across all types.
|
|
96
92
|
2. **Files**: list any file with `user_approved === false`.
|
|
97
93
|
|
|
98
|
-
If any QA item is `fail`/`pending` or any file is unapproved, **surface the warnings in the output and continue** — record them for the Step 9 summary. There is NO confirmation AskUserQuestion here: `Skill(cbp-
|
|
94
|
+
If any QA item is `fail`/`pending` or any file is unapproved, **surface the warnings in the output and continue** — record them for the Step 9 summary. There is NO confirmation AskUserQuestion here: `Skill(cbp-finalize)` is `ask`-tier, so the harness permission prompt that gated this skill IS the user's confirmation to complete. The hard gates in Steps 2–2.5 (all rounds completed, ≥1 round has a `verify_manifest`, `verify_verdict` READY) already block completion when prerequisites are unmet; these QA / file-approval items are warnings, not blockers.
|
|
99
95
|
|
|
100
96
|
### Step 4: Aggregate Files Changed
|
|
101
97
|
|
|
@@ -113,10 +109,10 @@ Otherwise: invoke `/cbp-git-commit` to stage approved files and create the commi
|
|
|
113
109
|
|
|
114
110
|
### Step 5.5: Merge Production Branch (mandatory)
|
|
115
111
|
|
|
116
|
-
Now that task work is committed, ensure the feat branch is current with the latest production (main) work. Running the merge AFTER the commit means `/cbp-merge-main` resolves conflicts against committed work on a clean tree — no dirty-tree interleave, no Step-0 dirty-tree prompt for the task files. This still prevents shipping a stale PR and surfaces conflicts at
|
|
112
|
+
Now that task work is committed, ensure the feat branch is current with the latest production (main) work. Running the merge AFTER the commit means `/cbp-merge-main` resolves conflicts against committed work on a clean tree — no dirty-tree interleave, no Step-0 dirty-tree prompt for the task files. This still prevents shipping a stale PR and surfaces conflicts at finalize time rather than at PR review.
|
|
117
113
|
|
|
118
114
|
1. Trigger `/cbp-merge-main`.
|
|
119
|
-
2. If the skill exits with failure (offline, unresolved conflicts, user-aborted): surface the failure and STOP — do NOT proceed to Step 5.7 (push) or Step 7 (complete). The task commit from Step 5 persists; the user resolves and re-invokes `/cbp-
|
|
115
|
+
2. If the skill exits with failure (offline, unresolved conflicts, user-aborted): surface the failure and STOP — do NOT proceed to Step 5.7 (push) or Step 7 (complete). The task commit from Step 5 persists; the user resolves and re-invokes `/cbp-finalize`, which re-runs the merge on the now-clean tree.
|
|
120
116
|
3. If the skill exits with QA warnings the user chose to commit-as-is: continue to Step 5.7; surface a soft warning in the Step 9 output (`⚠ Merged with QA failures pending fix in follow-up`).
|
|
121
117
|
4. On clean success: continue to Step 5.7.
|
|
122
118
|
|
|
@@ -190,9 +186,9 @@ direct you to run `/cbp-clear-prep` first; otherwise checkpoint-check starts on
|
|
|
190
186
|
|
|
191
187
|
## Integration
|
|
192
188
|
|
|
193
|
-
- **Triggered by**: `/cbp-
|
|
194
|
-
- **Chain**: `/cbp-
|
|
195
|
-
- **Reads**: `.codebyplan/state/checkpoints/*.json`, `checkpoints/<id>/tasks/*.json`, `checkpoints/<id>/tasks/<id>/rounds/*.json`, `todos.json` (local-first; `npx codebyplan sync` on miss; MCP `get_current_task`/`get_rounds`/`get_tasks` break-glass)
|
|
189
|
+
- **Triggered by**: `/cbp-verify` (auto, scope=task, when it writes `verify_verdict.verdict === 'READY'`)
|
|
190
|
+
- **Chain**: `/cbp-verify` (scope=task READY) → `/cbp-finalize`
|
|
191
|
+
- **Reads**: `.codebyplan/state/checkpoints/*.json`, `checkpoints/<id>/tasks/*.json`, `checkpoints/<id>/tasks/<id>/rounds/*.json`, `todos.json` (local-first; `npx codebyplan sync` on miss; MCP `get_current_task`/`get_rounds`/`get_tasks` break-glass) — including each round's `verify_manifest` and `task.context.verify_verdict`
|
|
196
192
|
- **Writes**: `codebyplan task update` for `files_changed` (CLI write-through; MCP `update_task` break-glass); MCP `complete_task` for task completion (kept MCP — CLI cannot forward `caller_worktree_id`)
|
|
197
193
|
- **Uses skills (inline, no sub-agent)**: `cleanup` (if deletions), `migration` (if exports renamed)
|
|
198
194
|
- **Triggers**: Same-context transitions auto-trigger via the Skill tool (next task in checkpoint → `cbp-task-start {N}`, `allow`-tier, fires silently). Checkpoint-done → auto-triggers `cbp-checkpoint-check` via Skill tool (`ask`-tier, permission prompt IS the human gate). No-task-anywhere fallback → directive `Next: Run /clear, then /cbp-session-end.`
|
package/templates/skills/{cbp-task-complete → cbp-finalize}/reference/checkpoint-done-branching.md
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Checkpoint-Done Auto-Trigger in `/cbp-
|
|
1
|
+
# Checkpoint-Done Auto-Trigger in `/cbp-finalize` Step 9
|
|
2
2
|
|
|
3
3
|
When the just-completed task was the LAST pending task in its checkpoint (every sibling task has `status === 'completed'`), Step 9c auto-triggers `cbp-checkpoint-check` via the Skill tool — no routing menu, no manual `/clear` directive.
|
|
4
4
|
|
|
@@ -133,7 +133,7 @@ If any check fails, fix before proceeding to Step 3.
|
|
|
133
133
|
|
|
134
134
|
## Output back to the round-executor
|
|
135
135
|
|
|
136
|
-
After Phase 6, the executor proceeds to Step 3 with the brand commitment + stack reference + direction in working memory. Round-executor records `frontend_design_loaded: { stack, direction, tokens_path }` in `round.context` so `frontend-ui` (Step 3.8) and `cbp-
|
|
136
|
+
After Phase 6, the executor proceeds to Step 3 with the brand commitment + stack reference + direction in working memory. Round-executor records `frontend_design_loaded: { stack, direction, tokens_path }` in `round.context` so `frontend-ui` (Step 3.8) and `cbp-verify-reviewer` can verify the commitment was honoured.
|
|
137
137
|
|
|
138
138
|
## Integration
|
|
139
139
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cbp-frontend-ui
|
|
3
|
-
description: Visual quality self-review pass invoked twice per round — once by round-executor Step 3.8 (phase 'style_only', no screenshots) for token/spacing/typography/color/cohesion, once by /cbp-round-
|
|
3
|
+
description: Visual quality self-review pass invoked twice per round — once by round-executor Step 3.8 (phase 'style_only', no screenshots) for token/spacing/typography/color/cohesion, once by /cbp-round-build Step 5b (phase 'screenshot_review', with e2e screenshots) for rendered-output review and baseline regressions. Default phase 'full' runs everything for back-compat.
|
|
4
4
|
effort: xhigh
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ effort: xhigh
|
|
|
9
9
|
Invoked twice per round in non-`claude_only` profiles:
|
|
10
10
|
|
|
11
11
|
1. `round-executor` Step 3.8 — `phase: 'style_only'`, no e2e screenshots. Reviews token/spacing/typography/color/cohesion against the just-written code.
|
|
12
|
-
2. `/cbp-round-
|
|
12
|
+
2. `/cbp-round-build` Step 5b — `phase: 'screenshot_review'`, with screenshots from the `cbp-e2e-*` specialists. Reviews rendered output and detects baseline regressions.
|
|
13
13
|
|
|
14
14
|
Default `phase: 'full'` runs everything (back-compat for any caller not yet migrated). Inline counterpart of the up-front `frontend-design` skill — `frontend-design` decides direction before code; `frontend-ui` reviews and polishes after code.
|
|
15
15
|
|
|
@@ -35,7 +35,7 @@ input:
|
|
|
35
35
|
context:
|
|
36
36
|
checkpoint_goal: string
|
|
37
37
|
round_requirements: string
|
|
38
|
-
e2e_screenshots: # Required for phase 'screenshot_review' or 'full' (when present); empty / omitted for 'style_only'. Sourced from the aggregated round.context.e2e_outputs[*].screenshots (populated by the cbp-e2e-* specialists at /cbp-round-
|
|
38
|
+
e2e_screenshots: # Required for phase 'screenshot_review' or 'full' (when present); empty / omitted for 'style_only'. Sourced from the aggregated round.context.e2e_outputs[*].screenshots (populated by the cbp-e2e-* specialists at /cbp-round-build Step 5).
|
|
39
39
|
- test_name: string
|
|
40
40
|
path: string # Repo-relative or absolute path to PNG
|
|
41
41
|
page_or_screen: string
|
|
@@ -184,7 +184,7 @@ For each screenshot in `e2e_screenshots[]`:
|
|
|
184
184
|
|
|
185
185
|
Populate `screenshot_review` totals.
|
|
186
186
|
|
|
187
|
-
**Do not attempt to auto-fix `rendered_visual` or `baseline_regression` findings** — they surface as a blocking gate at `/cbp-
|
|
187
|
+
**Do not attempt to auto-fix `rendered_visual` or `baseline_regression` findings** — they surface as a blocking gate at `/cbp-verify` (round scope, accept-or-fix) and feed the fix loop, because the root cause is typically in app code/data, not in the SCSS.
|
|
188
188
|
|
|
189
189
|
### Phase 7: Aggregate Findings
|
|
190
190
|
|
|
@@ -255,9 +255,9 @@ Go beyond fixing violations — actively improve visual quality. If spacing coul
|
|
|
255
255
|
|
|
256
256
|
- **Loaded twice per round** (non-`claude_only` profiles):
|
|
257
257
|
1. `round-executor` Step 3.8 with `phase: 'style_only'` and empty `e2e_screenshots[]` — reviews the just-written code's tokens/spacing/typography/color/cohesion (mandatory when files_changed contains UI / styling files)
|
|
258
|
-
2. `/cbp-round-
|
|
258
|
+
2. `/cbp-round-build` Step 5b with `phase: 'screenshot_review'` and screenshots aggregated from `round.context.e2e_outputs[*].screenshots` — runs Phase 6.5 only (rendered-output review + baseline regressions). Skipped when no e2e ran (`claude_only` / `backend`, or no eligible framework in `.codebyplan/e2e.json`).
|
|
259
259
|
- **Also invoked by**: `/cbp-checkpoint-check` with screenshots aggregated from a whole-checkpoint e2e run
|
|
260
|
-
- **Consumes**: `e2e_screenshots[]` aggregated from `round.context.e2e_outputs[*].screenshots` (populated by the `cbp-e2e-*` specialists at `/cbp-round-
|
|
260
|
+
- **Consumes**: `e2e_screenshots[]` aggregated from `round.context.e2e_outputs[*].screenshots` (populated by the `cbp-e2e-*` specialists at `/cbp-round-build` Step 5)
|
|
261
261
|
- **Output written to**: `round.context.frontend_ui_review` — when invoked twice per round, the second invocation merges with the first
|
|
262
|
-
- **Downstream gate**: this skill emits `findings[]` only. Changed-baseline-regression findings (`is_new === false`) surface as a BLOCKING gate at `/cbp-
|
|
262
|
+
- **Downstream gate**: this skill emits `findings[]` only. Changed-baseline-regression findings (`is_new === false`) surface as a BLOCKING gate at `/cbp-verify` (round scope, never auto-accepted); new-screen baselines (`is_new === true`) are auto-committed and reviewed semantically only; rendered-visual critical findings are surfaced in the `/cbp-verify` findings presentation.
|
|
263
263
|
- **Paired with**: `frontend-design` (pre-implementation aesthetic decision), `frontend-ux` (interaction-quality self-review, also Step 3.8)
|
|
@@ -31,7 +31,7 @@ Create a commit using conventional commits format, then push to origin.
|
|
|
31
31
|
|
|
32
32
|
| Flag | File Source | Use Case |
|
|
33
33
|
|------|-------------|----------|
|
|
34
|
-
| `--task` | All staged files | `/cbp-
|
|
34
|
+
| `--task` | All staged files | `/cbp-finalize` |
|
|
35
35
|
| `--all` | All staged files | Explicit full commit |
|
|
36
36
|
| `--scope-task` | Intersection of `task.files_changed[].path` and `git diff --cached --name-only` | Foreign-staged files exist alongside task work; user wants to commit only the task's files in this commit |
|
|
37
37
|
| (none) | All staged files | Default behavior |
|
|
@@ -264,9 +264,9 @@ Stage the missing files or use --all.
|
|
|
264
264
|
## Integration
|
|
265
265
|
|
|
266
266
|
- **Reads (--scope-task)**: Local state task file `.codebyplan/state/checkpoints/*/tasks/*.json` (in_progress); on miss `npx codebyplan sync` once; MCP `get_current_task` as documented break-glass when the state dir is absent and sync fails.
|
|
267
|
-
- **Called by**: `/cbp-session-end`, `/cbp-
|
|
267
|
+
- **Called by**: `/cbp-session-end`, `/cbp-finalize`, `/cbp-checkpoint-complete`, manual
|
|
268
268
|
- **Scope usage by commands**:
|
|
269
|
-
- `/cbp-
|
|
269
|
+
- `/cbp-finalize` -> `--no-push` (commit all staged)
|
|
270
270
|
- `/cbp-checkpoint-complete` -> no scope needed
|
|
271
271
|
- `/cbp-session-end` -> `--all` or no scope (commit all staged)
|
|
272
272
|
- **Rules**: `/.claude/rules/git-workflow.md`
|
|
@@ -8,12 +8,12 @@ effort: high
|
|
|
8
8
|
|
|
9
9
|
Codifies the long-lived-branch-integration auto-memory rule (`[[feedback_long-lived-branch-integration]]`): when working on a feat branch that has diverged from main, merge main INTO the feat branch (not the reverse), resolve conflicts with the user, run a scoped QA pass, then return control to the caller — never rebase, never force-push, never push automatically.
|
|
10
10
|
|
|
11
|
-
Triggered by `/cbp-task-start` (Step 3.6, optional stale-check), `/cbp-
|
|
11
|
+
Triggered by `/cbp-task-start` (Step 3.6, optional stale-check), `/cbp-finalize` (Step 5.5, mandatory pre-push — runs after the task commit on a clean tree), and `/cbp-checkpoint-end` (Step 0, mandatory pre-shipment). User can also invoke manually at any time.
|
|
12
12
|
|
|
13
13
|
## When to Use
|
|
14
14
|
|
|
15
15
|
- **Auto-trigger (optional)**: `/cbp-task-start` Step 3.6 detects the feat branch is >10 commits behind `origin/{BASE}` OR the last fetch is >24h old.
|
|
16
|
-
- **Auto-trigger (mandatory)**: `/cbp-
|
|
16
|
+
- **Auto-trigger (mandatory)**: `/cbp-finalize` Step 5.5 — mandatory pre-push, after the task commit; runs on a clean tree to ensure the feat branch includes the latest main work before the single trailing push.
|
|
17
17
|
- **Auto-trigger (mandatory)**: `/cbp-checkpoint-end` Step 0 — always run before shipment to ensure no main drift reaches production.
|
|
18
18
|
- **Manual invocation**: user runs `/cbp-merge-main` directly when they know main has advanced and want to pull it in immediately.
|
|
19
19
|
|
|
@@ -82,7 +82,7 @@ Supabase migrations are version-keyed by their numeric filename prefix. Two file
|
|
|
82
82
|
|
|
83
83
|
- **Rename HEAD-side (Recommended when a main migration is already applied to a shared remote)** — rename the local file to a fresh, sequential timestamp that respects existing apply-order dependencies (probe `supabase migration list --db-url <preview>` if a preview branch exists, or inspect FK references in surrounding migrations). The orchestrator runs `git mv <old> <new>` itself; the rename lands in the git index and is picked up by the re-probe at step 5.
|
|
84
84
|
- **Rename main-side (manual, OUT-OF-SKILL)** — only when the main file definitely has not been applied anywhere yet AND the user has write access to `{BASE}`. This skill does NOT touch the main branch: it runs on a feat branch (Step 0 enforces this) and the Key Rules below forbid any push from this skill. The user must, in a separate terminal: `git checkout {BASE} && git mv <old> <new> && git commit -m "fix(migration): rename to resolve collision with feat/..." && git push origin {BASE}`. After that push is confirmed remote-side, re-invoke `/cbp-merge-main` — Step 1 will fetch the updated main tip and Step 1.5 will re-probe with the rename in place.
|
|
85
|
-
- **Defer to a new task in the active checkpoint** — `git merge --abort` is unnecessary because Step 2 has not started. Create a CHK-bound task per `cbp-
|
|
85
|
+
- **Defer to a new task in the active checkpoint** — `git merge --abort` is unnecessary because Step 2 has not started. Create a CHK-bound task per `cbp-verify` reference `findings-presentation.md` "Infra Issue Absorption Contract — Resolve-in-Current-Scope by Default" and STOP `/cbp-merge-main`. Resume after the task completes.
|
|
86
86
|
- **Abort merge** — STOP the skill. User decides later.
|
|
87
87
|
|
|
88
88
|
4. After any HEAD-side rename action, re-execute Step 1.5 (collisions may chain — fixing one can expose another). The CLI probes the HEAD side via `git ls-files` (so staged renames are visible), matching the documented re-probe behavior. Main-side renames require a fresh `/cbp-merge-main` invocation (the user manually fetched and re-ran per option 2 above), not an in-skill loop.
|
|
@@ -209,7 +209,7 @@ Return control to the caller. **This skill NEVER pushes** — the caller decides
|
|
|
209
209
|
|
|
210
210
|
- **Triggered by**:
|
|
211
211
|
- `/cbp-task-start` Step 3.6 (optional stale-check: >10 commits behind OR >24h fetch age)
|
|
212
|
-
- `/cbp-
|
|
212
|
+
- `/cbp-finalize` Step 5.5 (mandatory pre-push, after task commit)
|
|
213
213
|
- `/cbp-checkpoint-end` Step 0 (mandatory pre-shipment)
|
|
214
214
|
- User-invocable manually
|
|
215
215
|
- **Reads**: `.codebyplan/git.json`, local state `.codebyplan/state/checkpoints/<id>.json` + `.../tasks/<id>.json`; on miss `npx codebyplan sync` once; MCP `get_checkpoints` (active-filter multi-checkpoint scan) / MCP `get_tasks` as documented break-glass when the state dir is absent and sync fails (full cross-checkpoint scan). Git state.
|