@rayburst/cc 1.0.25 → 1.0.27
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/commands/rb/discover.md +15 -5
- package/commands/rb/implement.md +115 -215
- package/commands/rb/validate-card.md +15 -54
- package/commands/rb/validate-feature.md +15 -32
- package/package.json +1 -1
package/commands/rb/discover.md
CHANGED
|
@@ -77,11 +77,13 @@ Print a warning:
|
|
|
77
77
|
|
|
78
78
|
If a feature-atlas key is found, proceed to Step 1 using this derived prefix.
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
If no feature-atlas server is found in either `rb-config.md` or `.mcp.json`, stop immediately:
|
|
81
|
+
```
|
|
82
|
+
ERROR: rb:discover requires an MCP server assigned to the `feature-atlas` role.
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
Run /rb:init to configure MCP server role assignments.
|
|
85
|
+
The feature-atlas role must be mapped to an MCP server in .mcp.json before running discovery.
|
|
86
|
+
```
|
|
85
87
|
|
|
86
88
|
---
|
|
87
89
|
|
|
@@ -94,7 +96,15 @@ Call:
|
|
|
94
96
|
```
|
|
95
97
|
|
|
96
98
|
- **Success** → proceed with MCP tool calls
|
|
97
|
-
- **Failure** →
|
|
99
|
+
- **Failure** → stop immediately:
|
|
100
|
+
```
|
|
101
|
+
ERROR: The MCP server for the feature-atlas role is not loaded in this session.
|
|
102
|
+
|
|
103
|
+
The MCP server '<server-name>' must be available. Try:
|
|
104
|
+
1. Start a new Claude session (MCP servers load at session start)
|
|
105
|
+
2. Verify the server entry exists in .mcp.json
|
|
106
|
+
3. Re-run /rb:init to confirm role assignments
|
|
107
|
+
```
|
|
98
108
|
|
|
99
109
|
---
|
|
100
110
|
|
package/commands/rb/implement.md
CHANGED
|
@@ -5,8 +5,7 @@ allowed-tools:
|
|
|
5
5
|
- Glob
|
|
6
6
|
- Grep
|
|
7
7
|
- Bash
|
|
8
|
-
-
|
|
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
|
|
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
|
|
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,39 @@ 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`,
|
|
60
|
+
- If `.claude/rb-config.md` does not exist or the role is `unassigned`, stop immediately:
|
|
61
|
+
```
|
|
62
|
+
ERROR: rb:implement requires an MCP server assigned to the `engineer` role.
|
|
63
|
+
|
|
64
|
+
Run /rb:init to configure MCP server role assignments.
|
|
65
|
+
The engineer role must be mapped to an MCP server in .mcp.json before implementing cards.
|
|
66
|
+
```
|
|
62
67
|
|
|
63
68
|
All MCP tool calls below use `<MCP_PREFIX>` as a stand-in for the resolved prefix.
|
|
64
69
|
|
|
65
70
|
---
|
|
66
71
|
|
|
67
|
-
### Step
|
|
72
|
+
### Step 2: Verify MCP Connection
|
|
68
73
|
|
|
69
74
|
```
|
|
70
75
|
<MCP_PREFIX>ping()
|
|
71
76
|
```
|
|
72
77
|
|
|
73
|
-
|
|
78
|
+
If ping fails (tool not found or error), stop immediately:
|
|
79
|
+
```
|
|
80
|
+
ERROR: The MCP server for the engineer role is not loaded in this session.
|
|
81
|
+
|
|
82
|
+
The MCP server '<server-name>' must be available. Try:
|
|
83
|
+
1. Start a new Claude session (MCP servers load at session start)
|
|
84
|
+
2. Verify the server entry exists in .mcp.json
|
|
85
|
+
3. Re-run /rb:init to confirm role assignments
|
|
86
|
+
```
|
|
74
87
|
|
|
75
|
-
|
|
88
|
+
---
|
|
76
89
|
|
|
77
|
-
### Step
|
|
90
|
+
### Step 3: Resolve the Card
|
|
78
91
|
|
|
79
|
-
**If the input looks like a UUID
|
|
92
|
+
**If the input looks like a UUID:**
|
|
80
93
|
|
|
81
94
|
```
|
|
82
95
|
<MCP_PREFIX>get_card({ cardId: "<input>" })
|
|
@@ -88,207 +101,160 @@ If ping via curl also fails (network error), stop and report the error.
|
|
|
88
101
|
<MCP_PREFIX>list_cards({ boardId: "23578fa2-49c1-475c-b398-6d7080a676bc" })
|
|
89
102
|
```
|
|
90
103
|
|
|
91
|
-
Find the
|
|
104
|
+
Find the closest title match, then call `get_card` on it.
|
|
92
105
|
|
|
93
|
-
|
|
94
|
-
<MCP_PREFIX>get_card({ cardId: "<resolved-id>" })
|
|
95
|
-
```
|
|
96
|
-
|
|
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
|
|
106
|
+
Collect: `card.id`, `card.title`, `card.description`, `card.status`, `card.todos[]`.
|
|
101
107
|
|
|
102
|
-
**If card status is not `ready` or `in-progress`**, warn
|
|
108
|
+
**If card status is not `ready` or `in-progress`**, warn and ask:
|
|
103
109
|
```
|
|
104
|
-
⚠️ Card "<title>" is currently
|
|
105
|
-
Proceed anyway? (yes / no)
|
|
110
|
+
⚠️ Card "<title>" is currently "<status>". Expected "ready". Proceed anyway? (yes / no)
|
|
106
111
|
```
|
|
107
112
|
Stop if the user says no.
|
|
108
113
|
|
|
109
|
-
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### Step 4: Load Linked Features & Criteria
|
|
110
117
|
|
|
111
118
|
```
|
|
112
119
|
<MCP_PREFIX>list_card_features({ cardId: "<cardId>" })
|
|
113
120
|
```
|
|
114
121
|
|
|
115
|
-
For each linked feature
|
|
116
|
-
|
|
122
|
+
For each linked feature:
|
|
117
123
|
```
|
|
118
124
|
<MCP_PREFIX>get_feature({ featureId: "<featureId>" })
|
|
119
125
|
```
|
|
120
126
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
Also fetch prior validation reports for this card:
|
|
124
|
-
|
|
127
|
+
Also load prior validation reports:
|
|
125
128
|
```
|
|
126
129
|
<MCP_PREFIX>list_validations({ cardId: "<cardId>" })
|
|
127
130
|
```
|
|
128
131
|
|
|
129
|
-
|
|
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
|
-
|
|
132
|
+
If the card is `in-progress` (possible QA return), also check for prior failures:
|
|
140
133
|
```
|
|
141
134
|
<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
|
-
```
|
|
150
|
-
## Prior QA Failure Detected
|
|
151
|
-
|
|
152
|
-
The card was previously returned from validation with the following failures:
|
|
153
|
-
|
|
154
|
-
<QA failure comment content>
|
|
155
|
-
|
|
156
|
-
The implementation plan will specifically address these failing criteria.
|
|
157
135
|
```
|
|
136
|
+
Look for a "QA: Validation Failed" comment and note any failing criteria — these get extra attention in the plan.
|
|
158
137
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
If no prior failure comment or validation report is found, proceed normally.
|
|
138
|
+
If no features are linked, warn the user but continue.
|
|
162
139
|
|
|
163
|
-
|
|
140
|
+
---
|
|
164
141
|
|
|
165
|
-
|
|
142
|
+
### Step 5: Move Card to `in-progress`
|
|
166
143
|
|
|
167
144
|
```
|
|
168
145
|
<MCP_PREFIX>move_card({ cardId: "<cardId>", status: "in-progress" })
|
|
169
146
|
```
|
|
170
147
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
Before planning, detect criteria in *other* active features that this implementation might break.
|
|
174
|
-
|
|
175
|
-
**Detection process:**
|
|
148
|
+
---
|
|
176
149
|
|
|
177
|
-
|
|
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
|
|
150
|
+
### Step 6: Spawn Planner Agent
|
|
185
151
|
|
|
186
|
-
|
|
152
|
+
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
153
|
|
|
188
154
|
```
|
|
189
|
-
|
|
155
|
+
Agent(
|
|
156
|
+
subagent_type="Plan",
|
|
157
|
+
prompt="
|
|
158
|
+
You are planning the implementation of a Rayburst board card.
|
|
190
159
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
160
|
+
## Card
|
|
161
|
+
Title: <card title>
|
|
162
|
+
Description: <card description>
|
|
163
|
+
Status: in-progress
|
|
164
|
+
Card ID: <cardId>
|
|
194
165
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
Criterion: "<criterion description>" (ID: <full-uuid>)
|
|
198
|
-
Risk: <why this implementation could break it>
|
|
166
|
+
## Acceptance Criteria
|
|
167
|
+
<list all criteria from linked features, with criterionId and Given/When/Then description>
|
|
199
168
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
2. Adjust the plan to preserve these criteria
|
|
203
|
-
3. Cancel
|
|
169
|
+
## Todo List (implement in this order)
|
|
170
|
+
<list card todos in order>
|
|
204
171
|
|
|
205
|
-
|
|
206
|
-
|
|
172
|
+
## Prior QA Failures (if any)
|
|
173
|
+
<list any criteria that previously failed — these must be fixed>
|
|
207
174
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
<MCP_PREFIX>move_card({ cardId: "<cardId>", status: "ready" })
|
|
213
|
-
```
|
|
214
|
-
Then stop.
|
|
215
|
-
|
|
216
|
-
If no conflicts are found, proceed directly to Step 6.
|
|
175
|
+
## Codebase Context
|
|
176
|
+
App URL: http://www.rayburst.app
|
|
177
|
+
Frontend: rayburst/ (React, TanStack Router, Tailwind v4)
|
|
178
|
+
Backend: rayburst-api/ (Hono, Drizzle ORM, PostgreSQL)
|
|
217
179
|
|
|
218
|
-
|
|
180
|
+
## Your Task
|
|
181
|
+
Produce a complete implementation plan:
|
|
182
|
+
1. List every file to create or modify (exact paths)
|
|
183
|
+
2. Describe the approach for each acceptance criterion
|
|
184
|
+
3. Cover any DB migrations, API changes, env vars needed
|
|
185
|
+
4. Note edge cases and error handling
|
|
186
|
+
5. If prior QA failures exist, add a 'Fixing QA Failures' section at the top
|
|
219
187
|
|
|
220
|
-
|
|
188
|
+
Output the plan as structured markdown. Be specific — the executor will follow this plan without asking questions.
|
|
189
|
+
",
|
|
190
|
+
description="Plan: <card title>"
|
|
191
|
+
)
|
|
192
|
+
```
|
|
221
193
|
|
|
222
|
-
|
|
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
|
|
194
|
+
Store the plan output as `$PLAN`.
|
|
228
195
|
|
|
229
|
-
|
|
196
|
+
---
|
|
230
197
|
|
|
231
|
-
### Step 7:
|
|
198
|
+
### Step 7: Post Plan as Card Comment
|
|
232
199
|
|
|
233
|
-
|
|
200
|
+
Post the plan to the card before execution starts:
|
|
234
201
|
|
|
235
202
|
```
|
|
236
203
|
<MCP_PREFIX>add_comment({
|
|
237
204
|
cardId: "<cardId>",
|
|
238
|
-
content: "## Implementation Plan\n\n
|
|
205
|
+
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
206
|
})
|
|
240
207
|
```
|
|
241
208
|
|
|
242
|
-
Keep
|
|
209
|
+
Keep under 5000 characters. Describe the approach — no raw code blocks.
|
|
243
210
|
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
```
|
|
211
|
+
---
|
|
260
212
|
|
|
261
|
-
|
|
213
|
+
### Step 8: Spawn Executor Agent
|
|
262
214
|
|
|
263
|
-
|
|
215
|
+
Spawn a `general-purpose` subagent to execute the plan. Pass it the full plan and all card context.
|
|
264
216
|
|
|
265
|
-
|
|
217
|
+
```
|
|
218
|
+
Agent(
|
|
219
|
+
subagent_type="general-purpose",
|
|
220
|
+
prompt="
|
|
221
|
+
You are implementing a Rayburst board card. Execute the plan below completely. Do not ask questions — make decisions and write the code.
|
|
266
222
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
223
|
+
## Card
|
|
224
|
+
Title: <card title>
|
|
225
|
+
Card ID: <cardId>
|
|
226
|
+
MCP Prefix: <MCP_PREFIX>
|
|
271
227
|
|
|
272
|
-
|
|
228
|
+
## Implementation Plan
|
|
229
|
+
<full $PLAN>
|
|
273
230
|
|
|
274
|
-
|
|
231
|
+
## Acceptance Criteria (verify each before finishing)
|
|
232
|
+
<list all criteria with criterionId>
|
|
275
233
|
|
|
276
|
-
|
|
234
|
+
## Todo List (work in this order)
|
|
235
|
+
<list card todos>
|
|
277
236
|
|
|
278
|
-
|
|
279
|
-
|
|
237
|
+
## Execution Rules
|
|
238
|
+
- Work through todos in order
|
|
239
|
+
- Make atomic changes (backend schema → service → routes → frontend)
|
|
240
|
+
- After backend changes: run `cd rayburst-api && npm run type-check`
|
|
241
|
+
- After frontend changes: run `cd rayburst && npx biome check <changed files>`
|
|
242
|
+
- After implementation: do a self-check — does each criterion have code that satisfies it?
|
|
243
|
+
- When all todos are complete and criteria are satisfied, call:
|
|
244
|
+
<MCP_PREFIX>move_card({ cardId: '<cardId>', status: 'validation' })
|
|
245
|
+
- Then post a summary comment:
|
|
246
|
+
<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>' })
|
|
247
|
+
- Return a completion message listing files changed and criteria satisfied.
|
|
248
|
+
",
|
|
249
|
+
description="Implement: <card title>"
|
|
250
|
+
)
|
|
280
251
|
```
|
|
281
252
|
|
|
282
|
-
|
|
253
|
+
---
|
|
283
254
|
|
|
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
|
-
```
|
|
255
|
+
### Step 9: Print Summary
|
|
290
256
|
|
|
291
|
-
|
|
257
|
+
After the executor returns, print:
|
|
292
258
|
|
|
293
259
|
```
|
|
294
260
|
## Implementation Complete: <Card Title>
|
|
@@ -299,85 +265,19 @@ Then print:
|
|
|
299
265
|
|
|
300
266
|
### Files Changed
|
|
301
267
|
- <file path>
|
|
302
|
-
- <file path>
|
|
303
268
|
|
|
304
269
|
Run `/rb:validate-card <cardId>` to run QA validation.
|
|
305
270
|
```
|
|
306
271
|
|
|
307
272
|
---
|
|
308
273
|
|
|
309
|
-
## MCP Curl Fallback
|
|
310
|
-
|
|
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).
|
|
312
|
-
|
|
313
|
-
```bash
|
|
314
|
-
# Get card
|
|
315
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
316
|
-
-H "Authorization: Bearer <KEY>" \
|
|
317
|
-
-H "Content-Type: application/json" \
|
|
318
|
-
-H "Accept: application/json, text/event-stream" \
|
|
319
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_card","arguments":{"cardId":"<cardId>"}}}'
|
|
320
|
-
|
|
321
|
-
# Move card
|
|
322
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
323
|
-
-H "Authorization: Bearer <KEY>" \
|
|
324
|
-
-H "Content-Type: application/json" \
|
|
325
|
-
-H "Accept: application/json, text/event-stream" \
|
|
326
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"move_card","arguments":{"cardId":"<cardId>","status":"in-progress"}}}'
|
|
327
|
-
|
|
328
|
-
# Add comment
|
|
329
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
330
|
-
-H "Authorization: Bearer <KEY>" \
|
|
331
|
-
-H "Content-Type: application/json" \
|
|
332
|
-
-H "Accept: application/json, text/event-stream" \
|
|
333
|
-
-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
|
-
```
|
|
363
|
-
|
|
364
|
-
Parse the `data:` line from the SSE response to extract the JSON result.
|
|
365
|
-
|
|
366
|
-
---
|
|
367
|
-
|
|
368
274
|
## Constraints
|
|
369
275
|
|
|
370
276
|
- **Full UUIDs only** — short hashes return NOT_FOUND
|
|
371
277
|
- **Rate limit: 60 req/min** — batch MCP calls in groups of 4-5
|
|
372
|
-
- **
|
|
278
|
+
- **No interactive plan approval** — planner agent produces the plan, executor runs it immediately
|
|
279
|
+
- **Move card to `in-progress` before planning** (Step 5) — board must reflect active work
|
|
373
280
|
- **Post plan as comment before executing** (Step 7) — creates a paper trail
|
|
374
|
-
- **
|
|
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
|
|
281
|
+
- **Executor moves card to `validation`** — do not move it manually after spawning
|
|
381
282
|
- **Implementation comments under 5000 characters** — no raw code in comment content
|
|
382
|
-
- **Validation criterion comments under 500 characters** — plain prose only, no backticks
|
|
383
283
|
- **Run `/rb:init` first** if `.claude/rb-config.md` is missing
|
|
@@ -61,7 +61,13 @@ Read `.claude/rb-config.md` and parse the `## MCP Role Assignments` table. Find
|
|
|
61
61
|
```
|
|
62
62
|
Example: if the server name is `rayburst-rb-qa-engineer-55ae0f`, then `MCP_PREFIX = mcp__rayburst-rb-qa-engineer-55ae0f__`.
|
|
63
63
|
|
|
64
|
-
- If `.claude/rb-config.md` does not exist or the role is `unassigned`,
|
|
64
|
+
- If `.claude/rb-config.md` does not exist or the role is `unassigned`, stop immediately:
|
|
65
|
+
```
|
|
66
|
+
ERROR: rb:validate-card requires an MCP server assigned to the `qa-engineer` role.
|
|
67
|
+
|
|
68
|
+
Run /rb:init to configure MCP server role assignments.
|
|
69
|
+
The qa-engineer role must be mapped to an MCP server in .mcp.json before validating cards.
|
|
70
|
+
```
|
|
65
71
|
|
|
66
72
|
All MCP tool calls below use `<MCP_PREFIX>` as a stand-in for the resolved prefix.
|
|
67
73
|
|
|
@@ -73,22 +79,15 @@ All MCP tool calls below use `<MCP_PREFIX>` as a stand-in for the resolved prefi
|
|
|
73
79
|
<MCP_PREFIX>ping()
|
|
74
80
|
```
|
|
75
81
|
|
|
76
|
-
**If the MCP tool is not found** (error: "No such tool available"),
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
80
|
-
-H "Authorization: Bearer <API_KEY_FROM_.mcp.json>" \
|
|
81
|
-
-H "Content-Type: application/json" \
|
|
82
|
-
-H "Accept: application/json, text/event-stream" \
|
|
83
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ping","arguments":{}}}'
|
|
82
|
+
**If the MCP tool is not found** (error: "No such tool available"), stop immediately:
|
|
84
83
|
```
|
|
84
|
+
ERROR: The MCP server for the qa-engineer role is not loaded in this session.
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
**Use curl for ALL subsequent MCP calls** (get_card, list_cards, list_card_features, get_feature, add_comment, submit_validation, move_card) whenever MCP tools are unavailable.
|
|
86
|
+
The MCP server '<server-name>' must be available. Try:
|
|
87
|
+
1. Start a new Claude session (MCP servers load at session start)
|
|
88
|
+
2. Verify the server entry exists in .mcp.json
|
|
89
|
+
3. Re-run /rb:init to confirm role assignments
|
|
90
|
+
```
|
|
92
91
|
|
|
93
92
|
### Step 2: Resolve the Card
|
|
94
93
|
|
|
@@ -222,7 +221,7 @@ After testing each criterion, record locally:
|
|
|
222
221
|
})
|
|
223
222
|
```
|
|
224
223
|
|
|
225
|
-
**Comment rules
|
|
224
|
+
**Comment rules:**
|
|
226
225
|
- Keep comments under 500 characters
|
|
227
226
|
- Plain prose only — no backtick code, no raw code snippets, no JSON in comment strings (causes `INTERNAL_ERROR`)
|
|
228
227
|
- Reference files as plain text: "ComponentName.tsx line 79" not a code excerpt
|
|
@@ -281,44 +280,6 @@ Report ID: <report-id>
|
|
|
281
280
|
|
|
282
281
|
---
|
|
283
282
|
|
|
284
|
-
## MCP Curl Fallback
|
|
285
|
-
|
|
286
|
-
When MCP tools are unavailable, use this curl pattern. Read the API key from `.mcp.json` under the server assigned to the `qa-engineer` role (or the first HTTP server entry if config is missing):
|
|
287
|
-
|
|
288
|
-
```bash
|
|
289
|
-
# Get card
|
|
290
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
291
|
-
-H "Authorization: Bearer <KEY>" \
|
|
292
|
-
-H "Content-Type: application/json" \
|
|
293
|
-
-H "Accept: application/json, text/event-stream" \
|
|
294
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_card","arguments":{"cardId":"<cardId>"}}}'
|
|
295
|
-
|
|
296
|
-
# List card features
|
|
297
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
298
|
-
-H "Authorization: Bearer <KEY>" \
|
|
299
|
-
-H "Content-Type: application/json" \
|
|
300
|
-
-H "Accept: application/json, text/event-stream" \
|
|
301
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_card_features","arguments":{"cardId":"<cardId>"}}}'
|
|
302
|
-
|
|
303
|
-
# Submit validation (cardId, not featureId)
|
|
304
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
305
|
-
-H "Authorization: Bearer <KEY>" \
|
|
306
|
-
-H "Content-Type: application/json" \
|
|
307
|
-
-H "Accept: application/json, text/event-stream" \
|
|
308
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"submit_validation","arguments":{"cardId":"<cardId>","results":[...],"overallComment":"..."}}}'
|
|
309
|
-
|
|
310
|
-
# Move card to done
|
|
311
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
312
|
-
-H "Authorization: Bearer <KEY>" \
|
|
313
|
-
-H "Content-Type: application/json" \
|
|
314
|
-
-H "Accept: application/json, text/event-stream" \
|
|
315
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"move_card","arguments":{"cardId":"<cardId>","status":"done"}}}'
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
Parse the `data:` line from the SSE response to extract the JSON result.
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
283
|
## Constraints
|
|
323
284
|
|
|
324
285
|
- Full UUIDs only
|
|
@@ -61,7 +61,13 @@ Read `.claude/rb-config.md` and parse the `## MCP Role Assignments` table. Find
|
|
|
61
61
|
```
|
|
62
62
|
Example: if the server name is `rayburst-rb-qa-engineer-55ae0f`, then `MCP_PREFIX = mcp__rayburst-rb-qa-engineer-55ae0f__`.
|
|
63
63
|
|
|
64
|
-
- If `.claude/rb-config.md` does not exist or the role is `unassigned`,
|
|
64
|
+
- If `.claude/rb-config.md` does not exist or the role is `unassigned`, stop immediately:
|
|
65
|
+
```
|
|
66
|
+
ERROR: rb:validate-feature requires an MCP server assigned to the `qa-engineer` role.
|
|
67
|
+
|
|
68
|
+
Run /rb:init to configure MCP server role assignments.
|
|
69
|
+
The qa-engineer role must be mapped to an MCP server in .mcp.json before validating features.
|
|
70
|
+
```
|
|
65
71
|
|
|
66
72
|
All MCP tool calls below use `<MCP_PREFIX>` as a stand-in for the resolved prefix.
|
|
67
73
|
|
|
@@ -73,22 +79,15 @@ All MCP tool calls below use `<MCP_PREFIX>` as a stand-in for the resolved prefi
|
|
|
73
79
|
<MCP_PREFIX>ping()
|
|
74
80
|
```
|
|
75
81
|
|
|
76
|
-
**If the MCP tool is not found** (error: "No such tool available"),
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
80
|
-
-H "Authorization: Bearer <API_KEY_FROM_.mcp.json>" \
|
|
81
|
-
-H "Content-Type: application/json" \
|
|
82
|
-
-H "Accept: application/json, text/event-stream" \
|
|
83
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ping","arguments":{}}}'
|
|
82
|
+
**If the MCP tool is not found** (error: "No such tool available"), stop immediately:
|
|
84
83
|
```
|
|
84
|
+
ERROR: The MCP server for the qa-engineer role is not loaded in this session.
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
**Use curl for ALL subsequent MCP calls** (get_feature, list_boards, create_card, link_feature, submit_validation, update_feature) whenever MCP tools are unavailable.
|
|
86
|
+
The MCP server '<server-name>' must be available. Try:
|
|
87
|
+
1. Start a new Claude session (MCP servers load at session start)
|
|
88
|
+
2. Verify the server entry exists in .mcp.json
|
|
89
|
+
3. Re-run /rb:init to confirm role assignments
|
|
90
|
+
```
|
|
92
91
|
|
|
93
92
|
### Step 2: Resolve the Feature
|
|
94
93
|
|
|
@@ -222,7 +221,7 @@ Rules:
|
|
|
222
221
|
})
|
|
223
222
|
```
|
|
224
223
|
|
|
225
|
-
**Comment rules
|
|
224
|
+
**Comment rules:**
|
|
226
225
|
- Keep comments under 500 characters
|
|
227
226
|
- Plain prose only — no backtick code, no raw code snippets, no JSON in comment strings (causes `INTERNAL_ERROR`)
|
|
228
227
|
- Reference files as plain text: "ComponentName.tsx line 79" not a code excerpt
|
|
@@ -270,22 +269,6 @@ Submitted via submit_validation (featureId: <id>)
|
|
|
270
269
|
|
|
271
270
|
---
|
|
272
271
|
|
|
273
|
-
## MCP Curl Fallback
|
|
274
|
-
|
|
275
|
-
When MCP tools are unavailable, use this curl pattern. Read the API key from `.mcp.json` under the server assigned to the `qa-engineer` role (or the first HTTP server entry if config is missing):
|
|
276
|
-
|
|
277
|
-
```bash
|
|
278
|
-
curl -s -X POST "https://api.rayburst.app/api/v1/mcp" \
|
|
279
|
-
-H "Authorization: Bearer <KEY>" \
|
|
280
|
-
-H "Content-Type: application/json" \
|
|
281
|
-
-H "Accept: application/json, text/event-stream" \
|
|
282
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_feature","arguments":{"featureId":"<id>"}}}'
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
Parse the `data:` line from the SSE response to extract the JSON result.
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
272
|
## Constraints
|
|
290
273
|
|
|
291
274
|
- Full UUIDs only
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rayburst/cc",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.27",
|
|
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"
|