@sienklogic/plan-build-run 2.0.0 → 2.0.2

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 (233) hide show
  1. package/CHANGELOG.md +56 -56
  2. package/CLAUDE.md +149 -149
  3. package/LICENSE +21 -21
  4. package/README.md +247 -247
  5. package/dashboard/bin/cli.js +25 -25
  6. package/dashboard/package.json +34 -34
  7. package/dashboard/public/css/layout.css +406 -406
  8. package/dashboard/public/css/status-colors.css +98 -98
  9. package/dashboard/public/js/htmx-title.js +5 -5
  10. package/dashboard/public/js/sidebar-toggle.js +20 -20
  11. package/dashboard/src/app.js +78 -78
  12. package/dashboard/src/middleware/errorHandler.js +52 -52
  13. package/dashboard/src/middleware/notFoundHandler.js +9 -9
  14. package/dashboard/src/repositories/planning.repository.js +128 -128
  15. package/dashboard/src/routes/events.routes.js +40 -40
  16. package/dashboard/src/routes/index.routes.js +31 -31
  17. package/dashboard/src/routes/pages.routes.js +245 -195
  18. package/dashboard/src/server.js +42 -42
  19. package/dashboard/src/services/dashboard.service.js +222 -222
  20. package/dashboard/src/services/phase.service.js +220 -167
  21. package/dashboard/src/services/project.service.js +57 -57
  22. package/dashboard/src/services/roadmap.service.js +171 -171
  23. package/dashboard/src/services/sse.service.js +58 -58
  24. package/dashboard/src/services/todo.service.js +254 -254
  25. package/dashboard/src/services/watcher.service.js +48 -48
  26. package/dashboard/src/views/coming-soon.ejs +11 -11
  27. package/dashboard/src/views/error.ejs +13 -13
  28. package/dashboard/src/views/index.ejs +5 -5
  29. package/dashboard/src/views/layout.ejs +1 -1
  30. package/dashboard/src/views/partials/dashboard-content.ejs +77 -77
  31. package/dashboard/src/views/partials/footer.ejs +3 -3
  32. package/dashboard/src/views/partials/head.ejs +21 -21
  33. package/dashboard/src/views/partials/header.ejs +12 -12
  34. package/dashboard/src/views/partials/layout-bottom.ejs +15 -15
  35. package/dashboard/src/views/partials/layout-top.ejs +8 -8
  36. package/dashboard/src/views/partials/phase-content.ejs +188 -181
  37. package/dashboard/src/views/partials/phase-doc-content.ejs +38 -0
  38. package/dashboard/src/views/partials/phases-content.ejs +117 -117
  39. package/dashboard/src/views/partials/roadmap-content.ejs +142 -142
  40. package/dashboard/src/views/partials/sidebar.ejs +38 -38
  41. package/dashboard/src/views/partials/todo-create-content.ejs +53 -53
  42. package/dashboard/src/views/partials/todo-detail-content.ejs +38 -38
  43. package/dashboard/src/views/partials/todos-content.ejs +53 -53
  44. package/dashboard/src/views/phase-detail.ejs +5 -5
  45. package/dashboard/src/views/phase-doc.ejs +5 -0
  46. package/dashboard/src/views/phases.ejs +5 -5
  47. package/dashboard/src/views/roadmap.ejs +5 -5
  48. package/dashboard/src/views/todo-create.ejs +5 -5
  49. package/dashboard/src/views/todo-detail.ejs +5 -5
  50. package/dashboard/src/views/todos.ejs +5 -5
  51. package/package.json +57 -57
  52. package/plugins/cursor-pbr/.cursor-plugin/plugin.json +22 -0
  53. package/plugins/cursor-pbr/agents/.gitkeep +0 -0
  54. package/plugins/cursor-pbr/assets/.gitkeep +0 -0
  55. package/plugins/cursor-pbr/hooks/hooks.json +11 -0
  56. package/plugins/cursor-pbr/references/.gitkeep +0 -0
  57. package/plugins/cursor-pbr/rules/.gitkeep +0 -0
  58. package/plugins/cursor-pbr/skills/.gitkeep +0 -0
  59. package/plugins/cursor-pbr/templates/.gitkeep +0 -0
  60. package/plugins/pbr/.claude-plugin/plugin.json +13 -13
  61. package/plugins/pbr/UI-CONSISTENCY-GAPS.md +61 -61
  62. package/plugins/pbr/agents/codebase-mapper.md +279 -271
  63. package/plugins/pbr/agents/debugger.md +281 -281
  64. package/plugins/pbr/agents/executor.md +428 -407
  65. package/plugins/pbr/agents/general.md +164 -164
  66. package/plugins/pbr/agents/integration-checker.md +169 -141
  67. package/plugins/pbr/agents/plan-checker.md +296 -280
  68. package/plugins/pbr/agents/planner.md +358 -358
  69. package/plugins/pbr/agents/researcher.md +363 -363
  70. package/plugins/pbr/agents/synthesizer.md +230 -230
  71. package/plugins/pbr/agents/verifier.md +489 -454
  72. package/plugins/pbr/commands/begin.md +5 -5
  73. package/plugins/pbr/commands/build.md +5 -5
  74. package/plugins/pbr/commands/config.md +5 -5
  75. package/plugins/pbr/commands/continue.md +5 -5
  76. package/plugins/pbr/commands/debug.md +5 -5
  77. package/plugins/pbr/commands/discuss.md +5 -5
  78. package/plugins/pbr/commands/explore.md +5 -5
  79. package/plugins/pbr/commands/health.md +5 -5
  80. package/plugins/pbr/commands/help.md +5 -5
  81. package/plugins/pbr/commands/import.md +5 -5
  82. package/plugins/pbr/commands/milestone.md +5 -5
  83. package/plugins/pbr/commands/note.md +5 -5
  84. package/plugins/pbr/commands/pause.md +5 -5
  85. package/plugins/pbr/commands/plan.md +5 -5
  86. package/plugins/pbr/commands/quick.md +5 -5
  87. package/plugins/pbr/commands/resume.md +5 -5
  88. package/plugins/pbr/commands/review.md +5 -5
  89. package/plugins/pbr/commands/scan.md +5 -5
  90. package/plugins/pbr/commands/setup.md +5 -5
  91. package/plugins/pbr/commands/status.md +5 -5
  92. package/plugins/pbr/commands/todo.md +5 -5
  93. package/plugins/pbr/contexts/dev.md +27 -27
  94. package/plugins/pbr/contexts/research.md +28 -28
  95. package/plugins/pbr/contexts/review.md +36 -36
  96. package/plugins/pbr/hooks/hooks.json +183 -183
  97. package/plugins/pbr/references/agent-anti-patterns.md +24 -24
  98. package/plugins/pbr/references/agent-interactions.md +134 -134
  99. package/plugins/pbr/references/agent-teams.md +54 -54
  100. package/plugins/pbr/references/checkpoints.md +157 -157
  101. package/plugins/pbr/references/common-bug-patterns.md +13 -13
  102. package/plugins/pbr/references/config-reference.md +441 -0
  103. package/plugins/pbr/references/continuation-format.md +212 -212
  104. package/plugins/pbr/references/deviation-rules.md +112 -112
  105. package/plugins/pbr/references/git-integration.md +226 -226
  106. package/plugins/pbr/references/integration-patterns.md +117 -117
  107. package/plugins/pbr/references/model-profiles.md +99 -99
  108. package/plugins/pbr/references/model-selection.md +31 -31
  109. package/plugins/pbr/references/pbr-rules.md +193 -193
  110. package/plugins/pbr/references/plan-authoring.md +181 -181
  111. package/plugins/pbr/references/plan-format.md +287 -283
  112. package/plugins/pbr/references/planning-config.md +213 -213
  113. package/plugins/pbr/references/questioning.md +214 -214
  114. package/plugins/pbr/references/reading-verification.md +127 -127
  115. package/plugins/pbr/references/stub-patterns.md +160 -160
  116. package/plugins/pbr/references/subagent-coordination.md +119 -119
  117. package/plugins/pbr/references/ui-formatting.md +461 -399
  118. package/plugins/pbr/references/verification-patterns.md +198 -198
  119. package/plugins/pbr/references/wave-execution.md +95 -95
  120. package/plugins/pbr/scripts/auto-continue.js +80 -80
  121. package/plugins/pbr/scripts/check-dangerous-commands.js +136 -136
  122. package/plugins/pbr/scripts/check-doc-sprawl.js +102 -102
  123. package/plugins/pbr/scripts/check-phase-boundary.js +196 -196
  124. package/plugins/pbr/scripts/check-plan-format.js +270 -270
  125. package/plugins/pbr/scripts/check-roadmap-sync.js +322 -252
  126. package/plugins/pbr/scripts/check-skill-workflow.js +262 -262
  127. package/plugins/pbr/scripts/check-state-sync.js +476 -476
  128. package/plugins/pbr/scripts/check-subagent-output.js +144 -144
  129. package/plugins/pbr/scripts/config-schema.json +251 -251
  130. package/plugins/pbr/scripts/context-budget-check.js +287 -287
  131. package/plugins/pbr/scripts/event-handler.js +151 -151
  132. package/plugins/pbr/scripts/event-logger.js +92 -92
  133. package/plugins/pbr/scripts/hook-logger.js +80 -76
  134. package/plugins/pbr/scripts/hooks-schema.json +79 -79
  135. package/plugins/pbr/scripts/log-subagent.js +164 -152
  136. package/plugins/pbr/scripts/log-tool-failure.js +88 -88
  137. package/plugins/pbr/scripts/pbr-tools.js +1378 -1301
  138. package/plugins/pbr/scripts/post-write-dispatch.js +66 -66
  139. package/plugins/pbr/scripts/post-write-quality.js +207 -207
  140. package/plugins/pbr/scripts/pre-bash-dispatch.js +86 -56
  141. package/plugins/pbr/scripts/pre-write-dispatch.js +97 -62
  142. package/plugins/pbr/scripts/progress-tracker.js +281 -228
  143. package/plugins/pbr/scripts/run-hook.js +92 -0
  144. package/plugins/pbr/scripts/session-cleanup.js +254 -254
  145. package/plugins/pbr/scripts/status-line.js +288 -285
  146. package/plugins/pbr/scripts/suggest-compact.js +119 -119
  147. package/plugins/pbr/scripts/task-completed.js +45 -45
  148. package/plugins/pbr/scripts/track-context-budget.js +149 -119
  149. package/plugins/pbr/scripts/validate-commit.js +200 -200
  150. package/plugins/pbr/scripts/validate-plugin-structure.js +183 -172
  151. package/plugins/pbr/scripts/validate-task.js +106 -0
  152. package/plugins/pbr/skills/begin/SKILL.md +594 -545
  153. package/plugins/pbr/skills/begin/templates/PROJECT.md.tmpl +33 -33
  154. package/plugins/pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +18 -18
  155. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +49 -49
  156. package/plugins/pbr/skills/begin/templates/config.json.tmpl +64 -63
  157. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +19 -19
  158. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +30 -30
  159. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +16 -16
  160. package/plugins/pbr/skills/build/SKILL.md +943 -962
  161. package/plugins/pbr/skills/config/SKILL.md +256 -241
  162. package/plugins/pbr/skills/continue/SKILL.md +164 -127
  163. package/plugins/pbr/skills/debug/SKILL.md +515 -489
  164. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +16 -16
  165. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +27 -27
  166. package/plugins/pbr/skills/discuss/SKILL.md +347 -338
  167. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +61 -61
  168. package/plugins/pbr/skills/discuss/templates/decision-categories.md +9 -9
  169. package/plugins/pbr/skills/explore/SKILL.md +378 -362
  170. package/plugins/pbr/skills/health/SKILL.md +221 -186
  171. package/plugins/pbr/skills/health/templates/check-pattern.md.tmpl +30 -30
  172. package/plugins/pbr/skills/health/templates/output-format.md.tmpl +63 -63
  173. package/plugins/pbr/skills/help/SKILL.md +155 -140
  174. package/plugins/pbr/skills/import/SKILL.md +504 -490
  175. package/plugins/pbr/skills/milestone/SKILL.md +704 -673
  176. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +48 -48
  177. package/plugins/pbr/skills/milestone/templates/stats-file.md.tmpl +30 -30
  178. package/plugins/pbr/skills/note/SKILL.md +231 -212
  179. package/plugins/pbr/skills/pause/SKILL.md +249 -235
  180. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +71 -71
  181. package/plugins/pbr/skills/plan/SKILL.md +685 -628
  182. package/plugins/pbr/skills/plan/decimal-phase-calc.md +98 -98
  183. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +21 -21
  184. package/plugins/pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +32 -32
  185. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +38 -38
  186. package/plugins/pbr/skills/plan/templates/researcher-prompt.md.tmpl +19 -19
  187. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +23 -23
  188. package/plugins/pbr/skills/quick/SKILL.md +354 -335
  189. package/plugins/pbr/skills/resume/SKILL.md +402 -388
  190. package/plugins/pbr/skills/review/SKILL.md +686 -652
  191. package/plugins/pbr/skills/review/templates/debugger-prompt.md.tmpl +60 -60
  192. package/plugins/pbr/skills/review/templates/gap-planner-prompt.md.tmpl +40 -40
  193. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +115 -115
  194. package/plugins/pbr/skills/scan/SKILL.md +304 -269
  195. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +201 -201
  196. package/plugins/pbr/skills/setup/SKILL.md +253 -227
  197. package/plugins/pbr/skills/shared/commit-planning-docs.md +35 -35
  198. package/plugins/pbr/skills/shared/config-loading.md +102 -102
  199. package/plugins/pbr/skills/shared/context-budget.md +40 -40
  200. package/plugins/pbr/skills/shared/context-loader-task.md +86 -86
  201. package/plugins/pbr/skills/shared/digest-select.md +79 -79
  202. package/plugins/pbr/skills/shared/domain-probes.md +125 -125
  203. package/plugins/pbr/skills/shared/error-reporting.md +79 -79
  204. package/plugins/pbr/skills/shared/gate-prompts.md +388 -388
  205. package/plugins/pbr/skills/shared/phase-argument-parsing.md +45 -45
  206. package/plugins/pbr/skills/shared/progress-display.md +53 -53
  207. package/plugins/pbr/skills/shared/revision-loop.md +81 -81
  208. package/plugins/pbr/skills/shared/state-loading.md +62 -62
  209. package/plugins/pbr/skills/shared/state-update.md +161 -161
  210. package/plugins/pbr/skills/shared/universal-anti-patterns.md +33 -33
  211. package/plugins/pbr/skills/status/SKILL.md +367 -353
  212. package/plugins/pbr/skills/todo/SKILL.md +198 -181
  213. package/plugins/pbr/templates/CONTEXT.md.tmpl +52 -52
  214. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +151 -151
  215. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +97 -97
  216. package/plugins/pbr/templates/ROADMAP.md.tmpl +40 -40
  217. package/plugins/pbr/templates/SUMMARY.md.tmpl +81 -81
  218. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +116 -116
  219. package/plugins/pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -98
  220. package/plugins/pbr/templates/codebase/CONCERNS.md.tmpl +93 -93
  221. package/plugins/pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -104
  222. package/plugins/pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -78
  223. package/plugins/pbr/templates/codebase/STACK.md.tmpl +78 -78
  224. package/plugins/pbr/templates/codebase/STRUCTURE.md.tmpl +80 -80
  225. package/plugins/pbr/templates/codebase/TESTING.md.tmpl +107 -107
  226. package/plugins/pbr/templates/continue-here.md.tmpl +73 -73
  227. package/plugins/pbr/templates/prompt-partials/phase-project-context.md.tmpl +37 -37
  228. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +124 -124
  229. package/plugins/pbr/templates/research/STACK.md.tmpl +71 -71
  230. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +112 -112
  231. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +81 -81
  232. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +99 -99
  233. package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +36 -36
@@ -1,193 +1,193 @@
1
- # Plan-Build-Run Rules
2
-
3
- Authoritative rules for all Plan-Build-Run skills, agents, hooks, and workflows.
4
- Condensed from the 3,100-line `docs/DEVELOPMENT-GUIDE.md`. When in doubt, these rules govern.
5
-
6
- ---
7
-
8
- ## Philosophy
9
-
10
- 1. **Context is precious.** The orchestrator stays lean (~15% usage). Delegate heavy work to subagents.
11
- 2. **State lives on disk.** Skills and agents communicate through `.planning/` files, not messages.
12
- 3. **Agents are black boxes.** Clear input/output contracts. Agents never read other agent definitions.
13
- 4. **Gates provide safety.** Users control pace via config toggles. Never skip a gate.
14
- 5. **One task, one commit.** Atomic commits for clean history and easy rollback.
15
- 6. **Cross-platform always.** `path.join()`, CommonJS, test on Windows/macOS/Linux.
16
- 7. **Test everything.** 70% coverage minimum. All 9 CI matrix combinations must pass.
17
- 8. **PLAN-BUILD-RUN branding only.** Always use `PLAN-BUILD-RUN ►` prefix in banners.
18
-
19
- ---
20
-
21
- ## Context Budget
22
-
23
- 9. Target 15% orchestrator context usage. Warn user at 30%.
24
- 10. **Never** read agent definitions (`agents/*.md`) in the orchestrator — `subagent_type` auto-loads them.
25
- 11. **Never** inline large files into `Task()` prompts — tell agents to read files from disk.
26
- 12. **Never** read full subagent output — read frontmatter only (first 10-20 lines).
27
- 13. Read STATE.md and config.json fully. Read ROADMAP.md by section. Read PLAN.md/SUMMARY.md/VERIFICATION.md frontmatter only.
28
- 14. Use the `limit` parameter on Read to restrict line counts.
29
- 15. Proactively suggest `/pbr:pause` when context gets heavy — before compaction, not after.
30
-
31
- ---
32
-
33
- ## State Management
34
-
35
- 16. STATE.md is the **single source of truth** for current position.
36
- 17. **Never** infer current phase from directory listings, git log, or conversation history.
37
- 18. Always read STATE.md before making state-dependent decisions.
38
- 19. Update STATE.md at: begin, plan, build, review, pause, continue, milestone.
39
- 20. **Never** commit STATE.md mid-skill — hooks handle session persistence.
40
- 21. Agents write artifacts (SUMMARY.md, VERIFICATION.md). Only the orchestrator writes STATE.md.
41
- 22. Every ROADMAP.md phase must have a matching `.planning/phases/` directory, and vice versa.
42
- 23. config.json is validated against `scripts/config-schema.json` on load.
43
-
44
- ---
45
-
46
- ## Agent Spawning
47
-
48
- 24. Always use `subagent_type: "pbr:{name}"` to spawn agents.
49
- 25. Pass file paths to agents, not file contents.
50
- 26. Agents never read other agent definition files.
51
- 27. Each agent gets a fresh 200k token context window — let them do the heavy reading.
52
-
53
- ---
54
-
55
- ## User Interaction Patterns
56
-
57
- 28. Use `AskUserQuestion` for all structured gate checks — never plain-text "Type approved" prompts.
58
- 29. AskUserQuestion is an orchestrator-only tool. It **cannot** be called from subagents (Task contexts).
59
- 30. Max 4 options per AskUserQuestion call. If more options exist, split into a 2-step flow.
60
- 31. `header` field must be max 12 characters. Keep it a single word when possible.
61
- 32. `multiSelect` is always `false` for Plan-Build-Run gate checks.
62
- 33. Always handle the "Other" case — users may type freeform text instead of selecting an option.
63
- 34. Reuse patterns from `skills/shared/gate-prompts.md` by name. Do not reinvent prompts inline.
64
- 35. Do **not** use AskUserQuestion for freeform text input (symptom gathering, Socratic discussion, open-ended questions). Use plain conversation for those.
65
- 36. Skills that do not require user interaction (continue, health, help, pause) intentionally omit AskUserQuestion from allowed-tools.
66
-
67
- ---
68
-
69
- ## Skill Authoring
70
-
71
- 37. Every SKILL.md starts with YAML frontmatter: `name`, `description`, `allowed-tools`, `argument-hint`.
72
- 38. Skills that spawn agents **must** have a `## Context Budget` section.
73
- 39. Mark each step as `(inline)` or `(delegate)` — inline for light work, delegate for analysis.
74
- 40. Reference templates and references by filename — never inline them.
75
- 41. Gate checks: read config toggle → display summary → ask user → proceed/abort/revise.
76
- 42. Use branded UI elements from `references/ui-formatting.md`.
77
-
78
- ---
79
-
80
- ## Agent Authoring
81
-
82
- 43. Every agent file starts with YAML frontmatter: `name`, `description`, `model`, `memory`, `tools`.
83
- 44. Agent name matches the agent file name (no prefix needed).
84
- 45. `tools` array: only include tools the agent actually uses.
85
- 46. Agents write artifacts to disk. They never modify STATE.md or ROADMAP.md.
86
- 47. Agent definitions are self-contained — no cross-agent references.
87
-
88
- ---
89
-
90
- ## Hook Development
91
-
92
- 48. All hooks use **CommonJS** (`require`), never ES modules (`import`).
93
- 49. All hooks call `logHook()` from `hook-logger.js`. No silent exits.
94
- 50. Exit codes: `0` = allow/success, `2` = block (PreToolUse only), other = error (logged, non-blocking).
95
- 51. Hooks receive JSON on stdin, write JSON to stdout.
96
- 52. Fail gracefully: wrap in try/catch, exit 0 on parse errors.
97
- 53. Every hook in `hooks.json` must have a `statusMessage` field (gerund form: "Validating...", keep short).
98
- 54. Windows file deletion: use 3-attempt retry loop to handle AV/indexer locks.
99
- 55. Every hook script must have a corresponding `tests/{name}.test.js`.
100
-
101
- ---
102
-
103
- ## Commits
104
-
105
- 56. Format: `{type}({scope}): {description}`.
106
- 57. Valid types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `wip`.
107
- 58. Valid scopes: `{NN}-{MM}` (phase-plan), `quick-{NNN}`, `planning`, or any lowercase word.
108
- 59. **Never** use `git add .` or `git add -A` — stage specific files only.
109
- 60. Blocked files: `.env` (not `.env.example`), `*.key`, `*.pem`, `*.pfx`, `*.p12`, `*credential*`, `*secret*` (unless in `tests/` or `*.example`).
110
- 61. TDD tasks: exactly 3 commits — RED (test), GREEN (feat), REFACTOR.
111
- 62. Executors: one atomic commit per task.
112
-
113
- ---
114
-
115
- ## Templates
116
-
117
- 63. Default syntax: `{variable}` placeholders for string substitution.
118
- 64. Only use EJS (`<%= %>`, `<% %>`) when loops or conditionals are genuinely needed.
119
- 65. Template files use `.tmpl` extension. Name matches the output file (e.g., `SUMMARY.md.tmpl` → `SUMMARY.md`).
120
- 66. Templates live in `templates/` (global), `templates/codebase/` (scan), `templates/research/` (research), or `skills/{name}/templates/` (skill-specific).
121
-
122
- ---
123
-
124
- ## File Naming
125
-
126
- 67. Skills: `plugins/pbr/skills/{skill-name}/SKILL.md` — lowercase hyphenated dir, uppercase `SKILL.md`.
127
- 68. Agents: `plugins/pbr/agents/{name}.md` — agent name matches file name.
128
- 69. Scripts: `plugins/pbr/scripts/{name}.js` — lowercase, hyphenated, CommonJS.
129
- 70. References: `plugins/pbr/references/{name}.md` — lowercase, hyphenated.
130
- 71. Tests: `tests/{script-name}.test.js` — mirrors the script name.
131
-
132
- ---
133
-
134
- ## Testing
135
-
136
- 72. Test files mirror script names: `scripts/foo.js` → `tests/foo.test.js`.
137
- 73. Use the fixture project at `tests/fixtures/fake-project/` for integration tests.
138
- 74. Hook tests: use stdin/stdout protocol with `execSync()`, timeout 5000ms, run in temp dir.
139
- 75. Coverage target: 70% branches/functions/lines/statements.
140
- 76. CI matrix: Node 18/20/22 × ubuntu/macos/windows. All 9 must pass.
141
- 77. Local pre-push: `npm run lint && npm test && npm run validate`.
142
-
143
- ---
144
-
145
- ## Cross-Platform
146
-
147
- 78. **Never** hardcode `/` or `\` — always `path.join()`.
148
- 79. Use `\n` in string literals — Node.js and Git normalize line endings.
149
- 80. In `hooks.json`, use `${CLAUDE_PLUGIN_ROOT}` — Claude Code expands this internally on all platforms.
150
- 81. **Never** use `$CLAUDE_PLUGIN_ROOT` (shell expansion is platform-dependent).
151
- 82. **Never** rely on execute bits — always invoke via `node script.js`.
152
-
153
- ---
154
-
155
- ## Dependencies & Gates
156
-
157
- 83. Check all `depends_on` plans have SUMMARY.md files before executing.
158
- 84. Checkpoint tasks (`checkpoint:human-verify`) require STOP — write partial SUMMARY.md, return metadata.
159
- 85. Respect all `gates.confirm_*` config toggles. Never auto-proceed when a gate is enabled.
160
-
161
- ---
162
-
163
- ## Logging
164
-
165
- 86. Hook scripts → `logHook()` (writes to `logs/hooks.jsonl`, max 200 entries).
166
- 87. Workflow milestones → `logEvent()` (writes to `logs/events.jsonl`, max 1,000 entries).
167
- 88. Rule of thumb: inside a hook? `logHook()`. Tracking a high-level event? `logEvent()`.
168
-
169
- ---
170
-
171
- ## Gotchas
172
-
173
- 89. JSDoc `*/` in glob patterns closes Babel comments early — use `//` line comments instead.
174
- 90. Regex anchors: use `\b` word boundaries, not `^` anchors (misses chained commands like `cd && git commit`).
175
- 91. Windows cwd locking in tests: use `cwd` option in `execSync()` instead of `process.chdir()`.
176
- 92. PLAN.md frontmatter must include all required fields: `phase`, `plan`, `type`, `wave`, `depends_on`, `files_modified`, `autonomous`, `must_haves`.
177
-
178
- ---
179
-
180
- ## Quick Reference: Never Do This
181
-
182
- | # | Anti-Pattern | Impact |
183
- |---|-------------|--------|
184
- | 1 | Read agent definitions in orchestrator | Context balloons 15% → 88% |
185
- | 2 | Inline large files into Task() prompts | Wasted orchestrator context |
186
- | 3 | Read full subagent output | Context bloat |
187
- | 4 | Use non-Plan-Build-Run branding | User confusion |
188
- | 5 | Hardcode path separators | Cross-platform breakage |
189
- | 6 | Use ES modules in hooks | Hook fails to load |
190
- | 7 | Skip hook logging | Silent failures |
191
- | 8 | Modify STATE.md in agents | Race conditions, corruption |
192
- | 9 | Use `git add .` | Sensitive data leaks |
193
- | 10 | Skip tests for new scripts | CI failures, regressions |
1
+ # Plan-Build-Run Rules
2
+
3
+ Authoritative rules for all Plan-Build-Run skills, agents, hooks, and workflows.
4
+ Condensed from the 3,100-line `docs/DEVELOPMENT-GUIDE.md`. When in doubt, these rules govern.
5
+
6
+ ---
7
+
8
+ ## Philosophy
9
+
10
+ 1. **Context is precious.** The orchestrator stays lean (~15% usage). Delegate heavy work to subagents.
11
+ 2. **State lives on disk.** Skills and agents communicate through `.planning/` files, not messages.
12
+ 3. **Agents are black boxes.** Clear input/output contracts. Agents never read other agent definitions.
13
+ 4. **Gates provide safety.** Users control pace via config toggles. Never skip a gate.
14
+ 5. **One task, one commit.** Atomic commits for clean history and easy rollback.
15
+ 6. **Cross-platform always.** `path.join()`, CommonJS, test on Windows/macOS/Linux.
16
+ 7. **Test everything.** 70% coverage minimum. All 9 CI matrix combinations must pass.
17
+ 8. **PLAN-BUILD-RUN branding only.** Always use `PLAN-BUILD-RUN ►` prefix in banners.
18
+
19
+ ---
20
+
21
+ ## Context Budget
22
+
23
+ 9. Target 15% orchestrator context usage. Warn user at 30%.
24
+ 10. **Never** read agent definitions (`agents/*.md`) in the orchestrator — `subagent_type` auto-loads them.
25
+ 11. **Never** inline large files into `Task()` prompts — tell agents to read files from disk.
26
+ 12. **Never** read full subagent output — read frontmatter only (first 10-20 lines).
27
+ 13. Read STATE.md and config.json fully. Read ROADMAP.md by section. Read PLAN.md/SUMMARY.md/VERIFICATION.md frontmatter only.
28
+ 14. Use the `limit` parameter on Read to restrict line counts.
29
+ 15. Proactively suggest `/pbr:pause` when context gets heavy — before compaction, not after.
30
+
31
+ ---
32
+
33
+ ## State Management
34
+
35
+ 16. STATE.md is the **single source of truth** for current position.
36
+ 17. **Never** infer current phase from directory listings, git log, or conversation history.
37
+ 18. Always read STATE.md before making state-dependent decisions.
38
+ 19. Update STATE.md at: begin, plan, build, review, pause, continue, milestone.
39
+ 20. **Never** commit STATE.md mid-skill — hooks handle session persistence.
40
+ 21. Agents write artifacts (SUMMARY.md, VERIFICATION.md). Only the orchestrator writes STATE.md.
41
+ 22. Every ROADMAP.md phase must have a matching `.planning/phases/` directory, and vice versa.
42
+ 23. config.json is validated against `scripts/config-schema.json` on load.
43
+
44
+ ---
45
+
46
+ ## Agent Spawning
47
+
48
+ 24. Always use `subagent_type: "pbr:{name}"` to spawn agents.
49
+ 25. Pass file paths to agents, not file contents.
50
+ 26. Agents never read other agent definition files.
51
+ 27. Each agent gets a fresh 200k token context window — let them do the heavy reading.
52
+
53
+ ---
54
+
55
+ ## User Interaction Patterns
56
+
57
+ 28. Use `AskUserQuestion` for all structured gate checks — never plain-text "Type approved" prompts.
58
+ 29. AskUserQuestion is an orchestrator-only tool. It **cannot** be called from subagents (Task contexts).
59
+ 30. Max 4 options per AskUserQuestion call. If more options exist, split into a 2-step flow.
60
+ 31. `header` field must be max 12 characters. Keep it a single word when possible.
61
+ 32. `multiSelect` is always `false` for Plan-Build-Run gate checks.
62
+ 33. Always handle the "Other" case — users may type freeform text instead of selecting an option.
63
+ 34. Reuse patterns from `skills/shared/gate-prompts.md` by name. Do not reinvent prompts inline.
64
+ 35. Do **not** use AskUserQuestion for freeform text input (symptom gathering, Socratic discussion, open-ended questions). Use plain conversation for those.
65
+ 36. Skills that do not require user interaction (continue, health, help, pause) intentionally omit AskUserQuestion from allowed-tools.
66
+
67
+ ---
68
+
69
+ ## Skill Authoring
70
+
71
+ 37. Every SKILL.md starts with YAML frontmatter: `name`, `description`, `allowed-tools`, `argument-hint`.
72
+ 38. Skills that spawn agents **must** have a `## Context Budget` section.
73
+ 39. Mark each step as `(inline)` or `(delegate)` — inline for light work, delegate for analysis.
74
+ 40. Reference templates and references by filename — never inline them.
75
+ 41. Gate checks: read config toggle → display summary → ask user → proceed/abort/revise.
76
+ 42. Use branded UI elements from `references/ui-formatting.md`.
77
+
78
+ ---
79
+
80
+ ## Agent Authoring
81
+
82
+ 43. Every agent file starts with YAML frontmatter: `name`, `description`, `model`, `memory`, `tools`.
83
+ 44. Agent name matches the agent file name (no prefix needed).
84
+ 45. `tools` array: only include tools the agent actually uses.
85
+ 46. Agents write artifacts to disk. They never modify STATE.md or ROADMAP.md.
86
+ 47. Agent definitions are self-contained — no cross-agent references.
87
+
88
+ ---
89
+
90
+ ## Hook Development
91
+
92
+ 48. All hooks use **CommonJS** (`require`), never ES modules (`import`).
93
+ 49. All hooks call `logHook()` from `hook-logger.js`. No silent exits.
94
+ 50. Exit codes: `0` = allow/success, `2` = block (PreToolUse only), other = error (logged, non-blocking).
95
+ 51. Hooks receive JSON on stdin, write JSON to stdout.
96
+ 52. Fail gracefully: wrap in try/catch, exit 0 on parse errors.
97
+ 53. Every hook in `hooks.json` must have a `statusMessage` field (gerund form: "Validating...", keep short).
98
+ 54. Windows file deletion: use 3-attempt retry loop to handle AV/indexer locks.
99
+ 55. Every hook script must have a corresponding `tests/{name}.test.js`.
100
+
101
+ ---
102
+
103
+ ## Commits
104
+
105
+ 56. Format: `{type}({scope}): {description}`.
106
+ 57. Valid types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `wip`.
107
+ 58. Valid scopes: `{NN}-{MM}` (phase-plan), `quick-{NNN}`, `planning`, or any lowercase word.
108
+ 59. **Never** use `git add .` or `git add -A` — stage specific files only.
109
+ 60. Blocked files: `.env` (not `.env.example`), `*.key`, `*.pem`, `*.pfx`, `*.p12`, `*credential*`, `*secret*` (unless in `tests/` or `*.example`).
110
+ 61. TDD tasks: exactly 3 commits — RED (test), GREEN (feat), REFACTOR.
111
+ 62. Executors: one atomic commit per task.
112
+
113
+ ---
114
+
115
+ ## Templates
116
+
117
+ 63. Default syntax: `{variable}` placeholders for string substitution.
118
+ 64. Only use EJS (`<%= %>`, `<% %>`) when loops or conditionals are genuinely needed.
119
+ 65. Template files use `.tmpl` extension. Name matches the output file (e.g., `SUMMARY.md.tmpl` → `SUMMARY.md`).
120
+ 66. Templates live in `templates/` (global), `templates/codebase/` (scan), `templates/research/` (research), or `skills/{name}/templates/` (skill-specific).
121
+
122
+ ---
123
+
124
+ ## File Naming
125
+
126
+ 67. Skills: `plugins/pbr/skills/{skill-name}/SKILL.md` — lowercase hyphenated dir, uppercase `SKILL.md`.
127
+ 68. Agents: `plugins/pbr/agents/{name}.md` — agent name matches file name.
128
+ 69. Scripts: `plugins/pbr/scripts/{name}.js` — lowercase, hyphenated, CommonJS.
129
+ 70. References: `plugins/pbr/references/{name}.md` — lowercase, hyphenated.
130
+ 71. Tests: `tests/{script-name}.test.js` — mirrors the script name.
131
+
132
+ ---
133
+
134
+ ## Testing
135
+
136
+ 72. Test files mirror script names: `scripts/foo.js` → `tests/foo.test.js`.
137
+ 73. Use the fixture project at `tests/fixtures/fake-project/` for integration tests.
138
+ 74. Hook tests: use stdin/stdout protocol with `execSync()`, timeout 5000ms, run in temp dir.
139
+ 75. Coverage target: 70% branches/functions/lines/statements.
140
+ 76. CI matrix: Node 18/20/22 × ubuntu/macos/windows. All 9 must pass.
141
+ 77. Local pre-push: `npm run lint && npm test && npm run validate`.
142
+
143
+ ---
144
+
145
+ ## Cross-Platform
146
+
147
+ 78. **Never** hardcode `/` or `\` — always `path.join()`.
148
+ 79. Use `\n` in string literals — Node.js and Git normalize line endings.
149
+ 80. In `hooks.json`, use `${CLAUDE_PLUGIN_ROOT}` — Claude Code expands this internally on all platforms.
150
+ 81. **Never** use `$CLAUDE_PLUGIN_ROOT` (shell expansion is platform-dependent).
151
+ 82. **Never** rely on execute bits — always invoke via `node script.js`.
152
+
153
+ ---
154
+
155
+ ## Dependencies & Gates
156
+
157
+ 83. Check all `depends_on` plans have SUMMARY.md files before executing.
158
+ 84. Checkpoint tasks (`checkpoint:human-verify`) require STOP — write partial SUMMARY.md, return metadata.
159
+ 85. Respect all `gates.confirm_*` config toggles. Never auto-proceed when a gate is enabled.
160
+
161
+ ---
162
+
163
+ ## Logging
164
+
165
+ 86. Hook scripts → `logHook()` (writes to `logs/hooks.jsonl`, max 200 entries).
166
+ 87. Workflow milestones → `logEvent()` (writes to `logs/events.jsonl`, max 1,000 entries).
167
+ 88. Rule of thumb: inside a hook? `logHook()`. Tracking a high-level event? `logEvent()`.
168
+
169
+ ---
170
+
171
+ ## Gotchas
172
+
173
+ 89. JSDoc `*/` in glob patterns closes Babel comments early — use `//` line comments instead.
174
+ 90. Regex anchors: use `\b` word boundaries, not `^` anchors (misses chained commands like `cd && git commit`).
175
+ 91. Windows cwd locking in tests: use `cwd` option in `execSync()` instead of `process.chdir()`.
176
+ 92. PLAN.md frontmatter must include all required fields: `phase`, `plan`, `type`, `wave`, `depends_on`, `files_modified`, `autonomous`, `must_haves`.
177
+
178
+ ---
179
+
180
+ ## Quick Reference: Never Do This
181
+
182
+ | # | Anti-Pattern | Impact |
183
+ |---|-------------|--------|
184
+ | 1 | Read agent definitions in orchestrator | Context balloons 15% → 88% |
185
+ | 2 | Inline large files into Task() prompts | Wasted orchestrator context |
186
+ | 3 | Read full subagent output | Context bloat |
187
+ | 4 | Use non-Plan-Build-Run branding | User confusion |
188
+ | 5 | Hardcode path separators | Cross-platform breakage |
189
+ | 6 | Use ES modules in hooks | Hook fails to load |
190
+ | 7 | Skip hook logging | Silent failures |
191
+ | 8 | Modify STATE.md in agents | Race conditions, corruption |
192
+ | 9 | Use `git add .` | Sensitive data leaks |
193
+ | 10 | Skip tests for new scripts | CI failures, regressions |