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.
Files changed (92) hide show
  1. package/dist/cli.js +3226 -897
  2. package/package.json +1 -1
  3. package/templates/agents/cbp-database-agent.md +1 -1
  4. package/templates/agents/cbp-e2e-maestro.md +1 -1
  5. package/templates/agents/cbp-e2e-playwright.md +24 -16
  6. package/templates/agents/cbp-e2e-tauri.md +1 -1
  7. package/templates/agents/cbp-e2e-vscode.md +1 -1
  8. package/templates/agents/cbp-e2e-xcuitest.md +1 -1
  9. package/templates/agents/cbp-improve-claude.md +2 -2
  10. package/templates/agents/{cbp-round-executor.md → cbp-round-builder.md} +23 -23
  11. package/templates/agents/{cbp-task-planner.md → cbp-round-planner.md} +26 -25
  12. package/templates/agents/cbp-security-agent.md +10 -2
  13. package/templates/agents/cbp-stripe-agent.md +2 -2
  14. package/templates/agents/cbp-testing-qa-agent.md +34 -20
  15. package/templates/agents/cbp-verify-reviewer.md +236 -0
  16. package/templates/context/architecture-map.md +4 -4
  17. package/templates/context/mcp-docs.md +57 -11
  18. package/templates/context/testing/e2e.md +9 -9
  19. package/templates/github-workflows/ci.yml +104 -0
  20. package/templates/github-workflows/publish.yml +8 -27
  21. package/templates/github-workflows/release-desktop.yml +215 -0
  22. package/templates/hooks/cbp-skill-context-guard.sh +1 -1
  23. package/templates/hooks/cbp-test-hooks.sh +9 -9
  24. package/templates/hooks/validate-structure-lengths.sh +1 -1
  25. package/templates/hooks/validate-structure-patterns.sh +1 -1
  26. package/templates/rules/README.md +1 -2
  27. package/templates/rules/agent-claim-verification.md +1 -1
  28. package/templates/rules/context-file-loading.md +10 -10
  29. package/templates/rules/development-workflow.md +73 -0
  30. package/templates/rules/e2e-mandatory.md +8 -8
  31. package/templates/rules/execution-proof.md +70 -0
  32. package/templates/rules/model-invocation-convention.md +2 -2
  33. package/templates/rules/parallel-waves.md +11 -11
  34. package/templates/rules/spawn-failure-is-gate-failure.md +76 -0
  35. package/templates/rules/task-routing-recommendation.md +1 -1
  36. package/templates/rules/todo-backend.md +3 -3
  37. package/templates/rules/two-tier-ci.md +63 -0
  38. package/templates/settings.project.base.json +15 -11
  39. package/templates/skills/cbp-build-cc-mode/SKILL.md +1 -1
  40. package/templates/skills/cbp-build-cc-settings/reference/cbp-permission-policy.md +7 -7
  41. package/templates/skills/cbp-build-cc-skill/SKILL.md +1 -1
  42. package/templates/skills/cbp-build-cc-skill/reference/cbp-quality.md +2 -2
  43. package/templates/skills/cbp-build-cc-skill/reference/fork-eligibility.md +11 -14
  44. package/templates/skills/cbp-checkpoint-check/SKILL.md +11 -3
  45. package/templates/skills/cbp-checkpoint-create/SKILL.md +16 -1
  46. package/templates/skills/cbp-checkpoint-end/SKILL.md +5 -1
  47. package/templates/skills/cbp-checkpoint-update/SKILL.md +3 -3
  48. package/templates/skills/cbp-clear-continue/SKILL.md +2 -2
  49. package/templates/skills/cbp-clear-prep/SKILL.md +3 -3
  50. package/templates/skills/{cbp-task-complete → cbp-finalize}/SKILL.md +25 -29
  51. package/templates/skills/{cbp-task-complete → cbp-finalize}/reference/checkpoint-done-branching.md +1 -1
  52. package/templates/skills/{cbp-task-complete → cbp-finalize}/reference/next-step-heuristic.md +1 -1
  53. package/templates/skills/cbp-frontend-design/SKILL.md +1 -1
  54. package/templates/skills/cbp-frontend-ui/SKILL.md +7 -7
  55. package/templates/skills/cbp-git-commit/SKILL.md +3 -3
  56. package/templates/skills/cbp-merge-main/SKILL.md +4 -4
  57. package/templates/skills/{cbp-round-execute → cbp-round-build}/SKILL.md +93 -75
  58. package/templates/skills/cbp-round-complete/SKILL.md +15 -14
  59. package/templates/skills/cbp-round-plan/SKILL.md +344 -0
  60. package/templates/skills/cbp-session-end/SKILL.md +1 -1
  61. package/templates/skills/cbp-setup-cd/SKILL.md +291 -0
  62. package/templates/skills/cbp-setup-cd/reference/github-actions-cd.md +231 -0
  63. package/templates/skills/cbp-setup-ci/SKILL.md +175 -0
  64. package/templates/skills/cbp-setup-ci/reference/github-actions.md +100 -0
  65. package/templates/skills/cbp-ship/SKILL.md +21 -0
  66. package/templates/skills/cbp-ship-main/SKILL.md +3 -2
  67. package/templates/skills/cbp-standalone-task-check/SKILL.md +10 -9
  68. package/templates/skills/cbp-standalone-task-complete/SKILL.md +12 -13
  69. package/templates/skills/cbp-standalone-task-create/SKILL.md +16 -9
  70. package/templates/skills/cbp-standalone-task-start/SKILL.md +9 -5
  71. package/templates/skills/cbp-standalone-task-testing/SKILL.md +16 -7
  72. package/templates/skills/cbp-task-create/SKILL.md +6 -7
  73. package/templates/skills/cbp-task-start/SKILL.md +8 -8
  74. package/templates/skills/cbp-todo/SKILL.md +6 -8
  75. package/templates/skills/cbp-verify/SKILL.md +146 -0
  76. package/templates/skills/cbp-verify/reference/deterministic-gates.md +114 -0
  77. package/templates/skills/{cbp-round-end → cbp-verify}/reference/findings-presentation.md +16 -12
  78. package/templates/skills/cbp-verify/reference/round-scope.md +62 -0
  79. package/templates/skills/cbp-verify/reference/task-scope.md +71 -0
  80. package/templates/agents/cbp-improve-round.md +0 -283
  81. package/templates/agents/cbp-task-check.md +0 -217
  82. package/templates/skills/cbp-round-check/SKILL.md +0 -132
  83. package/templates/skills/cbp-round-end/SKILL.md +0 -173
  84. package/templates/skills/cbp-round-end/reference/inline-fallback.md +0 -35
  85. package/templates/skills/cbp-round-execute/reference/inline-fallback.md +0 -55
  86. package/templates/skills/cbp-round-input/SKILL.md +0 -197
  87. package/templates/skills/cbp-round-start/SKILL.md +0 -261
  88. package/templates/skills/cbp-round-update/SKILL.md +0 -120
  89. package/templates/skills/cbp-ship/templates/workflow-eas-submit.yml +0 -53
  90. package/templates/skills/cbp-ship/templates/workflow-vsce-publish.yml +0 -31
  91. package/templates/skills/cbp-task-check/SKILL.md +0 -172
  92. package/templates/skills/cbp-task-testing/SKILL.md +0 -277
@@ -0,0 +1,104 @@
1
+ # Generated by: codebyplan ci scaffold-workflow
2
+ #
3
+ # This workflow runs lint, typecheck, tests, and build on every pull request.
4
+ # It is intentionally generic and works as-is for any pnpm + Turborepo project.
5
+ #
6
+ # By design this gates on FULL-REPO GREEN: `pnpm turbo <task>` runs the task
7
+ # across every package with no `--filter`, so a shallow checkout (fetch-depth:1)
8
+ # is fine — git history is not needed for affected-package detection. Per-package
9
+ # / changed-path scoping (`scope: per_app_changed` in .codebyplan/ci.json) is
10
+ # applied by the local CodeByPlan round/testing skills, NOT by this workflow.
11
+ # Do not add turbo `--filter=[HEAD^]` here without also setting fetch-depth: 0.
12
+ #
13
+ # Two values you can adjust via `codebyplan ci scaffold-workflow`:
14
+ # --pnpm-version <v> pnpm version (current: {{PNPM_VERSION}})
15
+ # --node-version <v> Node.js version (current: {{NODE_VERSION}})
16
+ #
17
+ # Two jobs:
18
+ # ci SOFT tier (authoritative required check) — the baseline-tolerant
19
+ # inner loop: lint, typecheck, test, build across the repo.
20
+ # ci-strict HARDCORE tier (report-only) — whole-repo ABSOLUTE GREEN via
21
+ # `codebyplan check --scope merged --no-baseline`. Non-blocking for
22
+ # now; flip to a required check once the repo is absolute-green.
23
+
24
+ name: CI
25
+
26
+ on:
27
+ pull_request:
28
+
29
+ # Cancel an in-progress run when a newer commit is pushed to the same PR/ref,
30
+ # so superseded full-repo runs don't queue up and waste runner minutes.
31
+ concurrency:
32
+ group: ${{ github.workflow }}-${{ github.ref }}
33
+ cancel-in-progress: true
34
+
35
+ permissions:
36
+ contents: read
37
+
38
+ jobs:
39
+ ci:
40
+ name: Lint + typecheck + test + build
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - name: Checkout
44
+ uses: actions/checkout@v4
45
+
46
+ - name: Setup pnpm
47
+ uses: pnpm/action-setup@v4
48
+ with:
49
+ version: "{{PNPM_VERSION}}"
50
+
51
+ - name: Setup Node
52
+ uses: actions/setup-node@v4
53
+ with:
54
+ node-version: "{{NODE_VERSION}}"
55
+ cache: pnpm
56
+
57
+ - name: Install dependencies
58
+ run: pnpm install --frozen-lockfile
59
+
60
+ - name: Lint
61
+ run: pnpm turbo lint
62
+
63
+ - name: Typecheck
64
+ run: pnpm turbo typecheck
65
+
66
+ - name: Test
67
+ run: pnpm turbo test
68
+
69
+ - name: Build
70
+ run: pnpm turbo build
71
+
72
+ # ── HARDCORE strict tier (report-only) ──────────────────────────────────────
73
+ # Whole-repo ABSOLUTE GREEN: `codebyplan check --scope merged --no-baseline`
74
+ # ignores .check-baseline.json entirely, so ANY failing package (lint,
75
+ # typecheck, test) fails this job. This is the future checkpoint→main gate.
76
+ #
77
+ # report-only until apps/web baseline is burned down; flip to required after.
78
+ # `continue-on-error: true` keeps it non-blocking — the `ci` job above stays
79
+ # the authoritative required check. Do NOT wire this job as a branch-protection
80
+ # required check until the whole repo is absolute-green.
81
+ ci-strict:
82
+ name: Strict whole-repo green (report-only)
83
+ runs-on: ubuntu-latest
84
+ continue-on-error: true
85
+ steps:
86
+ - name: Checkout
87
+ uses: actions/checkout@v4
88
+
89
+ - name: Setup pnpm
90
+ uses: pnpm/action-setup@v4
91
+ with:
92
+ version: "{{PNPM_VERSION}}"
93
+
94
+ - name: Setup Node
95
+ uses: actions/setup-node@v4
96
+ with:
97
+ node-version: "{{NODE_VERSION}}"
98
+ cache: pnpm
99
+
100
+ - name: Install dependencies
101
+ run: pnpm install --frozen-lockfile
102
+
103
+ - name: Strict check (no baseline)
104
+ run: pnpm exec codebyplan check --scope merged --no-baseline
@@ -1,34 +1,16 @@
1
- # Generated by: codebyplan scaffold-publish-workflow
2
- #
3
- # This workflow publishes the codebyplan npm package on every merge to main
4
- # where the committed package.json version exceeds the version currently on npm.
5
- # It also auto-publishes prerelease versions (e.g. 1.14.0-beta.1) from feat/**
6
- # branches to a scoped dist-tag (e.g. --tag beta) — see the beta channel docs
7
- # for the full workflow. No release PR, no conventional-commit parsing — the
8
- # version committed in the feat branch is the version that ships.
9
- #
10
- # Two values a consuming repo must adjust:
11
- # 1. paths: — set to the package directory whose package.json drives versioning
12
- # (current value: 'packages/codebyplan-package/**')
13
- # 2. npm view <package-name> — replace `codebyplan` with the actual package name
14
- # in the "Check version vs published" and exact-version check steps
15
- #
16
- # Everything else (OIDC auth, pnpm 10.12.4, Node 20, build:npm → publish) is
17
- # intentionally generic and works as-is for any single-package npm publish.
18
-
19
1
  name: Publish codebyplan to npm
20
2
 
21
3
  on:
22
4
  push:
23
5
  branches:
24
6
  - main
25
- - "feat/**"
7
+ - 'feat/**'
26
8
  paths:
27
- - "packages/codebyplan-package/**"
9
+ - 'packages/codebyplan-package/**'
28
10
  workflow_dispatch:
29
11
  inputs:
30
12
  dry_run:
31
- description: "Print what would be published without actually publishing"
13
+ description: 'Print what would be published without actually publishing'
32
14
  type: boolean
33
15
  default: false
34
16
 
@@ -182,7 +164,7 @@ jobs:
182
164
  - name: Setup Node
183
165
  uses: actions/setup-node@v4
184
166
  with:
185
- node-version: 20
167
+ node-version: 22
186
168
  cache: pnpm
187
169
 
188
170
  - name: Install dependencies
@@ -210,11 +192,10 @@ jobs:
210
192
  # short-lived publish token. Requires a Trusted Publisher configured for
211
193
  # this repo + workflow on npmjs.com.
212
194
  #
213
- # NO --provenance by default: npm provenance attestation only supports
214
- # PUBLIC source repositories (the registry returns E422 "Unsupported
215
- # source repository visibility: private" otherwise). This works for both
216
- # public and private repos. If your source repo is PUBLIC and you want
217
- # supply-chain attestation, add `--provenance` to the command below.
195
+ # NO --provenance: npm provenance attestation only supports PUBLIC source
196
+ # repositories (registry returns E422 "Unsupported source repository
197
+ # visibility: private" otherwise). This repo is private, so provenance is
198
+ # omitted. Re-add `--provenance` only if the source repo becomes public.
218
199
  #
219
200
  # --tag: routes stable publishes to "latest" and prerelease publishes to
220
201
  # the prerelease id (e.g. "beta", "rc"). C1 guarantee: betas never land on
@@ -0,0 +1,215 @@
1
+ name: Release Desktop App
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - "apps/desktop/**"
9
+ workflow_dispatch: {}
10
+
11
+ permissions:
12
+ contents: write
13
+
14
+ jobs:
15
+ check-version:
16
+ name: Check if release needed
17
+ runs-on: ubuntu-latest
18
+ outputs:
19
+ should_release: ${{ steps.check.outputs.should_release }}
20
+ version: ${{ steps.check.outputs.version }}
21
+ steps:
22
+ - name: Checkout
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Check version tag
26
+ id: check
27
+ run: |
28
+ VERSION=$(jq -r '.version' apps/desktop/src-tauri/tauri.conf.json)
29
+ TAG="desktop-v${VERSION}"
30
+ echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
31
+
32
+ if git ls-remote --tags origin "refs/tags/${TAG}" | grep -q "${TAG}"; then
33
+ echo "Tag ${TAG} already exists - skipping release"
34
+ echo "should_release=false" >> "$GITHUB_OUTPUT"
35
+ else
36
+ echo "Tag ${TAG} does not exist - will release"
37
+ echo "should_release=true" >> "$GITHUB_OUTPUT"
38
+ fi
39
+
40
+ build:
41
+ needs: check-version
42
+ if: needs.check-version.outputs.should_release == 'true'
43
+ # `secrets` is not allowed in `if:` expressions — map presence to a job-level
44
+ # env (where `secrets` IS permitted) and test that in the step condition.
45
+ env:
46
+ HAS_WINDOWS_CERT: ${{ secrets.WINDOWS_CERTIFICATE != '' }}
47
+ strategy:
48
+ fail-fast: false
49
+ matrix:
50
+ include:
51
+ - platform: macos-latest
52
+ target: aarch64-apple-darwin
53
+ label: macOS (Apple Silicon)
54
+ - platform: macos-latest
55
+ target: x86_64-apple-darwin
56
+ label: macOS (Intel)
57
+ - platform: windows-latest
58
+ target: x86_64-pc-windows-msvc
59
+ label: Windows (x86_64)
60
+
61
+ name: Build ${{ matrix.label }}
62
+ runs-on: ${{ matrix.platform }}
63
+
64
+ steps:
65
+ - name: Checkout
66
+ uses: actions/checkout@v4
67
+
68
+ - name: Install Rust stable
69
+ uses: dtolnay/rust-toolchain@stable
70
+ with:
71
+ targets: ${{ matrix.target }}
72
+
73
+ - name: Install pnpm
74
+ uses: pnpm/action-setup@v4
75
+
76
+ - name: Setup Node.js
77
+ uses: actions/setup-node@v4
78
+ with:
79
+ node-version: 22
80
+ cache: pnpm
81
+
82
+ - name: Install dependencies
83
+ run: pnpm install --frozen-lockfile
84
+
85
+ - name: Write Apple API key to file
86
+ if: runner.os == 'macOS'
87
+ run: |
88
+ mkdir -p ~/private_keys
89
+ printf '%s' "$APPLE_API_KEY_CONTENT" > ~/private_keys/AuthKey.p8
90
+ env:
91
+ APPLE_API_KEY_CONTENT: ${{ secrets.APPLE_API_KEY_CONTENT }}
92
+
93
+ - name: Build desktop app
94
+ # Pinned for supply-chain safety. Review before bumping:
95
+ # https://github.com/tauri-apps/tauri-action/releases
96
+ #
97
+ # Windows leg skipped when WINDOWS_CERTIFICATE secret is absent — lets
98
+ # macOS-only notarized releases ship while the Windows EV cert is being
99
+ # procured. When the secret is present but the build fails for any other
100
+ # reason (network, tauri-action bug, etc.), the step still fails loudly.
101
+ if: ${{ runner.os != 'Windows' || env.HAS_WINDOWS_CERT == 'true' }}
102
+ uses: tauri-apps/tauri-action@84b9d35b5fc46c1e45415bdb6144030364f7ebc5 # action-v0.6.2
103
+ env:
104
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
105
+ # Tauri updater artifact signing (required for latest.json signatures on all platforms)
106
+ TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
107
+ TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
108
+ # Apple Developer signing (macOS only — empty on Windows, tauri-action ignores)
109
+ APPLE_CERTIFICATE: ${{ runner.os == 'macOS' && secrets.APPLE_CERTIFICATE || '' }}
110
+ APPLE_CERTIFICATE_PASSWORD: ${{ runner.os == 'macOS' && secrets.APPLE_CERTIFICATE_PASSWORD || '' }}
111
+ APPLE_SIGNING_IDENTITY: ${{ runner.os == 'macOS' && secrets.APPLE_SIGNING_IDENTITY || '' }}
112
+ APPLE_API_ISSUER: ${{ runner.os == 'macOS' && secrets.APPLE_API_ISSUER || '' }}
113
+ APPLE_API_KEY: ${{ runner.os == 'macOS' && secrets.APPLE_API_KEY || '' }}
114
+ APPLE_API_KEY_PATH: ${{ runner.os == 'macOS' && '~/private_keys/AuthKey.p8' || '' }}
115
+ # Windows code signing (Windows only — empty on macOS, tauri-action ignores)
116
+ WINDOWS_CERTIFICATE: ${{ runner.os == 'Windows' && secrets.WINDOWS_CERTIFICATE || '' }}
117
+ WINDOWS_CERTIFICATE_PASSWORD: ${{ runner.os == 'Windows' && secrets.WINDOWS_CERTIFICATE_PASSWORD || '' }}
118
+ with:
119
+ projectPath: apps/desktop
120
+ tauriScript: pnpm tauri
121
+ args: --target ${{ matrix.target }}
122
+ tagName: desktop-v${{ needs.check-version.outputs.version }}
123
+ releaseName: "CodeByPlan Desktop v${{ needs.check-version.outputs.version }}"
124
+ releaseBody: |
125
+ ## CodeByPlan Desktop v${{ needs.check-version.outputs.version }}
126
+
127
+ Download the appropriate installer for your platform:
128
+ - **macOS Apple Silicon** (.dmg) - For M1/M2/M3/M4 Macs
129
+ - **macOS Intel** (.dmg) - For older Intel-based Macs
130
+ - **Windows** (.msi) - For Windows 10/11 x64
131
+
132
+ ### Installation
133
+
134
+ **macOS:**
135
+ 1. Download the `.dmg` file for your Mac
136
+ 2. Open the `.dmg` and drag CodeByPlan to Applications
137
+ 3. Launch CodeByPlan from Applications
138
+
139
+ **Windows:**
140
+ 1. Download the `.msi` file
141
+ 2. Run the installer and follow the prompts
142
+ 3. Launch CodeByPlan from the Start Menu
143
+ releaseDraft: false
144
+ prerelease: false
145
+ includeUpdaterJson: true
146
+
147
+ notify:
148
+ needs: [check-version, build]
149
+ if: needs.check-version.outputs.should_release == 'true' && needs.build.result == 'success'
150
+ runs-on: ubuntu-latest
151
+ name: Register Release
152
+ steps:
153
+ - name: Checkout
154
+ uses: actions/checkout@v4
155
+
156
+ - name: Download latest.json from GitHub Release
157
+ env:
158
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
159
+ VERSION: ${{ needs.check-version.outputs.version }}
160
+ run: |
161
+ TAG="desktop-v${VERSION}"
162
+ gh release download "${TAG}" --pattern "latest.json" --dir .
163
+
164
+ - name: Post release metadata to API
165
+ env:
166
+ CBP_API_KEY: ${{ secrets.CODEBYPLAN_API_KEY }}
167
+ VERSION: ${{ needs.check-version.outputs.version }}
168
+ run: |
169
+ TAG="desktop-v${VERSION}"
170
+ REPO="${{ github.repository }}"
171
+ BASE_URL="https://github.com/${REPO}/releases/download/${TAG}"
172
+
173
+ # Read the latest.json generated by tauri-action
174
+ MANIFEST=$(cat latest.json)
175
+ echo "Manifest: ${MANIFEST}"
176
+
177
+ # Build download URLs (for website download page)
178
+ AARCH64_DMG_URL="${BASE_URL}/CodeByPlan_${VERSION}_aarch64.dmg"
179
+ X86_64_DMG_URL="${BASE_URL}/CodeByPlan_${VERSION}_x64.dmg"
180
+ WINDOWS_X86_64_MSI_URL="${BASE_URL}/CodeByPlan_${VERSION}_x64_en-US.msi"
181
+
182
+ # Extract updater data from latest.json and merge with installer URLs
183
+ PLATFORMS=$(echo "${MANIFEST}" | jq \
184
+ --arg aarch64_dmg "${AARCH64_DMG_URL}" \
185
+ --arg x86_64_dmg "${X86_64_DMG_URL}" \
186
+ --arg windows_x86_64_msi "${WINDOWS_X86_64_MSI_URL}" '
187
+ .platforms | to_entries | map(
188
+ .value += (
189
+ if .key == "darwin-aarch64" then { "dmg_url": $aarch64_dmg }
190
+ elif .key == "darwin-x86_64" then { "dmg_url": $x86_64_dmg }
191
+ elif .key == "windows-x86_64" then { "msi_url": $windows_x86_64_msi }
192
+ else {}
193
+ end
194
+ )
195
+ ) | from_entries
196
+ ')
197
+
198
+ NOTES=$(echo "${MANIFEST}" | jq -r '.notes // "CodeByPlan Desktop v'"${VERSION}"'"')
199
+ PUB_DATE=$(echo "${MANIFEST}" | jq -r '.pub_date // empty')
200
+ if [ -z "${PUB_DATE}" ]; then
201
+ PUB_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
202
+ fi
203
+
204
+ # POST to our API
205
+ curl -fL -X POST \
206
+ "https://www.codebyplan.com/api/desktop/releases" \
207
+ -H "Content-Type: application/json" \
208
+ -H "x-api-key: ${CBP_API_KEY}" \
209
+ -d "$(jq -n \
210
+ --arg version "${VERSION}" \
211
+ --arg notes "${NOTES}" \
212
+ --arg pub_date "${PUB_DATE}" \
213
+ --argjson platforms "${PLATFORMS}" \
214
+ '{version: $version, notes: $notes, pub_date: $pub_date, platforms: $platforms}'
215
+ )"
@@ -21,7 +21,7 @@ THRESHOLD="${CBP_CONTEXT_WARN_TOKENS:-200000}"
21
21
 
22
22
  # Heavy close-out allowlist (cbp-clear-prep + cbp-clear-continue deliberately excluded so
23
23
  # they always run even when context > threshold).
24
- HEAVY_SKILLS="cbp-round-execute cbp-task-testing cbp-standalone-task-testing cbp-checkpoint-check cbp-checkpoint-end"
24
+ HEAVY_SKILLS="cbp-round-build cbp-verify cbp-standalone-task-testing cbp-checkpoint-check cbp-checkpoint-end"
25
25
 
26
26
  # Cheap allowlist check before summing tokens
27
27
  IS_HEAVY=false
@@ -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-execute (heavy) → permissionDecision=deny
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-execute" \
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-execute → deny" "passed" "passed"
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-execute → deny" "passed" "failed (exit=$EXIT_CODE output=$(echo "$OUTPUT" | head -c 80))"
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-execute → empty stdout, exit 0
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-execute" \
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-execute → empty stdout" "passed" "passed"
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-execute → empty stdout" "passed" "failed (exit=$EXIT_CODE)"
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-execute" '{tool_input:{skill:$s}}')
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-start/SKILL.md) echo "600 1000"; return;;
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-start Step 0 "CHK / TASK / ROUND Identifier Notation Vocabulary" — all command refs must use /cbp-* form
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
- Nine rules are shipped:
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-executor, cbp-research); skill files are out of
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-executor` | Step 3.6 | Unit test patterns per framework |
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-execute` | Step 5 | E2E specialist dispatch routing |
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-task-planner` | Phase 1.5 | ESLint Compliance Checklist |
22
- | `context/testing/eslint.md` | `cbp-improve-round` | Phase 1.5 | Config-file compliance audit |
23
- | `context/mcp-docs.md` | `cbp-task-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-executor` | Step 3.4 | Library-specific reference — pre-write API verification via DocsByPlan MCP tools |
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-task-planner` | Phase 3 | Architecture map consultation contract — when + how to read per-module maps before finalizing scope |
27
- | `context/architecture-map.md` | `cbp-round-executor` | Step 2.4 | Architecture map consultation contract — when + how to read per-module maps before editing files |
28
- | `rules/parallel-waves.md` | `cbp-task-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) |
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-executor` 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.
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-execute` Step 5 spawns the matching specialist in parallel with
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-execute` Step 6 auto-triggers
32
- `/cbp-round-input`. Silent skips are bugs, not conveniences — this is the enforcement behind
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-task-check` (`agents/cbp-task-check.md`) refuses a READY
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-task-check` refuses a READY verdict when `e2e_gallery[]` is empty AND the round
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-task-check.md` — enforces the zero-assertion hard-fail and the empty
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-execute/SKILL.md` Step 5/6, `skills/cbp-checkpoint-check/SKILL.md` Step 5b
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.