@sienklogic/plan-build-run 2.34.0 → 2.38.0

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 (160) hide show
  1. package/CHANGELOG.md +683 -0
  2. package/dashboard/public/css/command-center.css +152 -65
  3. package/dashboard/public/css/explorer.css +22 -41
  4. package/dashboard/public/css/layout.css +119 -1
  5. package/dashboard/public/css/tokens.css +13 -0
  6. package/dashboard/src/components/Layout.tsx +32 -6
  7. package/dashboard/src/components/explorer/tabs/PhasesTab.tsx +11 -1
  8. package/dashboard/src/components/explorer/tabs/TodosTab.tsx +18 -2
  9. package/dashboard/src/components/partials/AttentionPanel.tsx +7 -1
  10. package/dashboard/src/components/partials/CurrentPhaseCard.tsx +26 -24
  11. package/dashboard/src/components/partials/QuickActions.tsx +21 -11
  12. package/dashboard/src/components/partials/StatCardGrid.tsx +67 -0
  13. package/dashboard/src/components/partials/StatusHeader.tsx +1 -0
  14. package/dashboard/src/routes/command-center.routes.tsx +8 -7
  15. package/dashboard/src/routes/index.routes.tsx +32 -29
  16. package/package.json +2 -2
  17. package/plugins/copilot-pbr/agents/audit.agent.md +129 -16
  18. package/plugins/copilot-pbr/agents/codebase-mapper.agent.md +49 -1
  19. package/plugins/copilot-pbr/agents/debugger.agent.md +50 -1
  20. package/plugins/copilot-pbr/agents/dev-sync.agent.md +23 -0
  21. package/plugins/copilot-pbr/agents/executor.agent.md +153 -8
  22. package/plugins/copilot-pbr/agents/general.agent.md +46 -1
  23. package/plugins/copilot-pbr/agents/integration-checker.agent.md +55 -2
  24. package/plugins/copilot-pbr/agents/plan-checker.agent.md +50 -2
  25. package/plugins/copilot-pbr/agents/planner.agent.md +80 -1
  26. package/plugins/copilot-pbr/agents/researcher.agent.md +50 -2
  27. package/plugins/copilot-pbr/agents/synthesizer.agent.md +49 -1
  28. package/plugins/copilot-pbr/agents/verifier.agent.md +114 -13
  29. package/plugins/copilot-pbr/commands/test.md +5 -0
  30. package/plugins/copilot-pbr/hooks/hooks.json +11 -0
  31. package/plugins/copilot-pbr/plugin.json +1 -1
  32. package/plugins/copilot-pbr/references/agent-contracts.md +27 -0
  33. package/plugins/copilot-pbr/references/checkpoints.md +32 -1
  34. package/plugins/copilot-pbr/references/context-quality-tiers.md +45 -0
  35. package/plugins/copilot-pbr/references/pbr-tools-cli.md +115 -0
  36. package/plugins/copilot-pbr/references/questioning.md +21 -1
  37. package/plugins/copilot-pbr/references/verification-patterns.md +96 -18
  38. package/plugins/copilot-pbr/skills/audit/SKILL.md +19 -3
  39. package/plugins/copilot-pbr/skills/begin/SKILL.md +57 -4
  40. package/plugins/copilot-pbr/skills/build/SKILL.md +39 -2
  41. package/plugins/copilot-pbr/skills/config/SKILL.md +12 -2
  42. package/plugins/copilot-pbr/skills/debug/SKILL.md +12 -1
  43. package/plugins/copilot-pbr/skills/explore/SKILL.md +13 -2
  44. package/plugins/copilot-pbr/skills/health/SKILL.md +13 -5
  45. package/plugins/copilot-pbr/skills/import/SKILL.md +26 -1
  46. package/plugins/copilot-pbr/skills/milestone/SKILL.md +15 -3
  47. package/plugins/copilot-pbr/skills/plan/SKILL.md +50 -0
  48. package/plugins/copilot-pbr/skills/quick/SKILL.md +21 -0
  49. package/plugins/copilot-pbr/skills/review/SKILL.md +45 -0
  50. package/plugins/copilot-pbr/skills/scan/SKILL.md +20 -0
  51. package/plugins/copilot-pbr/skills/setup/SKILL.md +9 -1
  52. package/plugins/copilot-pbr/skills/shared/context-budget.md +10 -0
  53. package/plugins/copilot-pbr/skills/shared/universal-anti-patterns.md +6 -0
  54. package/plugins/copilot-pbr/skills/test/SKILL.md +210 -0
  55. package/plugins/copilot-pbr/templates/SUMMARY-complex.md.tmpl +95 -0
  56. package/plugins/copilot-pbr/templates/SUMMARY-minimal.md.tmpl +48 -0
  57. package/plugins/cursor-pbr/.cursor-plugin/plugin.json +1 -1
  58. package/plugins/cursor-pbr/agents/audit.md +52 -5
  59. package/plugins/cursor-pbr/agents/codebase-mapper.md +49 -1
  60. package/plugins/cursor-pbr/agents/debugger.md +50 -1
  61. package/plugins/cursor-pbr/agents/dev-sync.md +23 -0
  62. package/plugins/cursor-pbr/agents/executor.md +153 -8
  63. package/plugins/cursor-pbr/agents/general.md +46 -1
  64. package/plugins/cursor-pbr/agents/integration-checker.md +54 -1
  65. package/plugins/cursor-pbr/agents/plan-checker.md +49 -1
  66. package/plugins/cursor-pbr/agents/planner.md +80 -1
  67. package/plugins/cursor-pbr/agents/researcher.md +49 -1
  68. package/plugins/cursor-pbr/agents/synthesizer.md +49 -1
  69. package/plugins/cursor-pbr/agents/verifier.md +113 -12
  70. package/plugins/cursor-pbr/commands/test.md +5 -0
  71. package/plugins/cursor-pbr/hooks/hooks.json +9 -0
  72. package/plugins/cursor-pbr/references/agent-contracts.md +27 -0
  73. package/plugins/cursor-pbr/references/checkpoints.md +32 -1
  74. package/plugins/cursor-pbr/references/context-quality-tiers.md +45 -0
  75. package/plugins/cursor-pbr/references/pbr-tools-cli.md +115 -0
  76. package/plugins/cursor-pbr/references/questioning.md +21 -1
  77. package/plugins/cursor-pbr/references/verification-patterns.md +96 -18
  78. package/plugins/cursor-pbr/skills/audit/SKILL.md +19 -3
  79. package/plugins/cursor-pbr/skills/begin/SKILL.md +57 -4
  80. package/plugins/cursor-pbr/skills/build/SKILL.md +37 -2
  81. package/plugins/cursor-pbr/skills/config/SKILL.md +12 -2
  82. package/plugins/cursor-pbr/skills/debug/SKILL.md +12 -1
  83. package/plugins/cursor-pbr/skills/explore/SKILL.md +13 -2
  84. package/plugins/cursor-pbr/skills/health/SKILL.md +14 -5
  85. package/plugins/cursor-pbr/skills/import/SKILL.md +26 -1
  86. package/plugins/cursor-pbr/skills/milestone/SKILL.md +15 -3
  87. package/plugins/cursor-pbr/skills/plan/SKILL.md +50 -0
  88. package/plugins/cursor-pbr/skills/quick/SKILL.md +21 -0
  89. package/plugins/cursor-pbr/skills/review/SKILL.md +45 -0
  90. package/plugins/cursor-pbr/skills/scan/SKILL.md +20 -0
  91. package/plugins/cursor-pbr/skills/setup/SKILL.md +9 -1
  92. package/plugins/cursor-pbr/skills/shared/context-budget.md +10 -0
  93. package/plugins/cursor-pbr/skills/shared/universal-anti-patterns.md +6 -0
  94. package/plugins/cursor-pbr/skills/test/SKILL.md +211 -0
  95. package/plugins/cursor-pbr/templates/SUMMARY-complex.md.tmpl +95 -0
  96. package/plugins/cursor-pbr/templates/SUMMARY-minimal.md.tmpl +48 -0
  97. package/plugins/pbr/.claude-plugin/plugin.json +1 -1
  98. package/plugins/pbr/agents/audit.md +45 -0
  99. package/plugins/pbr/agents/codebase-mapper.md +48 -0
  100. package/plugins/pbr/agents/debugger.md +49 -0
  101. package/plugins/pbr/agents/dev-sync.md +23 -0
  102. package/plugins/pbr/agents/executor.md +151 -6
  103. package/plugins/pbr/agents/general.md +45 -0
  104. package/plugins/pbr/agents/integration-checker.md +53 -0
  105. package/plugins/pbr/agents/plan-checker.md +48 -0
  106. package/plugins/pbr/agents/planner.md +78 -1
  107. package/plugins/pbr/agents/researcher.md +48 -0
  108. package/plugins/pbr/agents/synthesizer.md +48 -0
  109. package/plugins/pbr/agents/verifier.md +112 -11
  110. package/plugins/pbr/commands/test.md +5 -0
  111. package/plugins/pbr/hooks/hooks.json +9 -0
  112. package/plugins/pbr/references/agent-contracts.md +27 -0
  113. package/plugins/pbr/references/checkpoints.md +32 -0
  114. package/plugins/pbr/references/context-quality-tiers.md +45 -0
  115. package/plugins/pbr/references/pbr-tools-cli.md +115 -0
  116. package/plugins/pbr/references/questioning.md +21 -0
  117. package/plugins/pbr/references/verification-patterns.md +96 -17
  118. package/plugins/pbr/scripts/check-plan-format.js +13 -1
  119. package/plugins/pbr/scripts/check-state-sync.js +26 -7
  120. package/plugins/pbr/scripts/check-subagent-output.js +30 -2
  121. package/plugins/pbr/scripts/config-schema.json +11 -1
  122. package/plugins/pbr/scripts/context-bridge.js +265 -0
  123. package/plugins/pbr/scripts/lib/config.js +271 -0
  124. package/plugins/pbr/scripts/lib/core.js +587 -0
  125. package/plugins/pbr/scripts/lib/history.js +73 -0
  126. package/plugins/pbr/scripts/lib/init.js +166 -0
  127. package/plugins/pbr/scripts/lib/migrate.js +169 -0
  128. package/plugins/pbr/scripts/lib/phase.js +364 -0
  129. package/plugins/pbr/scripts/lib/roadmap.js +175 -0
  130. package/plugins/pbr/scripts/lib/state.js +397 -0
  131. package/plugins/pbr/scripts/lib/todo.js +300 -0
  132. package/plugins/pbr/scripts/pbr-tools.js +425 -1310
  133. package/plugins/pbr/scripts/post-write-dispatch.js +5 -4
  134. package/plugins/pbr/scripts/pre-write-dispatch.js +1 -1
  135. package/plugins/pbr/scripts/progress-tracker.js +1 -1
  136. package/plugins/pbr/scripts/suggest-compact.js +1 -1
  137. package/plugins/pbr/scripts/track-context-budget.js +53 -2
  138. package/plugins/pbr/scripts/validate-task.js +20 -28
  139. package/plugins/pbr/skills/audit/SKILL.md +19 -3
  140. package/plugins/pbr/skills/begin/SKILL.md +48 -2
  141. package/plugins/pbr/skills/build/SKILL.md +39 -2
  142. package/plugins/pbr/skills/config/SKILL.md +12 -2
  143. package/plugins/pbr/skills/debug/SKILL.md +12 -1
  144. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +12 -1
  145. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +12 -5
  146. package/plugins/pbr/skills/explore/SKILL.md +13 -2
  147. package/plugins/pbr/skills/health/SKILL.md +14 -3
  148. package/plugins/pbr/skills/help/SKILL.md +2 -0
  149. package/plugins/pbr/skills/import/SKILL.md +26 -1
  150. package/plugins/pbr/skills/milestone/SKILL.md +15 -3
  151. package/plugins/pbr/skills/plan/SKILL.md +52 -2
  152. package/plugins/pbr/skills/quick/SKILL.md +21 -0
  153. package/plugins/pbr/skills/review/SKILL.md +46 -0
  154. package/plugins/pbr/skills/scan/SKILL.md +20 -0
  155. package/plugins/pbr/skills/setup/SKILL.md +9 -1
  156. package/plugins/pbr/skills/shared/context-budget.md +10 -0
  157. package/plugins/pbr/skills/shared/universal-anti-patterns.md +6 -0
  158. package/plugins/pbr/skills/test/SKILL.md +212 -0
  159. package/plugins/pbr/templates/SUMMARY-complex.md.tmpl +95 -0
  160. package/plugins/pbr/templates/SUMMARY-minimal.md.tmpl +48 -0
@@ -283,3 +283,118 @@ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js event error hook-failure '{"scri
283
283
  **Output:** `{ "logged": true, "category": "build", "event": "plan-complete" }`
284
284
 
285
285
  If the JSON-details argument is not valid JSON, it's stored as `{ "raw": "<the string>" }`.
286
+
287
+ ---
288
+
289
+ ## Compound Init Commands
290
+
291
+ Compound commands that compose multiple data sources into a single JSON response.
292
+ Replace multi-step context loading in skills with a single CLI call.
293
+
294
+ ### `init execute-phase <phase>`
295
+
296
+ Everything an executor needs to start building a phase.
297
+
298
+ ```bash
299
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js init execute-phase 3
300
+ ```
301
+
302
+ **Output:**
303
+ ```json
304
+ {
305
+ "executor_model": "sonnet",
306
+ "verifier_model": "sonnet",
307
+ "config": { "depth": "standard", "mode": "interactive", "parallelization": {}, "planning": {}, "gates": {}, "features": {} },
308
+ "phase": { "num": "3", "dir": "03-auth", "name": "auth", "goal": "...", "has_context": false, "status": "planned", "plan_count": 2, "completed": 0 },
309
+ "plans": [{ "file": "PLAN-01.md", "plan_id": "01", "wave": 1, "autonomous": true, "has_summary": false, "must_haves_count": 4, "depends_on": [] }],
310
+ "waves": { "wave_1": ["01", "02"] },
311
+ "branch_name": "main",
312
+ "git_clean": true
313
+ }
314
+ ```
315
+
316
+ ### `init plan-phase <phase>`
317
+
318
+ Everything a planner needs to start phase planning.
319
+
320
+ ```bash
321
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js init plan-phase 3
322
+ ```
323
+
324
+ **Output:** `researcher_model`, `planner_model`, `checker_model`, `config` (depth profile, features, planning settings), `phase` (num, dir, goal, depends_on), `existing_artifacts`, `workflow` flags.
325
+
326
+ ### `init quick <description>`
327
+
328
+ Everything the quick skill needs: next task number, slug, directory path.
329
+
330
+ ```bash
331
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js init quick "add search feature"
332
+ ```
333
+
334
+ **Output:** `next_task_number`, `slug`, `dir`, `dir_name`, `timestamp`, `config` subset.
335
+
336
+ ### `init verify-work <phase>`
337
+
338
+ Everything a verifier needs to start verification.
339
+
340
+ ```bash
341
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js init verify-work 3
342
+ ```
343
+
344
+ **Output:** `verifier_model`, `phase` info, `has_verification`, `prior_attempts`, `prior_status`, `summaries`.
345
+
346
+ ### `init resume`
347
+
348
+ Detect interrupted state and suggest continuation.
349
+
350
+ ```bash
351
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js init resume
352
+ ```
353
+
354
+ **Output:** `state`, `auto_next`, `continue_here`, `active_skill`, `current_phase`, `progress`.
355
+
356
+ ### `init progress`
357
+
358
+ All phases with status and completion data.
359
+
360
+ ```bash
361
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js init progress
362
+ ```
363
+
364
+ **Output:** `current_phase`, `total_phases`, `status`, `phases` array, `total_plans`, `completed_plans`, `percentage`.
365
+
366
+ ---
367
+
368
+ ## State Mutation Extensions
369
+
370
+ ### `state patch <JSON>`
371
+
372
+ Multi-field atomic STATE.md update. Updates all fields in a single pass.
373
+
374
+ ```bash
375
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state patch '{"status":"executing","last_activity":"now"}'
376
+ ```
377
+
378
+ **Valid fields:** `current_phase`, `status`, `plans_complete`, `last_activity`, `progress_percent`, `phase_slug`, `total_phases`, `last_command`, `blockers`
379
+
380
+ **Output:** `{ "success": true, "updated": ["status", "last_activity"] }`
381
+
382
+ ### `state advance-plan`
383
+
384
+ Increment current plan number in STATE.md and update progress percentage.
385
+
386
+ ```bash
387
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state advance-plan
388
+ ```
389
+
390
+ **Output:** `{ "success": true, "previous_plan": 1, "current_plan": 2, "total_plans": 5, "progress_percent": 40 }`
391
+
392
+ ### `state record-metric [--duration Nm] [--plans-completed N]`
393
+
394
+ Record session/execution metrics. Appends to HISTORY.md and updates last_activity.
395
+
396
+ ```bash
397
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state record-metric --duration 15m --plans-completed 3
398
+ ```
399
+
400
+ **Output:** `{ "success": true, "duration_minutes": 15, "plans_completed": 3 }`
@@ -1,4 +1,3 @@
1
- <!-- canonical: ../../pbr/references/questioning.md -->
2
1
  # Deep Questioning Guide
3
2
 
4
3
  Techniques for understanding a user's project vision during `/pbr:begin`. The goal is to build a complete mental model of what needs to be built, not just a feature list.
@@ -213,3 +212,24 @@ See **[skills/shared/domain-probes.md](../shared/domain-probes.md)** for technol
213
212
  9. **DO NOT** lead the user toward a particular solution
214
213
  10. **DO NOT** forget to summarize and confirm understanding
215
214
  11. **DO NOT** ask what you already know — track what the user has stated and never re-ask it. If they said "I'm using React", do not later ask "Are you using a frontend framework?" If they said "PostgreSQL", do not ask "What database are you using?" Redundant questions waste exchanges and erode trust. Instead, build on what you know: "You mentioned React — are you using Next.js or plain CRA?"
215
+
216
+ ---
217
+
218
+ ## Dream Extraction Philosophy
219
+
220
+ The goal of questioning is not to gather requirements — it's to extract the user's dream and make it buildable.
221
+
222
+ ### 4-Item Context Checklist
223
+ Before planning can begin, you must know:
224
+ 1. **What** are we building? (concrete deliverable, not abstract concept)
225
+ 2. **Why** does it exist? (the problem it solves, not the tech it uses)
226
+ 3. **Who** is it for? (specific users, not "everyone")
227
+ 4. **What does done look like?** (observable outcomes, not technical milestones)
228
+
229
+ ### Conversation Rules
230
+ - **Start open**: "Tell me about what you want to build"
231
+ - **Follow energy**: When they light up about something, dig deeper there
232
+ - **Challenge vagueness**: "You said 'user-friendly' — what does that mean specifically?"
233
+ - **Know when to stop**: When you have the 4 items above, move to planning
234
+ - **NEVER ask about technical experience**: It's irrelevant and condescending
235
+ - **NEVER present a menu of options**: Open questions reveal more than multiple choice
@@ -1,13 +1,12 @@
1
- <!-- canonical: ../../pbr/references/verification-patterns.md -->
2
1
  # Goal-Backward Verification Patterns
3
2
 
4
3
  Reference patterns for deriving verification criteria from goals. Used by the planner to create `<verify>` and `<done>` elements, and by the verifier to check phase completion.
5
4
 
6
5
  ---
7
6
 
8
- ## The Three-Layer Check
7
+ ## The Four-Layer Check
9
8
 
10
- Every must-have is verified through three layers, checked in order:
9
+ Every must-have is verified through up to four layers, checked in order:
11
10
 
12
11
  ### Layer 1: Existence
13
12
 
@@ -63,6 +62,28 @@ grep -q "prisma" src/app.ts
63
62
  grep -q "DISCORD_CLIENT_ID" src/auth/discord.ts
64
63
  ```
65
64
 
65
+ ### Layer 4: Functional
66
+
67
+ Does the artifact actually work when executed?
68
+
69
+ ```bash
70
+ # Tests pass
71
+ npm test -- --testPathPattern auth
72
+ pytest tests/test_auth.py -v
73
+
74
+ # Build succeeds
75
+ npm run build
76
+ npx tsc --noEmit
77
+
78
+ # API returns correct data
79
+ curl -s http://localhost:3000/api/auth/login -X POST -d '{"code":"test"}' | jq '.token'
80
+
81
+ # CLI produces expected output
82
+ node src/cli.js --help | grep -q "Usage:"
83
+ ```
84
+
85
+ **When to apply L4:** Only when automated verification commands exist (test suites, build scripts, API endpoints with test data). Skip for items requiring manual/visual testing. L4 is optional — artifacts passing L1-L3 without available automated tests are reported as `PASSED (L3 only)`.
86
+
66
87
  ---
67
88
 
68
89
  ## Verification by Feature Type
@@ -70,41 +91,46 @@ grep -q "DISCORD_CLIENT_ID" src/auth/discord.ts
70
91
  ### API Endpoint
71
92
 
72
93
  ```
73
- Existence: curl returns non-404 status
74
- Substance: curl returns expected response shape (correct fields)
75
- Wiring: endpoint calls the right service, middleware is applied
94
+ Existence: curl returns non-404 status
95
+ Substance: curl returns expected response shape (correct fields)
96
+ Wiring: endpoint calls the right service, middleware is applied
97
+ Functional: POST/GET with test data returns correct response, error cases handled
76
98
  ```
77
99
 
78
100
  ### Database Schema
79
101
 
80
102
  ```
81
- Existence: table/collection exists, can query without error
82
- Substance: columns/fields match specification, constraints are applied
83
- Wiring: application code references the schema, migrations run cleanly
103
+ Existence: table/collection exists, can query without error
104
+ Substance: columns/fields match specification, constraints are applied
105
+ Wiring: application code references the schema, migrations run cleanly
106
+ Functional: CRUD operations work end-to-end, constraints reject invalid data
84
107
  ```
85
108
 
86
109
  ### Authentication
87
110
 
88
111
  ```
89
- Existence: auth routes exist, auth module exports functions
90
- Substance: login flow returns token, invalid creds return error
91
- Wiring: protected routes use auth middleware, tokens are validated
112
+ Existence: auth routes exist, auth module exports functions
113
+ Substance: login flow returns token, invalid creds return error
114
+ Wiring: protected routes use auth middleware, tokens are validated
115
+ Functional: auth tests pass (valid token, expired token, missing token, malformed token)
92
116
  ```
93
117
 
94
118
  ### UI Component
95
119
 
96
120
  ```
97
- Existence: component file exists, exports default component
98
- Substance: component renders expected elements (test or visual check)
99
- Wiring: component is imported in parent, receives correct props, routes to it
121
+ Existence: component file exists, exports default component
122
+ Substance: component renders expected elements (test or visual check)
123
+ Wiring: component is imported in parent, receives correct props, routes to it
124
+ Functional: component tests pass, build succeeds with component included
100
125
  ```
101
126
 
102
127
  ### Configuration
103
128
 
104
129
  ```
105
- Existence: config file exists, environment variables documented
106
- Substance: config values are used (not dead code), defaults are sensible
107
- Wiring: application reads config at startup, config changes take effect
130
+ Existence: config file exists, environment variables documented
131
+ Substance: config values are used (not dead code), defaults are sensible
132
+ Wiring: application reads config at startup, config changes take effect
133
+ Functional: app starts with config, missing config produces clear error message
108
134
  ```
109
135
 
110
136
  ---
@@ -197,3 +223,55 @@ Bad: "Tests pass"
197
223
  Good: "All 5 auth middleware tests pass: valid token, expired token,
198
224
  missing token, malformed token, and correct user extraction"
199
225
  ```
226
+
227
+ ---
228
+
229
+ ## Wiring Verification Patterns
230
+
231
+ 4 concrete patterns for verifying components are actually connected, not just present.
232
+
233
+ ### Pattern 1: Component to API
234
+ 1. Find the fetch/axios call in the component
235
+ 2. Verify the call is NOT commented out
236
+ 3. Verify the response is assigned to state (not discarded)
237
+ 4. Verify error handling exists (try/catch or .catch)
238
+
239
+ ### Pattern 2: API to Database
240
+ 1. Find the database query in the route handler
241
+ 2. Verify `await` is present (not fire-and-forget)
242
+ 3. Verify the result is returned in the response (not discarded)
243
+ 4. Verify error cases return appropriate HTTP status codes
244
+
245
+ ### Pattern 3: Form to Handler
246
+ 1. Find the form's onSubmit handler
247
+ 2. Verify it calls an API function (not just preventDefault)
248
+ 3. Verify form validation runs before the API call
249
+ 4. Verify success/error feedback is shown to the user
250
+
251
+ ### Pattern 4: State to Render
252
+ 1. Find state variables (useState, store, etc.)
253
+ 2. Verify they appear in JSX/template via .map(), interpolation, or conditional rendering
254
+ 3. Verify loading/error states are rendered (not just success state)
255
+ 4. Verify empty state is handled (not just "no data" crash)
256
+
257
+ ### Quick Verification Checklists
258
+
259
+ **Component Checklist (8 items):**
260
+ - [ ] Component file exists and exports correctly
261
+ - [ ] Props/types are defined (not `any`)
262
+ - [ ] API calls use actual endpoints (not hardcoded data)
263
+ - [ ] Loading state renders something meaningful
264
+ - [ ] Error state renders something meaningful
265
+ - [ ] Empty state renders something meaningful
266
+ - [ ] User interactions trigger actual handlers
267
+ - [ ] Component is imported and rendered in parent
268
+
269
+ **API Route Checklist (8 items):**
270
+ - [ ] Route file exists and exports handler
271
+ - [ ] Route is registered in router/app
272
+ - [ ] Request validation exists (body, params, query)
273
+ - [ ] Database query uses parameterized inputs
274
+ - [ ] Success response includes expected data shape
275
+ - [ ] Error response includes status code and message
276
+ - [ ] Authentication/authorization check exists if needed
277
+ - [ ] Response matches what the frontend expects
@@ -135,7 +135,12 @@ For each session:
135
135
  ```
136
136
  Task({
137
137
  subagent_type: "pbr:audit",
138
- prompt: "<audit_assignment>
138
+ prompt: "<files_to_read>
139
+ CRITICAL: Read these files BEFORE any other action:
140
+ 1. {absolute_path_to_session.jsonl} — session log to analyze
141
+ 2. {subagent log paths, if any} — subagent session logs
142
+ </files_to_read>
143
+ <audit_assignment>
139
144
  Session JSONL: {absolute_path_to_session.jsonl}
140
145
  Subagent logs: {list of subagent jsonl paths, or 'none'}
141
146
  Audit mode: {mode}
@@ -171,7 +176,9 @@ Display progress:
171
176
 
172
177
  ## Step 5 — Collect and Synthesize
173
178
 
174
- As agents complete, collect their findings. Wait for all agents before proceeding.
179
+ As agents complete, check each audit agent's Task() output for `## AUDIT COMPLETE`. If the marker is absent, mark that session as "analysis failed" in the synthesis and skip its findings — do not treat incomplete output as valid analysis. Log: `⚠ Session {id}: audit agent did not return completion marker — skipping.`
180
+
181
+ Wait for all agents before proceeding.
175
182
 
176
183
  Synthesize across all sessions:
177
184
 
@@ -256,6 +263,15 @@ The report should follow this structure:
256
263
 
257
264
  ---
258
265
 
266
+ ## Step 6b — Spot-Check Artifacts
267
+
268
+ **Before displaying results, verify the report landed on disk:**
269
+
270
+ 1. Glob `.planning/audits/{YYYY-MM-DD}-session-audit.md` to confirm the file exists
271
+ 2. If missing: re-attempt the write (Step 6). If still missing, display an error and include findings inline instead.
272
+
273
+ ---
274
+
259
275
  ## Step 7 — Display Summary
260
276
 
261
277
  After writing the report, display inline (keep it concise — the full report is on disk):
@@ -287,7 +303,7 @@ Full report: .planning/audits/{filename}
287
303
  - If todos identified: **Create todos** → `/pbr:todo add "{description}"`
288
304
  - Default: **See project status** → `/pbr:status`
289
305
 
290
- `/clear` first → fresh context window
306
+ <sub>`/clear` first → fresh context window</sub>
291
307
  ```
292
308
 
293
309
  ---
@@ -226,6 +226,14 @@ For each researcher, construct the prompt by reading the template and filling in
226
226
 
227
227
  Read `skills/begin/templates/researcher-prompt.md.tmpl` for the prompt structure.
228
228
 
229
+ **Prepend this block to the researcher prompt before sending:**
230
+ ```
231
+ <files_to_read>
232
+ CRITICAL: Read these files BEFORE any other action:
233
+ 1. .planning/REQUIREMENTS.md — scoped requirements (if exists)
234
+ </files_to_read>
235
+ ```
236
+
229
237
  **Placeholders to fill:**
230
238
  - `{project name from questioning}` — project name gathered in Step 2
231
239
  - `{2-3 sentence description from questioning}` — project description from Step 2
@@ -268,6 +276,11 @@ Read `skills/begin/templates/researcher-prompt.md.tmpl` for the prompt structure
268
276
  - When all complete: "All {N} researchers finished. Proceeding to synthesis."
269
277
  - Wait for all to complete before proceeding
270
278
 
279
+ **After each researcher completes**, check the agent output for a completion marker:
280
+ - If `## RESEARCH COMPLETE` is present: researcher finished successfully, proceed
281
+ - If `## RESEARCH BLOCKED` is present: warn the user that research could not complete, ask if they want to proceed with limited context or stop
282
+ - If neither marker is present: warn that researcher may not have completed successfully, but proceed if output files exist on disk
283
+
271
284
  ---
272
285
 
273
286
  ### Step 6: Synthesis (delegated to agent)
@@ -284,12 +297,38 @@ Invoke the `@synthesizer` agent with the synthesis prompt.
284
297
 
285
298
  Read `skills/begin/templates/synthesis-prompt.md.tmpl` for the prompt structure.
286
299
 
300
+ **Prepend this block to the synthesizer prompt before sending:**
301
+ ```
302
+ <files_to_read>
303
+ CRITICAL: Read these files BEFORE any other action:
304
+ 1. .planning/research/*.md — all research output files from Step 5
305
+ </files_to_read>
306
+ ```
307
+
287
308
  **Placeholders to fill:**
288
309
  - `{List all .planning/research/*.md files that were created}` — list the research files produced in Step 5
289
310
 
290
- **After the synthesizer completes**, display:
311
+ **After the synthesizer completes**, check for completion markers in the Task() output:
312
+
313
+ - If `## SYNTHESIS COMPLETE` is present: proceed normally
314
+ - If `## SYNTHESIS BLOCKED` is present: warn the user and offer to proceed without synthesis:
315
+ ```
316
+ ⚠ Synthesizer reported BLOCKED: {reason from output}
317
+ Research files are still available individually in .planning/research/.
318
+ ```
319
+ Use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`):
320
+ question: "Synthesis was blocked. Continue without synthesis?"
321
+ header: "Blocked"
322
+ options:
323
+ - label: "Yes" description: "Proceed to requirements — use individual research files"
324
+ - label: "No" description: "Stop and investigate"
325
+ - If "Yes": proceed to Step 7 without SUMMARY.md
326
+ - If "No": stop and suggest reviewing .planning/research/ files
327
+ - If neither marker is found: warn the user that the synthesizer may not have completed successfully, but proceed if SUMMARY.md exists on disk
328
+
329
+ If synthesis succeeded, display:
291
330
  ```
292
- Research synthesis complete — see .planning/research/SUMMARY.md
331
+ Research synthesis complete — see .planning/research/SUMMARY.md
293
332
  ```
294
333
 
295
334
  ---
@@ -353,12 +392,26 @@ Invoke the `@planner` agent in roadmap mode with the roadmap prompt.
353
392
 
354
393
  Read `skills/begin/templates/roadmap-prompt.md.tmpl` for the prompt structure.
355
394
 
395
+ **Prepend this block to the roadmap planner prompt before sending:**
396
+ ```
397
+ <files_to_read>
398
+ CRITICAL: Read these files BEFORE any other action:
399
+ 1. .planning/REQUIREMENTS.md — scoped requirements for phase planning
400
+ 2. .planning/research/SUMMARY.md — research synthesis (if exists)
401
+ </files_to_read>
402
+ ```
403
+
356
404
  **Placeholders to fill:**
357
405
  - `{project name}` — project name from Step 2
358
406
  - `{description}` — project description from Step 2
359
407
  - `{quick|standard|comprehensive}` — depth setting from Step 3
360
408
 
361
- **After the planner completes:**
409
+ **After the planner completes**, check the agent output for a completion marker:
410
+ - If `## PLANNING COMPLETE` is present: planner finished successfully, proceed
411
+ - If `## PLANNING FAILED` is present: warn the user that planning could not complete, display the reason, and offer to retry or abort
412
+ - If neither marker is present: warn that planner may not have completed successfully, but proceed if ROADMAP.md exists on disk
413
+
414
+ - **Spot-check:** Verify `.planning/ROADMAP.md` exists on disk using Glob before attempting to read it. If missing, the planner may have failed silently — warn: `⚠ ROADMAP.md not found after planner completed. Re-spawning planner...` and retry once.
362
415
  - Read `.planning/ROADMAP.md`
363
416
  - Count the phases and milestones from the roadmap content
364
417
  - Display:
@@ -505,7 +558,7 @@ Delete `.planning/.active-skill` if it exists. This must happen on all paths (su
505
558
 
506
559
  After all steps complete, present the final summary using the stage banner format from Read `references/ui-formatting.md`:
507
560
 
508
- Display the `PROJECT INITIALIZED` banner with project name, core value, phase list, and requirement counts. Then display the "Next Up" block (see § "Next Up Block" in ui-formatting.md) pointing to `/pbr:discuss 1` with alternatives: `/pbr:explore`, `/pbr:plan 1`, `/pbr:config`.
561
+ Display the `PROJECT INITIALIZED ✓` banner with project name, core value, phase list, and requirement counts. Then display the "Next Up" block (see § "Next Up Block" in ui-formatting.md) pointing to `/pbr:discuss 1` with alternatives: `/pbr:explore`, `/pbr:plan 1`, `/pbr:milestone new`, `/pbr:config`. Include `<sub>/clear first → fresh context window</sub>` inside the Next Up routing block.
509
562
 
510
563
  ---
511
564
 
@@ -132,6 +132,8 @@ Phase {N} depends on Phase {M}, which is not complete.
132
132
 
133
133
  ### Step 2: Load Config (inline)
134
134
 
135
+ **Init-first pattern**: When spawning agents, pass the output of `node plugins/pbr/scripts/pbr-tools.js init execute-phase {N}` as context rather than having the agent read multiple files separately. This reduces file reads and prevents context-loading failures.
136
+
135
137
  Read configuration values needed for execution. See `skills/shared/config-loading.md` for the full field reference; build uses: `parallelization.*`, `features.goal_verification`, `features.inline_verify`, `features.atomic_commits`, `features.auto_continue`, `features.auto_advance`, `planning.commit_docs`, `git.commit_format`, `git.branching`.
136
138
 
137
139
  ---
@@ -301,6 +303,13 @@ Construct the executor prompt:
301
303
  ```
302
304
  You are the executor agent. Execute the following plan.
303
305
 
306
+ <files_to_read>
307
+ CRITICAL: Read these files BEFORE any other action:
308
+ 1. .planning/phases/{NN}-{slug}/{plan_id}-PLAN.md — the full plan with task details
309
+ 2. .planning/CONTEXT.md — locked decisions and constraints (if exists)
310
+ 3. .planning/STATE.md — current project state and progress
311
+ </files_to_read>
312
+
304
313
  <plan_summary>
305
314
  [Inline only the ## Summary section from PLAN.md]
306
315
  </plan_summary>
@@ -370,7 +379,9 @@ Task({
370
379
  prompt: <executor prompt constructed above>
371
380
  })
372
381
 
373
- NOTE: The pbr:executor agent type auto-loads the agent definition. Do NOT inline it.
382
+ NOTE: The pbr:executor agent type auto-loads the agent definition.
383
+
384
+ After executor completes, check for completion markers: `## PLAN COMPLETE`, `## PLAN FAILED`, or `## CHECKPOINT: {TYPE}`. Route accordingly — PLAN COMPLETE proceeds to next plan, PLAN FAILED triggers failure handling, CHECKPOINT triggers checkpoint flow. Do NOT inline it.
374
385
  ```
375
386
 
376
387
  **Path resolution**: Before constructing the agent prompt, resolve `${PLUGIN_ROOT}` to its absolute path. Do not pass the variable literally in prompts — Task() contexts may not expand it. Use the resolved absolute path for any pbr-tools.js or template references included in the prompt.
@@ -406,6 +417,11 @@ After reading each SUMMARY, perform a lightweight verification:
406
417
  - If ANY spot-check fails, warn the user before proceeding to the next wave:
407
418
  "Spot-check failed for plan {id}: {detail}. Inspect before continuing?"
408
419
 
420
+ **Additional wave spot-checks:**
421
+ - Check for `## Self-Check: FAILED` in SUMMARY.md — if present, warn user before proceeding to next wave
422
+ - Between waves: verify no file conflicts from parallel executors (check `git status` for uncommitted changes)
423
+ - If ANY spot-check fails, present user with: **Retry this plan** / **Continue to next wave** / **Abort build**
424
+
409
425
  **Read executor deviations:**
410
426
 
411
427
  After all executors in the wave complete, read all SUMMARY frontmatter and:
@@ -448,7 +464,14 @@ For each plan that completed successfully in this wave:
448
464
  Task({
449
465
  agent_type: "pbr:verifier",
450
466
  model: "haiku",
451
- prompt: "Targeted inline verification for plan {plan_id}.
467
+ prompt: "<files_to_read>
468
+ CRITICAL: Read these files BEFORE any other action:
469
+ 1. .planning/phases/{NN}-{slug}/{plan_id}-PLAN.md — must-haves to verify against
470
+ 2. .planning/phases/{NN}-{slug}/SUMMARY-{plan_id}.md — what the executor claims was built
471
+ 3. .planning/phases/{NN}-{slug}/VERIFICATION.md — prior verification results (if exists)
472
+ </files_to_read>
473
+
474
+ Targeted inline verification for plan {plan_id}.
452
475
 
453
476
  Verify ONLY these files: {comma-separated key_files list}
454
477
 
@@ -653,6 +676,8 @@ Task({
653
676
  })
654
677
 
655
678
  NOTE: The pbr:verifier agent type auto-loads the agent definition. Do NOT inline it.
679
+
680
+ After verifier completes, check for completion marker: `## VERIFICATION COMPLETE`. Read VERIFICATION.md frontmatter for status.
656
681
  ```
657
682
 
658
683
  **Path resolution**: Before constructing the agent prompt, resolve `${PLUGIN_ROOT}` to its absolute path. Do not pass the variable literally in prompts — Task() contexts may not expand it. Use the resolved absolute path for any pbr-tools.js or template references included in the prompt.
@@ -661,6 +686,16 @@ NOTE: The pbr:verifier agent type auto-loads the agent definition. Do NOT inline
661
686
 
662
687
  Use the same verifier prompt template as defined in `/pbr:review`: read `skills/review/templates/verifier-prompt.md.tmpl` and fill in its placeholders with the phase's PLAN.md must_haves and SUMMARY.md file paths. This avoids maintaining duplicate verifier prompts across skills.
663
688
 
689
+ **Prepend this block to the verifier prompt before sending:**
690
+ ```
691
+ <files_to_read>
692
+ CRITICAL: Read these files BEFORE any other action:
693
+ 1. .planning/phases/{NN}-{slug}/PLAN-*.md — must-haves to verify against
694
+ 2. .planning/phases/{NN}-{slug}/SUMMARY-*.md — executor build summaries
695
+ 3. .planning/phases/{NN}-{slug}/VERIFICATION.md — prior verification results (if exists)
696
+ </files_to_read>
697
+ ```
698
+
664
699
  After the verifier returns, read the VERIFICATION.md frontmatter and display the results:
665
700
 
666
701
  - If status is `passed`: display `✓ Verifier: {X}/{Y} must-haves verified` (where X = `must_haves_passed` and Y = `must_haves_checked`)
@@ -825,6 +860,8 @@ Then present the appropriate branded banner from Read `references/ui-formatting.
825
860
  - **If `passed` + last phase:** Use the "Milestone Complete" template. Fill in phase count.
826
861
  - **If `gaps_found`:** Use the "Gaps Found" template. Fill in phase number, name, score, and gap summaries from VERIFICATION.md.
827
862
 
863
+ Include `<sub>/clear first → fresh context window</sub>` inside the Next Up routing block of the completion template.
864
+
828
865
  **8g. Display USER-SETUP.md (conditional):**
829
866
 
830
867
  Check if `.planning/phases/{NN}-{slug}/USER-SETUP.md` exists. If it does:
@@ -112,10 +112,11 @@ Use AskUserQuestion:
112
112
  - label: "Depth" description: "quick/standard/comprehensive"
113
113
  - label: "Model profile" description: "quality/balanced/budget/adaptive"
114
114
  - label: "Features" description: "Toggle workflow features, gates, status line"
115
- - label: "Git settings" description: "branching strategy, commit mode"
115
+ - label: "Git settings" description: "branching strategy, commit mode"
116
+ - label: "Save as defaults" description: "Save current config as user-level defaults for new projects"
116
117
  multiSelect: false
117
118
 
118
- Note: The original 7 categories are condensed to 4. "Models" (per-agent) is accessible through "Model profile" with a follow-up option. "Gates", "Parallelization", and "Status Line" are grouped under "Features".
119
+ Note: The original 7 categories are condensed to 5. "Models" (per-agent) is accessible through "Model profile" with a follow-up option. "Gates", "Parallelization", and "Status Line" are grouped under "Features". "Save as defaults" exports to ~/.claude/pbr-defaults.json.
119
120
 
120
121
  **Follow-up based on selection:**
121
122
 
@@ -178,6 +179,15 @@ Use AskUserQuestion:
178
179
  - label: "Disabled" description: "No git integration"
179
180
  multiSelect: false
180
181
 
182
+ If user selects "Save as defaults":
183
+ Save current project config as user-level defaults for future projects:
184
+
185
+ ```bash
186
+ node "${PLUGIN_ROOT}/scripts/pbr-tools.js" config save-defaults
187
+ ```
188
+
189
+ Display: "Saved your preferences to ~/.claude/pbr-defaults.json. New projects created with /pbr:setup will use these as starting values."
190
+
181
191
  If user types something else (freeform): interpret as a direct setting command and handle via Step 2 argument parsing logic.
182
192
 
183
193
  ### 4. Apply Changes
@@ -209,7 +209,18 @@ Continuing investigation...
209
209
 
210
210
  ### Step 4: Handle Debugger Results
211
211
 
212
- When the debugger agent completes, display: `✓ Debug session complete {N} hypotheses tested` (read the hypothesis count from the debug file's Hypotheses table).
212
+ When the debugger agent completes, first check for completion markers in the Task() output before routing:
213
+
214
+ | Marker in Task() Output | Route To |
215
+ |--------------------------|----------|
216
+ | `## DEBUG COMPLETE` | ROOT CAUSE FOUND + FIX path |
217
+ | `## ROOT CAUSE FOUND` | ROOT CAUSE FOUND (no fix) path |
218
+ | `## DEBUG SESSION PAUSED` | CHECKPOINT path |
219
+ | No marker found | INCONCLUSIVE path |
220
+
221
+ **Spot-check:** Before routing, verify `.planning/debug/{NNN}-{slug}.md` exists and was recently updated (modified timestamp is newer than the Task() spawn time). If the debug file was not updated, warn: `⚠ Debug file not updated by agent — results may be incomplete.`
222
+
223
+ Display: `✓ Debug session complete — {N} hypotheses tested` (read the hypothesis count from the debug file's Hypotheses table).
213
224
 
214
225
  The debugger returns one of four outcomes:
215
226
 
@@ -118,7 +118,12 @@ Display to the user: `◐ Spawning researcher...`
118
118
  ```
119
119
  Task({
120
120
  subagent_type: "pbr:researcher",
121
- prompt: "<research_assignment>
121
+ prompt: "<files_to_read>
122
+ CRITICAL: Read these files BEFORE any other action:
123
+ 1. .planning/CONTEXT.md — locked decisions and constraints (if exists)
124
+ 2. .planning/STATE.md — current project state (if exists)
125
+ </files_to_read>
126
+ <research_assignment>
122
127
  Topic: {specific research question}
123
128
  Output file: .planning/research/{topic-slug}.md
124
129
  Mode: project-research
@@ -130,7 +135,13 @@ Task({
130
135
  })
131
136
  ```
132
137
 
133
- After the researcher completes, display: `✓ Research complete results in .planning/research/{topic-slug}.md`
138
+ After the researcher completes, check for completion markers in the Task() output:
139
+
140
+ - If `## RESEARCH COMPLETE` is present: proceed normally
141
+ - If `## RESEARCH BLOCKED` is present: display the blocker reason and offer to retry:
142
+ `⚠ Research blocked: {reason}. Try a different angle or continue without research.`
143
+
144
+ Display: `✓ Research complete — results in .planning/research/{topic-slug}.md`
134
145
 
135
146
  Then:
136
147
  - Read ONLY the frontmatter and summary section of the research file (not the full document)