buildcrew 1.8.7 → 1.9.1

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.
@@ -226,6 +226,42 @@ Before completing, verify:
226
226
 
227
227
  ---
228
228
 
229
+ ## Handoff Record (Required at end of every output file)
230
+
231
+ design-reviewer 특화 필드 (Design §5.5):
232
+
233
+ ```markdown
234
+ ## Handoff Record
235
+
236
+ ### Inputs consumed
237
+ - Live URL: {url} → screenshots at 3 breakpoints
238
+ - `harness/design-system.md` → tokens for compliance check
239
+ - `02-design.md` (if exists) → compared rendered vs. spec
240
+
241
+ ### Outputs for next agents
242
+ - `design-review.md#scores` → user / developer (per dimension)
243
+ - `design-review.md#top-3-fixes` → developer (highest impact)
244
+ - `design-review.md#wcag-violations` → developer + browser-qa
245
+
246
+ ### Decisions NOT covered by inputs
247
+ - {dimension priority}. Reason: {why this matters most}
248
+
249
+ ### UX score provenance (Required for design-reviewer)
250
+ - Score: {N}/10 across {dimensions: hierarchy, contrast, motion, ...}
251
+ - Dimension breakdown cited from:
252
+ - Hierarchy {N}/10 → screenshot at {url}, line {file:line} CSS
253
+ - Contrast {N}/10 → measurement: {ratio}:1 (browser dev tools)
254
+ - Motion {N}/10 → reference {file:line} or "no motion observed"
255
+ - Low-scoring dimensions specifics:
256
+ - {dim} → fix at {file:line}: {one-line fix}
257
+
258
+ ### Coordination signals (optional)
259
+ ```
260
+
261
+ > 점수 옆에 항상 측정 근거. "low contrast"는 의견, "3.2:1"은 사실.
262
+
263
+ ---
264
+
229
265
  ## Rules
230
266
 
231
267
  1. **Screenshot everything** — scores without visual evidence are opinions. Take screenshots at each breakpoint.
@@ -577,6 +577,35 @@ const animation = prefersReducedMotion
577
577
 
578
578
  ---
579
579
 
580
+ ## Handoff Record (Required at end of every output file)
581
+
582
+ 당신의 출력(`02-design.md`) 마지막에 반드시:
583
+
584
+ ```markdown
585
+ ## Handoff Record
586
+
587
+ ### Inputs consumed
588
+ - `01-plan.md#user-stories` → designed UI per story
589
+ - `01-plan.md#scope-in-out-deferred` → respected scope boundaries
590
+ - `harness/design-system.md#tokens` → applied existing tokens
591
+ - `harness/user-flow.md#{flow}` → followed flow
592
+
593
+ ### Outputs for next agents
594
+ - `02-design.md#components` → developer (component specs)
595
+ - `02-design.md#motion-spec` → developer (animation requirements)
596
+ - `02-design.md#error-states` → developer + qa-tester
597
+ - `02-design.md#accessibility-notes` → developer + browser-qa
598
+
599
+ ### Decisions NOT covered by inputs
600
+ - {design decision}. Reason: {1-2 lines}
601
+
602
+ ### Coordination signals (optional)
603
+ ```
604
+
605
+ > Anchors must match GFM-normalized headings present in 02-design.md. Coherence-auditor verifies.
606
+
607
+ ---
608
+
580
609
  ## Rules
581
610
 
582
611
  1. **Research before designing** — no component gets built without at least 2 references looked at
@@ -289,6 +289,40 @@ When fixing issues found during QA/review iteration:
289
289
 
290
290
  ---
291
291
 
292
+ # Handoff Record (Required at end of every output file)
293
+
294
+ 당신의 출력(`03-impl.md` + 변경한 소스 파일) 마지막에 반드시:
295
+
296
+ ```markdown
297
+ ## Handoff Record
298
+
299
+ ### Inputs consumed
300
+ - `01-plan.md#acceptance-criteria` → implemented at src/{file}.tsx:LXX-LYY
301
+ - `01-plan.md#technical-approach` → followed
302
+ - `02-design.md#components` → built per spec
303
+ - `02-design.md#motion-spec` → animations applied at src/{file}.tsx:LXX
304
+ - `02-design.md#accessibility-notes` → aria-labels at src/{file}.tsx:LXX
305
+ - `harness/architecture.md#{pattern}` → adopted
306
+ - `harness/api-spec.md#{endpoint}` → wired
307
+
308
+ ### Outputs for next agents
309
+ - `03-impl.md#components` → qa-tester (list of files changed)
310
+ - `03-impl.md#tests-needed` → qa-tester (edge cases)
311
+ - `03-impl.md#error-handling-map` → qa-tester + reviewer
312
+ - Source files: src/{file}.tsx, lib/{util}.ts (changed/created)
313
+
314
+ ### Decisions NOT covered by inputs
315
+ - {non-trivial choice}. Reason: {citing harness or precedent}
316
+
317
+ ### Coordination signals (optional)
318
+ - Conflicted with planner on {topic} — resolved by {how}
319
+ - Deferred {topic} to next iteration
320
+ ```
321
+
322
+ > **Critical for developer**: coherence-auditor reads your cited source files (Q3 code cross-verification) and judges CONFIRMED/PARTIAL/MISSING_IN_CODE per planner requirement. Cite line ranges precisely. Honest evidence prevents fabrication flags.
323
+
324
+ ---
325
+
292
326
  # Rules
293
327
 
294
328
  1. **Read code before writing code** — understand existing patterns from 3-5 similar files. Don't guess. Don't introduce new patterns without justification.
@@ -205,6 +205,29 @@ Write to `.claude/pipeline/health/health-report.md`:
205
205
 
206
206
  ---
207
207
 
208
+ ## Handoff Record (Required at end of every output file)
209
+
210
+ 당신은 보통 Mode 6 standalone으로 실행되지만, Feature 모드의 일부로도 호출 가능. 출력 마지막에:
211
+
212
+ ```markdown
213
+ ## Handoff Record
214
+
215
+ ### Inputs consumed
216
+ - Repo state at {commit} → ran type/lint/build/dead-code/shellcheck
217
+ - `harness/project.md#stack` → adjusted weights for stack
218
+
219
+ ### Outputs for next agents
220
+ - `health-report.md#score` → user (0-10 composite)
221
+ - `health-report.md#top-5-actionable` → user (or developer if used in iteration)
222
+
223
+ ### Decisions NOT covered by inputs
224
+ - {weight adjustment}. Reason: {why}
225
+
226
+ ### Coordination signals (optional)
227
+ ```
228
+
229
+ ---
230
+
208
231
  ## Rules
209
232
  1. **Run real commands** — don't guess at numbers
210
233
  2. **Count precisely** — parse output for exact error/warning counts
@@ -286,6 +286,45 @@ Write to `.claude/pipeline/{context}/investigation.md`:
286
286
 
287
287
  ---
288
288
 
289
+ ## Handoff Record (Required at end of every output file)
290
+
291
+ investigator 특화 필드 (Design §5.2):
292
+
293
+ ```markdown
294
+ ## Handoff Record
295
+
296
+ ### Inputs consumed
297
+ - Bug report from user → reproduction steps
298
+ - `harness/architecture.md` → component context
299
+ - `harness/erd.md` → data model context
300
+ - Source files: src/{file}.tsx (read for hypotheses)
301
+ - Logs / errors → evidence collected
302
+
303
+ ### Outputs for next agents
304
+ - `investigation.md#root-cause` → developer (fix target)
305
+ - `investigation.md#test-coverage-gap` → qa-tester (regression test)
306
+ - `investigation.md#fix` → developer (if minimal fix included)
307
+
308
+ ### Decisions NOT covered by inputs
309
+ - {scope of fix}. Reason: {why minimal vs. broader}
310
+
311
+ ### Root cause trace (Required for investigator)
312
+ - Hypothesis: {one-sentence claim}
313
+ - Evidence collected:
314
+ - {file:line} → {what observation supports}
315
+ - (repeat — minimum 3 evidence points before settling on a root cause)
316
+ - Disproved hypotheses:
317
+ - H_disproved_1 → {evidence that ruled out}
318
+ - Final root cause: {statement} anchored at {file:line}
319
+ - Confidence: {N}/10
320
+
321
+ ### Coordination signals (optional)
322
+ ```
323
+
324
+ > 모든 evidence는 file:line으로 anchored. "I think"는 evidence 아님.
325
+
326
+ ---
327
+
289
328
  ## Rules
290
329
 
291
330
  1. **Never guess** — every fix traces to a confirmed root cause. If you can't explain WHY the bug happens, you haven't found the cause.
package/agents/planner.md CHANGED
@@ -246,8 +246,34 @@ Write to `.claude/pipeline/{feature-name}/01-plan.md`:
246
246
 
247
247
  ## Handoff Notes
248
248
  [What the designer needs to know — key constraints, non-obvious decisions, UX pitfalls to avoid]
249
+
250
+ ## Handoff Record
251
+
252
+ ### Inputs consumed
253
+ <!-- Each line: `<path>#<anchor>` → <how it shaped your plan>. Use `- none` only if you (planner) genuinely consulted no harness or prior file. Most plans should reference at least project.md and rules.md. -->
254
+ - `harness/project.md#stack` → confirmed tech stack constrains my Technical Approach
255
+ - `harness/rules.md#conventions` → applied to acceptance criteria phrasing
256
+ - (add more as relevant — glossary, user-flow, etc.)
257
+
258
+ ### Outputs for next agents
259
+ <!-- What you produced, addressed to the downstream role. anchors must match GFM-normalized headings actually present in 01-plan.md above. -->
260
+ - `01-plan.md#user-stories` → designer (UI scope per story)
261
+ - `01-plan.md#acceptance-criteria` → developer + qa-tester (testable specs)
262
+ - `01-plan.md#technical-approach` → developer (architecture constraints)
263
+ - `01-plan.md#scope-in-out-deferred` → designer + developer (what NOT to build)
264
+
265
+ ### Decisions NOT covered by inputs
266
+ <!-- Judgment calls you made beyond what harness/forcing-questions dictated. List with reasons. `- none` allowed if you made no autonomous calls (rare). -->
267
+ - {decision}. Reason: {1-2 lines}.
268
+ - (add more as needed)
269
+
270
+ ### Coordination signals (optional)
271
+ <!-- Cross-references, conflicts, deferrals. Omit this section if nothing applies. -->
272
+ - (none typically for planner — first in pipeline)
249
273
  ```
250
274
 
275
+ > **Why this matters**: `coherence-auditor` runs at the end of the pipeline and parses every Handoff Record. Your Outputs become the evidence that downstream agents (designer, developer, qa-tester, reviewer) actually read your plan. If your Outputs declare anchors that don't exist as headings in 01-plan.md, that's a Fabrication. If you skip Outputs, downstream agents have nothing to cite — Coordination Score drops.
276
+
251
277
  ---
252
278
 
253
279
  # Mode 2: Project Discovery
@@ -302,6 +302,38 @@ If score < 7, suggest: "Consider fixing HIGH/MEDIUM issues before shipping."
302
302
 
303
303
  ---
304
304
 
305
+ ## Handoff Record (Required at end of every output file)
306
+
307
+ qa-auditor 특화 필드 (Design §5.4):
308
+
309
+ ```markdown
310
+ ## Handoff Record
311
+
312
+ ### Inputs consumed
313
+ - Git diff vs. base → 3 parallel subagent scope
314
+ - `harness/rules.md` → audit standards
315
+ - Source files: src/{files} (changed in diff)
316
+
317
+ ### Outputs for next agents
318
+ - `qa-report.md#findings` → developer (HIGH/MEDIUM/LOW issues)
319
+ - `qa-report.md#score` → user (0-10)
320
+
321
+ ### Decisions NOT covered by inputs
322
+ - {validation choice}. Reason: {why included/excluded}
323
+
324
+ ### Subagent findings consolidation (Required for qa-auditor)
325
+ - Subagent 1 (correctness): {N findings}, top: {summary}
326
+ - Subagent 2 (performance): {N findings}, top: {summary}
327
+ - Subagent 3 (security): {N findings}, top: {summary}
328
+ - Cross-subagent conflicts: {none | list with resolution}
329
+
330
+ ### Coordination signals (optional)
331
+ ```
332
+
333
+ > 3개 subagent 결과를 별도 항목으로 보존. 충돌 발견 시 해결 방식 명시.
334
+
335
+ ---
336
+
305
337
  ## Rules
306
338
 
307
339
  1. **Always run all 3 subagents in parallel** — never sequential
@@ -301,6 +301,35 @@ After developer fixes issues from a previous QA round:
301
301
 
302
302
  ---
303
303
 
304
+ # Handoff Record (Required at end of every output file)
305
+
306
+ 당신의 출력(`04-qa.md`) 마지막에 반드시:
307
+
308
+ ```markdown
309
+ ## Handoff Record
310
+
311
+ ### Inputs consumed
312
+ - `01-plan.md#acceptance-criteria` → built test map from these
313
+ - `03-impl.md#components` → tested these files
314
+ - `03-impl.md#tests-needed` → covered listed edge cases
315
+ - `03-impl.md#error-handling-map` → verified each entry
316
+ - Source files: src/{file}.tsx (read for FAIL evidence)
317
+
318
+ ### Outputs for next agents
319
+ - `04-qa.md#findings` → reviewer (bugs to verify fix)
320
+ - `04-qa.md#test-map` → browser-qa (UI test plan)
321
+ - `04-qa.md#severity-summary` → reviewer (priority order)
322
+
323
+ ### Decisions NOT covered by inputs
324
+ - {test scope decision}. Reason: {why beyond plan}
325
+
326
+ ### Coordination signals (optional)
327
+ ```
328
+
329
+ > qa-tester가 `03-impl.md#components` 인용 안 하면 testing-without-reading-impl으로 flag.
330
+
331
+ ---
332
+
304
333
  # Rules
305
334
 
306
335
  1. **Read the code, not just the dev notes** — dev notes describe intent, code is truth. Always verify claims against actual implementation.
@@ -255,6 +255,41 @@ Write to `.claude/pipeline/{feature-name}/06-review.md`:
255
255
 
256
256
  ---
257
257
 
258
+ ## Handoff Record (Required at end of every output file)
259
+
260
+ 당신의 출력(`06-review.md`) 마지막에 반드시. **reviewer는 특화 필드 추가** (Design §5.1 — 이전 에이전트 Handoff 검증 책임):
261
+
262
+ ```markdown
263
+ ## Handoff Record
264
+
265
+ ### Inputs consumed
266
+ - `01-plan.md#acceptance-criteria` → verified each met
267
+ - `02-design.md#components` → checked dev followed spec
268
+ - `03-impl.md#components` → reviewed each cited file
269
+ - `03-impl.md#error-handling-map` → audited each error path
270
+ - `04-qa.md#findings` → confirmed fixes / re-flagged
271
+ - Source files: src/{files} (full diff review)
272
+
273
+ ### Outputs for next agents
274
+ - `06-review.md#verdict` → user (APPROVE/REQUEST CHANGES/BLOCK)
275
+ - `06-review.md#findings` → developer (if iteration needed)
276
+
277
+ ### Decisions NOT covered by inputs
278
+ - {scope/priority call}. Reason: {why}
279
+
280
+ ### Coordination signals (Required for reviewer — 2중 방어)
281
+ - Verified Handoff Records of: planner, designer, developer, qa-tester (and browser-qa if UI)
282
+ - Fabrication candidates found: {N or 0}
283
+ - {if N>0}: list each — "{agent}#{anchor} cited but {evidence}"
284
+ - Suspicious citations flagged: {N or 0}
285
+ - {if N>0}: list each
286
+ - Handoff Record compliance issues observed: {none | list}
287
+ ```
288
+
289
+ > **reviewer의 2중 방어 역할**: coherence-auditor(LLM 파서)가 markdown+code 검증을 하지만, reviewer(사람-급 LLM)는 더 깊은 의도 검증을 한다. fabrication 후보 발견 시 명시적으로 기록하라. 둘이 합쳐서 fabrication에 대한 2중 방어막.
290
+
291
+ ---
292
+
258
293
  ## Rules
259
294
 
260
295
  1. **Read the whole diff** — don't skim. One missed SQL injection is worth more than 20 style nits.
@@ -129,6 +129,29 @@ Write to `.claude/pipeline/{context}/security-audit.md`:
129
129
 
130
130
  ---
131
131
 
132
+ ## Handoff Record (Required at end of every output file)
133
+
134
+ ```markdown
135
+ ## Handoff Record
136
+
137
+ ### Inputs consumed
138
+ - Source tree → OWASP/STRIDE scan
139
+ - `harness/architecture.md#trust-boundaries` → defined attack surface
140
+ - `harness/api-spec.md` → audited endpoints
141
+
142
+ ### Outputs for next agents
143
+ - `security-audit.md#findings` → developer (remediation tasks)
144
+ - `security-audit.md#owasp-coverage` → user
145
+ - `security-audit.md#stride-coverage` → user
146
+
147
+ ### Decisions NOT covered by inputs
148
+ - {scoping choice}. Reason: {why}
149
+
150
+ ### Coordination signals (optional)
151
+ ```
152
+
153
+ ---
154
+
132
155
  ## Rules
133
156
  1. Verify before reporting — trace the code path
134
157
  2. Every finding needs proof — include the code snippet
package/agents/shipper.md CHANGED
@@ -283,6 +283,29 @@ Write to `.claude/pipeline/{feature-name}/07-ship.md`:
283
283
 
284
284
  ---
285
285
 
286
+ ## Handoff Record (Required at end of every output file)
287
+
288
+ ```markdown
289
+ ## Handoff Record
290
+
291
+ ### Inputs consumed
292
+ - Pre-flight: type/lint/build → all pass
293
+ - `06-review.md#verdict` → APPROVE confirmed
294
+ - `coherence-report.md#verdict` → reviewed (if available)
295
+ - Git diff vs. main → semver determined
296
+
297
+ ### Outputs for next agents
298
+ - PR URL → user
299
+ - Suggested next: canary-monitor
300
+
301
+ ### Decisions NOT covered by inputs
302
+ - semver bump rationale: {MAJOR/MINOR/PATCH}. Reason: {breaking? new? fix?}
303
+
304
+ ### Coordination signals (optional)
305
+ ```
306
+
307
+ ---
308
+
286
309
  ## Rules
287
310
 
288
311
  1. **Never ship from main** — always from a feature branch.
package/agents/thinker.md CHANGED
@@ -226,6 +226,38 @@ Before completing, verify:
226
226
 
227
227
  ---
228
228
 
229
+ ## Handoff Record (Required at end of every output file)
230
+
231
+ thinker는 보통 standalone(Mode 11). 출력 design doc 마지막에. **thinker 특화 필드** (Design §5.3):
232
+
233
+ ```markdown
234
+ ## Handoff Record
235
+
236
+ ### Inputs consumed
237
+ - User conversation → 6 forcing questions answers
238
+ - `harness/project.md` → tech context (if relevant)
239
+ - `harness/glossary.md` → terminology
240
+
241
+ ### Outputs for next agents
242
+ - `design-doc.md#problem-statement` → user / planner (if escalates to Feature mode)
243
+ - `design-doc.md#recommendation` → user
244
+
245
+ ### Decisions NOT covered by inputs
246
+ - {scope/recommendation}. Reason: {why this wedge}
247
+
248
+ ### Assumption chain (Required for thinker)
249
+ - A1: {assumption}. If false: {consequence}
250
+ - A2: {assumption}. If false: {consequence}
251
+ - Verified externally: {list with sources}
252
+ - Unverified: {list — explicitly mark these}
253
+
254
+ ### Coordination signals (optional)
255
+ ```
256
+
257
+ > thinker는 chain of assumption을 명시적으로 노출해야 한다. 다른 에이전트가 인용할 때 어느 가정 위에 서있는지 추적 가능.
258
+
259
+ ---
260
+
229
261
  ## Rules
230
262
 
231
263
  1. **Challenge, don't validate** — your job is to push back, not agree. The user has plenty of agreement bias already.
package/bin/hook.js ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * buildcrew-hook — thin CLI proxy for lib/hook.js.
4
+ *
5
+ * Installed as a bin entry so `npx buildcrew-hook <kind>` resolves
6
+ * the correct path regardless of where the package lives on disk.
7
+ * This keeps settings.json hook commands stable across reinstalls.
8
+ */
9
+
10
+ import { fileURLToPath } from "node:url";
11
+ import path from "node:path";
12
+
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+ const emitPath = path.resolve(__dirname, "..", "lib", "hook.js");
16
+
17
+ await import(emitPath);