buildcrew 1.5.1 → 1.5.3
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/agents/buildcrew.md +29 -1
- package/bin/setup.js +24 -2
- package/package.json +1 -1
package/agents/buildcrew.md
CHANGED
|
@@ -517,6 +517,8 @@ You MUST output a structured status log **before and after** every agent dispatc
|
|
|
517
517
|
|
|
518
518
|
### On completion
|
|
519
519
|
|
|
520
|
+
After all agents finish, output the completion summary AND the crew report:
|
|
521
|
+
|
|
520
522
|
```
|
|
521
523
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
522
524
|
✓ COMPLETE · {feature-name}
|
|
@@ -524,7 +526,33 @@ You MUST output a structured status log **before and after** every agent dispatc
|
|
|
524
526
|
Iterations: 2
|
|
525
527
|
Output: .claude/pipeline/{feature-name}/
|
|
526
528
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
527
|
-
|
|
529
|
+
|
|
530
|
+
─────────────────────────────────────────────────
|
|
531
|
+
📊 buildcrew Report
|
|
532
|
+
─────────────────────────────────────────────────
|
|
533
|
+
✅ Agents used: planner, designer, developer, qa-tester, reviewer
|
|
534
|
+
⏭️ Skipped: browser-qa (no dev server), security-auditor (not requested)
|
|
535
|
+
📋 Plan: 4 user stories, 15 acceptance criteria (avg 8.5/10)
|
|
536
|
+
🎨 Design: 3 components, motion tokens defined
|
|
537
|
+
💻 Dev: 12 files changed (+340, -28)
|
|
538
|
+
🧪 QA: 14/15 acceptance criteria passed
|
|
539
|
+
🔬 Review: APPROVED (2 auto-fixes applied)
|
|
540
|
+
🔄 Iterations: 2/3 used
|
|
541
|
+
📁 Output: .claude/pipeline/{feature-name}/
|
|
542
|
+
─────────────────────────────────────────────────
|
|
543
|
+
💡 Next: @buildcrew ship — create PR
|
|
544
|
+
─────────────────────────────────────────────────
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
### Crew Report Rules
|
|
548
|
+
|
|
549
|
+
1. **Always output the crew report** at the end of every mode execution
|
|
550
|
+
2. **List agents used** — which agents actually ran in this session
|
|
551
|
+
3. **List agents skipped** — which agents were skipped and why
|
|
552
|
+
4. **Show key metrics per agent** — one line each with the most important number/result
|
|
553
|
+
5. **Show iteration count** — how many iterations were used out of max
|
|
554
|
+
6. **Show next action** — what the user should do next (ship, fix, test, etc.)
|
|
555
|
+
7. **Adapt to the mode** — security audit shows findings count, debug shows root cause, etc.
|
|
528
556
|
|
|
529
557
|
### Rules for Status Log
|
|
530
558
|
|
package/bin/setup.js
CHANGED
|
@@ -150,12 +150,25 @@ async function detectProject() {
|
|
|
150
150
|
async function runInit(force) {
|
|
151
151
|
log(`\n ${BOLD}buildcrew init${RESET} v${VERSION}\n`);
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
const harnessExists = await exists(join(HARNESS_DIR, "project.md"));
|
|
154
|
+
|
|
155
|
+
if (harnessExists && !force) {
|
|
154
156
|
log(` ${YELLOW}Harness already exists at .claude/harness/${RESET}`);
|
|
155
157
|
log(` ${DIM}Use ${BOLD}--force${RESET}${DIM} to regenerate. Or just edit the files directly.${RESET}\n`);
|
|
156
158
|
return;
|
|
157
159
|
}
|
|
158
160
|
|
|
161
|
+
// Backup existing harness before overwriting
|
|
162
|
+
if (harnessExists && force) {
|
|
163
|
+
const backupDir = join(process.cwd(), ".claude", "harness-backup");
|
|
164
|
+
await mkdir(backupDir, { recursive: true });
|
|
165
|
+
const harnessFiles = (await readdir(HARNESS_DIR)).filter(f => f.endsWith(".md"));
|
|
166
|
+
for (const file of harnessFiles) {
|
|
167
|
+
await copyFile(join(HARNESS_DIR, file), join(backupDir, file));
|
|
168
|
+
}
|
|
169
|
+
log(` ${CYAN}Backed up ${harnessFiles.length} harness files → .claude/harness-backup/${RESET}\n`);
|
|
170
|
+
}
|
|
171
|
+
|
|
159
172
|
log(` ${DIM}Scanning project...${RESET}\n`);
|
|
160
173
|
const d = await detectProject();
|
|
161
174
|
|
|
@@ -329,11 +342,20 @@ async function runAdd(type, force) {
|
|
|
329
342
|
}
|
|
330
343
|
|
|
331
344
|
const target = join(HARNESS_DIR, `${type}.md`);
|
|
332
|
-
|
|
345
|
+
const targetExists = await exists(target);
|
|
346
|
+
if (targetExists && !force) {
|
|
333
347
|
log(`\n ${YELLOW}${type}.md already exists.${RESET} Use ${BOLD}--force${RESET} to overwrite.\n`);
|
|
334
348
|
return;
|
|
335
349
|
}
|
|
336
350
|
|
|
351
|
+
// Backup before overwriting
|
|
352
|
+
if (targetExists && force) {
|
|
353
|
+
const backupDir = join(process.cwd(), ".claude", "harness-backup");
|
|
354
|
+
await mkdir(backupDir, { recursive: true });
|
|
355
|
+
await copyFile(target, join(backupDir, `${type}.md`));
|
|
356
|
+
log(`\n ${CYAN}Backed up ${type}.md → .claude/harness-backup/${RESET}`);
|
|
357
|
+
}
|
|
358
|
+
|
|
337
359
|
await mkdir(HARNESS_DIR, { recursive: true });
|
|
338
360
|
await copyFile(join(TEMPLATES_SRC, template.file), target);
|
|
339
361
|
log(`\n ${GREEN} + ${RESET} .claude/harness/${type}.md`);
|
package/package.json
CHANGED