@rayburst/cc 1.0.25 → 1.0.26

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.
@@ -5,8 +5,7 @@ allowed-tools:
5
5
  - Glob
6
6
  - Grep
7
7
  - Bash
8
- - EnterPlanMode
9
- - ExitPlanMode
8
+ - Agent
10
9
  - mcp__playwright__browser_navigate
11
10
  - mcp__playwright__browser_snapshot
12
11
  - mcp__playwright__browser_click
@@ -24,7 +23,7 @@ allowed-tools:
24
23
 
25
24
  # rb:implement — Card Implementation
26
25
 
27
- Implement a Rayburst board card: load the card and its linked features + criteria, detect conflicts with other active features, enter plan mode for approval, execute the implementation, and move the card to `validation` when done. QA validation is a separate step (`/rb:validate-card`).
26
+ Implement a Rayburst board card end-to-end: load the card + linked features, plan with a subagent, execute with a subagent, then move to `validation`. Works like `/gsd:quick` spawns a planner agent then an executor agent with no interactive plan approval pause.
28
27
 
29
28
  ## Reference Data
30
29
 
@@ -48,7 +47,7 @@ Examples:
48
47
 
49
48
  ## Workflow
50
49
 
51
- ### Step 0b: Resolve MCP Prefix
50
+ ### Step 1: Resolve MCP Prefix
52
51
 
53
52
  Read `.claude/rb-config.md` and parse the `## MCP Role Assignments` table. Find the row where `Role` is `engineer` and read its `MCP Server Name`.
54
53
 
@@ -58,25 +57,25 @@ Read `.claude/rb-config.md` and parse the `## MCP Role Assignments` table. Find
58
57
  ```
59
58
  Example: if the server name is `rayburst-rb-engineer-780086`, then `MCP_PREFIX = mcp__rayburst-rb-engineer-780086__`.
60
59
 
61
- - If `.claude/rb-config.md` does not exist or the role is `unassigned`, set `MCP_PREFIX = ""` and use the curl fallback for all MCP calls (see "MCP Curl Fallback" section below). Read the API key from `.mcp.json` under the first HTTP MCP server entry.
60
+ - If `.claude/rb-config.md` does not exist or the role is `unassigned`, set `MCP_PREFIX = ""` and use the curl fallback for all MCP calls (see "MCP Curl Fallback" section). Read the API key from `.mcp.json` under the first HTTP MCP server entry.
62
61
 
63
62
  All MCP tool calls below use `<MCP_PREFIX>` as a stand-in for the resolved prefix.
64
63
 
65
64
  ---
66
65
 
67
- ### Step 1: Verify MCP Connection
66
+ ### Step 2: Verify MCP Connection
68
67
 
69
68
  ```
70
69
  <MCP_PREFIX>ping()
71
70
  ```
72
71
 
73
- **If the MCP tool is not found** (error: "No such tool available"), the MCP server did not load in this session. Fall back to curl JSON-RPC for the entire workflow (see "MCP Curl Fallback" section).
72
+ If ping fails (tool not found), fall back to curl JSON-RPC for the entire workflow. If ping via curl also fails, stop and report the error.
74
73
 
75
- If ping via curl also fails (network error), stop and report the error.
74
+ ---
76
75
 
77
- ### Step 2: Resolve the Card
76
+ ### Step 3: Resolve the Card
78
77
 
79
- **If the input looks like a UUID** (contains hyphens in UUID format):
78
+ **If the input looks like a UUID:**
80
79
 
81
80
  ```
82
81
  <MCP_PREFIX>get_card({ cardId: "<input>" })
@@ -88,207 +87,160 @@ If ping via curl also fails (network error), stop and report the error.
88
87
  <MCP_PREFIX>list_cards({ boardId: "23578fa2-49c1-475c-b398-6d7080a676bc" })
89
88
  ```
90
89
 
91
- Find the card whose title best matches the input. If multiple close matches exist, pick the closest and note it. Then call:
90
+ Find the closest title match, then call `get_card` on it.
92
91
 
93
- ```
94
- <MCP_PREFIX>get_card({ cardId: "<resolved-id>" })
95
- ```
92
+ Collect: `card.id`, `card.title`, `card.description`, `card.status`, `card.todos[]`.
96
93
 
97
- Collect from the `get_card` response:
98
- - `card.id`, `card.title`, `card.description`, `card.status`
99
- - `card.todos[]` — implementation checklist items
100
- - `card.columnId` / current board context
101
-
102
- **If card status is not `ready` or `in-progress`**, warn the user:
94
+ **If card status is not `ready` or `in-progress`**, warn and ask:
103
95
  ```
104
- ⚠️ Card "<title>" is currently in status "<status>". Expected status is "ready".
105
- Proceed anyway? (yes / no)
96
+ ⚠️ Card "<title>" is currently "<status>". Expected "ready". Proceed anyway? (yes / no)
106
97
  ```
107
98
  Stop if the user says no.
108
99
 
109
- ### Step 3: Load Linked Features & Criteria
100
+ ---
101
+
102
+ ### Step 4: Load Linked Features & Criteria
110
103
 
111
104
  ```
112
105
  <MCP_PREFIX>list_card_features({ cardId: "<cardId>" })
113
106
  ```
114
107
 
115
- For each linked feature, call:
116
-
108
+ For each linked feature:
117
109
  ```
118
110
  <MCP_PREFIX>get_feature({ featureId: "<featureId>" })
119
111
  ```
120
112
 
121
- Build a **test plan** from all acceptance criteria across all linked features. Each criterion becomes a target behavior the implementation must satisfy.
122
-
123
- Also fetch prior validation reports for this card:
124
-
113
+ Also load prior validation reports:
125
114
  ```
126
115
  <MCP_PREFIX>list_validations({ cardId: "<cardId>" })
127
116
  ```
128
117
 
129
- Review the reports to understand which criteria have previously passed or failed. Use this context when building the test plan — criteria that have previously failed should receive extra implementation attention.
130
-
131
- If no features are linked, warn the user:
132
- ```
133
- ⚠️ No features are linked to this card. Implementation will proceed without acceptance criteria.
134
- ```
135
-
136
- #### Step 3b: Load Prior Validation Context (if card was returned from validation)
137
-
138
- If the card's current status is `in-progress` (indicating it may have been returned from validation after a QA failure), fetch prior failure context:
139
-
118
+ If the card is `in-progress` (possible QA return), also check for prior failures:
140
119
  ```
141
120
  <MCP_PREFIX>list_comments({ cardId: "<cardId>" })
142
- <MCP_PREFIX>list_validations({ cardId: "<cardId>" })
143
- ```
144
-
145
- Inspect the comments for a recent QA failure comment (look for "QA: Validation Failed" in the content). Inspect the latest validation report for criteria with status `"fail"`.
146
-
147
- If a prior failure is detected, display it prominently before proceeding:
148
-
149
121
  ```
150
- ## Prior QA Failure Detected
151
-
152
- The card was previously returned from validation with the following failures:
122
+ Look for a "QA: Validation Failed" comment and note any failing criteria — these get extra attention in the plan.
153
123
 
154
- <QA failure comment content>
155
-
156
- The implementation plan will specifically address these failing criteria.
157
- ```
124
+ If no features are linked, warn the user but continue.
158
125
 
159
- Then in Step 6 (Enter Plan Mode), prepend a **"Fixing QA Failures"** section to the plan that explicitly lists the failing criteria and what needs to change, above the general implementation approach.
160
-
161
- If no prior failure comment or validation report is found, proceed normally.
162
-
163
- ### Step 4: Move Card to `in-progress`
126
+ ---
164
127
 
165
- Before entering plan mode, move the card so the board reflects active work:
128
+ ### Step 5: Move Card to `in-progress`
166
129
 
167
130
  ```
168
131
  <MCP_PREFIX>move_card({ cardId: "<cardId>", status: "in-progress" })
169
132
  ```
170
133
 
171
- ### Step 5: Conflict Detection
172
-
173
- Before planning, detect criteria in *other* active features that this implementation might break.
174
-
175
- **Detection process:**
134
+ ---
176
135
 
177
- 1. Read the card title, description, and linked feature titles to understand the scope of change (which files, components, routes, API endpoints will be touched)
178
- 2. Use `Glob` and `Grep` to identify which source files will need to change
179
- 3. Load the full feature atlas:
180
- ```
181
- <MCP_PREFIX>list_features({ limit: 100 })
182
- ```
183
- 4. For each *other* active feature (status `active`, not linked to this card), check if its criteria describe behavior in the same files/components/routes the implementation will touch
184
- 5. Assess risk level: HIGH if the same component/route is directly modified, MEDIUM if a shared utility is changed, LOW if only indirect overlap
136
+ ### Step 6: Spawn Planner Agent
185
137
 
186
- **If conflicts are found**, STOP and prompt the user before proceeding:
138
+ Spawn a `Plan` subagent to design the implementation. Pass it all the card context you've collected (title, description, todos, criteria, prior failures if any). The planner writes the plan as output — it does NOT write files.
187
139
 
188
140
  ```
189
- ⚠️ Conflict detected before planning.
141
+ Agent(
142
+ subagent_type="Plan",
143
+ prompt="
144
+ You are planning the implementation of a Rayburst board card.
190
145
 
191
- Implementing "<card title>" will modify:
192
- - <file or component>
193
- - <file or component>
146
+ ## Card
147
+ Title: <card title>
148
+ Description: <card description>
149
+ Status: in-progress
150
+ Card ID: <cardId>
194
151
 
195
- The following criteria from other features may be affected:
196
- - Feature: "<other feature title>"
197
- Criterion: "<criterion description>" (ID: <full-uuid>)
198
- Risk: <why this implementation could break it>
152
+ ## Acceptance Criteria
153
+ <list all criteria from linked features, with criterionId and Given/When/Then description>
199
154
 
200
- Options:
201
- 1. Proceed anyway (I'll accept the regression risk)
202
- 2. Adjust the plan to preserve these criteria
203
- 3. Cancel
155
+ ## Todo List (implement in this order)
156
+ <list card todos in order>
204
157
 
205
- Please reply with 1, 2, or 3.
206
- ```
158
+ ## Prior QA Failures (if any)
159
+ <list any criteria that previously failed — these must be fixed>
207
160
 
208
- - **Option 1 (Proceed)**: Note the at-risk criteria in the plan, continue to Step 6
209
- - **Option 2 (Adjust)**: Include criteria preservation in the plan requirements, continue to Step 6
210
- - **Option 3 (Cancel)**: Move the card back to `ready`:
211
- ```
212
- <MCP_PREFIX>move_card({ cardId: "<cardId>", status: "ready" })
213
- ```
214
- Then stop.
161
+ ## Codebase Context
162
+ App URL: http://www.rayburst.app
163
+ Frontend: rayburst/ (React, TanStack Router, Tailwind v4)
164
+ Backend: rayburst-api/ (Hono, Drizzle ORM, PostgreSQL)
215
165
 
216
- If no conflicts are found, proceed directly to Step 6.
166
+ ## Your Task
167
+ Produce a complete implementation plan:
168
+ 1. List every file to create or modify (exact paths)
169
+ 2. Describe the approach for each acceptance criterion
170
+ 3. Cover any DB migrations, API changes, env vars needed
171
+ 4. Note edge cases and error handling
172
+ 5. If prior QA failures exist, add a 'Fixing QA Failures' section at the top
217
173
 
218
- ### Step 6: Enter Plan Mode
219
-
220
- Enter plan mode (`EnterPlanMode`) to design the full implementation approach.
174
+ Output the plan as structured markdown. Be specific — the executor will follow this plan without asking questions.
175
+ ",
176
+ description="Plan: <card title>"
177
+ )
178
+ ```
221
179
 
222
- The plan must cover:
223
- - Files to create or modify (with exact paths)
224
- - Implementation approach for each acceptance criterion from the test plan
225
- - Any database migrations, API changes, or environment variable additions needed
226
- - Edge cases and error handling
227
- - How at-risk criteria from Step 5 (if any) will be preserved
180
+ Store the plan output as `$PLAN`.
228
181
 
229
- The plan is presented to the user for approval before any code is written. Use `AskUserQuestion` in plan mode if architectural choices need clarification before finalizing.
182
+ ---
230
183
 
231
- ### Step 7: Write Plan as Card Comment
184
+ ### Step 7: Post Plan as Card Comment
232
185
 
233
- After the user approves the plan (via `ExitPlanMode`), post a concise summary to the card:
186
+ Post the plan to the card before execution starts:
234
187
 
235
188
  ```
236
189
  <MCP_PREFIX>add_comment({
237
190
  cardId: "<cardId>",
238
- content: "## Implementation Plan\n\n<plan summary in 2-3 sentences>\n\n### Files to Modify\n- <file path>\n- <file path>\n\n### Approach\n<prose description of the approach>\n\n### Acceptance Criteria Coverage\n- Criterion: <description> <how it will be satisfied>\n- Criterion: <description> — <how it will be satisfied>"
191
+ content: "## Implementation Plan\n\n<$PLAN summary 2-3 sentences>\n\n### Files to Modify\n- <file>\n\n### Approach\n<prose>\n\n### Criteria Coverage\n- <criterion>: <how satisfied>"
239
192
  })
240
193
  ```
241
194
 
242
- Keep the comment under 5000 characters. Use plain markdown prose — no raw code snippets or code fences with actual code (describe the approach, don't paste it).
243
-
244
- ### Step 8: Execute Implementation
195
+ Keep under 5000 characters. Describe the approach — no raw code blocks.
245
196
 
246
- Switch to execute mode. Work through the implementation:
247
-
248
- 1. **Work the todo list in order** — use `list_card_todos` to get the ordered checklist, implement each item before moving to the next
249
- 2. **Make atomic changes** — one logical unit at a time (e.g., backend schema first, then service, then routes, then frontend)
250
- 3. **Run tests after significant changes**:
251
- ```bash
252
- cd rayburst && npm run test -- <relevant-test-file>
253
- cd rayburst-api && npm run type-check
254
- ```
255
- 4. **Run lint/type check before moving on**:
256
- ```bash
257
- cd rayburst && npm run check
258
- cd rayburst-api && npm run check
259
- ```
197
+ ---
260
198
 
261
- **At-risk criteria preservation**: If Step 5 flagged criteria from other features, verify after each relevant change that the behavior described in those criteria is still correct.
199
+ ### Step 8: Spawn Executor Agent
262
200
 
263
- ### Step 9: Verify Criteria
201
+ Spawn a `general-purpose` subagent to execute the plan. Pass it the full plan and all card context.
264
202
 
265
- After implementation is complete, do a self-check pass for each acceptance criterion:
203
+ ```
204
+ Agent(
205
+ subagent_type="general-purpose",
206
+ prompt="
207
+ You are implementing a Rayburst board card. Execute the plan below completely. Do not ask questions — make decisions and write the code.
266
208
 
267
- For each criterion in the test plan:
268
- - Does the implemented code satisfy the criterion's described behavior?
269
- - Are there relevant tests that cover this behavior? If yes, do they pass?
270
- - Use `Grep` to confirm the key logic is in place
209
+ ## Card
210
+ Title: <card title>
211
+ Card ID: <cardId>
212
+ MCP Prefix: <MCP_PREFIX>
271
213
 
272
- If any criterion is clearly not satisfied, loop back to Step 8 and fix it before continuing. Do not proceed to Step 10 with known gaps.
214
+ ## Implementation Plan
215
+ <full $PLAN>
273
216
 
274
- ### Step 10: Move Card to `validation` and Print Summary
217
+ ## Acceptance Criteria (verify each before finishing)
218
+ <list all criteria with criterionId>
275
219
 
276
- Move the card to `validation` status:
220
+ ## Todo List (work in this order)
221
+ <list card todos>
277
222
 
278
- ```
279
- <MCP_PREFIX>move_card({ cardId: "<cardId>", status: "validation" })
223
+ ## Execution Rules
224
+ - Work through todos in order
225
+ - Make atomic changes (backend schema → service → routes → frontend)
226
+ - After backend changes: run `cd rayburst-api && npm run type-check`
227
+ - After frontend changes: run `cd rayburst && npx biome check <changed files>`
228
+ - After implementation: do a self-check — does each criterion have code that satisfies it?
229
+ - When all todos are complete and criteria are satisfied, call:
230
+ <MCP_PREFIX>move_card({ cardId: '<cardId>', status: 'validation' })
231
+ - Then post a summary comment:
232
+ <MCP_PREFIX>add_comment({ cardId: '<cardId>', content: '## Implementation Complete\n\n### What was built\n<summary>\n\n### Files changed\n- <file>\n\n### Criteria coverage\n- <criterion>: satisfied via <explanation>' })
233
+ - Return a completion message listing files changed and criteria satisfied.
234
+ ",
235
+ description="Implement: <card title>"
236
+ )
280
237
  ```
281
238
 
282
- Post a brief implementation summary comment:
239
+ ---
283
240
 
284
- ```
285
- <MCP_PREFIX>add_comment({
286
- cardId: "<cardId>",
287
- content: "## Implementation Complete\n\nReady for QA validation.\n\n### What was built\n<brief prose summary of what was implemented>\n\n### Files changed\n- <file path>\n- <file path>\n\n### Criteria coverage\n- <criterion description>: satisfied via <brief explanation>"
288
- })
289
- ```
241
+ ### Step 9: Print Summary
290
242
 
291
- Then print:
243
+ After the executor returns, print:
292
244
 
293
245
  ```
294
246
  ## Implementation Complete: <Card Title>
@@ -299,7 +251,6 @@ Then print:
299
251
 
300
252
  ### Files Changed
301
253
  - <file path>
302
- - <file path>
303
254
 
304
255
  Run `/rb:validate-card <cardId>` to run QA validation.
305
256
  ```
@@ -308,9 +259,16 @@ Run `/rb:validate-card <cardId>` to run QA validation.
308
259
 
309
260
  ## MCP Curl Fallback
310
261
 
311
- When MCP tools are unavailable, use this curl pattern for all operations. Read the API key from `.mcp.json` under the server assigned to the `engineer` role (or the first HTTP server entry if config is missing).
262
+ When MCP tools are unavailable, use curl JSON-RPC. Read the API key from `.mcp.json` under the server assigned to the `engineer` role (or the first HTTP server entry).
312
263
 
313
264
  ```bash
265
+ # Ping
266
+ curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
267
+ -H "Authorization: Bearer <KEY>" \
268
+ -H "Content-Type: application/json" \
269
+ -H "Accept: application/json, text/event-stream" \
270
+ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ping","arguments":{}}}'
271
+
314
272
  # Get card
315
273
  curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
316
274
  -H "Authorization: Bearer <KEY>" \
@@ -331,34 +289,6 @@ curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
331
289
  -H "Content-Type: application/json" \
332
290
  -H "Accept: application/json, text/event-stream" \
333
291
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"add_comment","arguments":{"cardId":"<cardId>","content":"<comment>"}}}'
334
-
335
- # List comments (used in Step 3b to detect prior QA failures)
336
- curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
337
- -H "Authorization: Bearer <KEY>" \
338
- -H "Content-Type: application/json" \
339
- -H "Accept: application/json, text/event-stream" \
340
- -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_comments","arguments":{"cardId":"<cardId>"}}}'
341
-
342
- # List validations (used in Step 3b to identify failing criteria)
343
- curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
344
- -H "Authorization: Bearer <KEY>" \
345
- -H "Content-Type: application/json" \
346
- -H "Accept: application/json, text/event-stream" \
347
- -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_validations","arguments":{"cardId":"<cardId>"}}}'
348
-
349
- # Submit validation report (Steps 13)
350
- curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
351
- -H "Authorization: Bearer <KEY>" \
352
- -H "Content-Type: application/json" \
353
- -H "Accept: application/json, text/event-stream" \
354
- -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"submit_validation","arguments":{"cardId":"<cardId>","results":[{"criterionId":"<id>","status":"pass","comment":"<evidence>"}],"overallComment":"N of total criteria passing."}}}'
355
-
356
- # Move card to done (Step 14 — only after submit_validation passes)
357
- curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
358
- -H "Authorization: Bearer <KEY>" \
359
- -H "Content-Type: application/json" \
360
- -H "Accept: application/json, text/event-stream" \
361
- -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"move_card","arguments":{"cardId":"<cardId>","status":"done"}}}'
362
292
  ```
363
293
 
364
294
  Parse the `data:` line from the SSE response to extract the JSON result.
@@ -369,15 +299,9 @@ Parse the `data:` line from the SSE response to extract the JSON result.
369
299
 
370
300
  - **Full UUIDs only** — short hashes return NOT_FOUND
371
301
  - **Rate limit: 60 req/min** — batch MCP calls in groups of 4-5
372
- - **Move card to `in-progress` before plan mode** (Step 4) board must reflect active work
302
+ - **No interactive plan approval** planner agent produces the plan, executor runs it immediately
303
+ - **Move card to `in-progress` before planning** (Step 5) — board must reflect active work
373
304
  - **Post plan as comment before executing** (Step 7) — creates a paper trail
374
- - **Move card to `validation` before QA** (Step 10) required before running browser tests
375
- - **Always run QA validation after implementation** (Steps 11–13) — never stop at `validation` status
376
- - **Only move card to `done` after `submit_validation` passes** (Step 14) — the MCP gate is mandatory
377
- - **On QA failure: post comment then move to `in-progress`** — never leave a failed card in `validation`
378
- - **Do NOT fix failing criteria during QA** — report them, return the card, and stop
379
- - **If conflict detection finds at-risk criteria, STOP and prompt** — do not silently proceed
380
- - **If user cancels after conflict detection, move card back to `ready`** before stopping
305
+ - **Executor moves card to `validation`** do not move it manually after spawning
381
306
  - **Implementation comments under 5000 characters** — no raw code in comment content
382
- - **Validation criterion comments under 500 characters** — plain prose only, no backticks
383
307
  - **Run `/rb:init` first** if `.claude/rb-config.md` is missing
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rayburst/cc",
3
- "version": "1.0.25",
3
+ "version": "1.0.26",
4
4
  "description": "Rayburst slash commands for Claude Code — /rb:init, /rb:plan, /rb:sync, /rb:status, /rb:validate-feature, /rb:validate-card, /rb:implement, /rb:discover",
5
5
  "bin": {
6
6
  "rayburst-cc": "bin/install.js"