@sienklogic/plan-build-run 2.0.0 → 2.0.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.
Files changed (225) 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/pbr/.claude-plugin/plugin.json +13 -13
  53. package/plugins/pbr/UI-CONSISTENCY-GAPS.md +61 -61
  54. package/plugins/pbr/agents/codebase-mapper.md +279 -271
  55. package/plugins/pbr/agents/debugger.md +281 -281
  56. package/plugins/pbr/agents/executor.md +428 -407
  57. package/plugins/pbr/agents/general.md +164 -164
  58. package/plugins/pbr/agents/integration-checker.md +169 -141
  59. package/plugins/pbr/agents/plan-checker.md +296 -280
  60. package/plugins/pbr/agents/planner.md +358 -358
  61. package/plugins/pbr/agents/researcher.md +363 -363
  62. package/plugins/pbr/agents/synthesizer.md +230 -230
  63. package/plugins/pbr/agents/verifier.md +489 -454
  64. package/plugins/pbr/commands/begin.md +5 -5
  65. package/plugins/pbr/commands/build.md +5 -5
  66. package/plugins/pbr/commands/config.md +5 -5
  67. package/plugins/pbr/commands/continue.md +5 -5
  68. package/plugins/pbr/commands/debug.md +5 -5
  69. package/plugins/pbr/commands/discuss.md +5 -5
  70. package/plugins/pbr/commands/explore.md +5 -5
  71. package/plugins/pbr/commands/health.md +5 -5
  72. package/plugins/pbr/commands/help.md +5 -5
  73. package/plugins/pbr/commands/import.md +5 -5
  74. package/plugins/pbr/commands/milestone.md +5 -5
  75. package/plugins/pbr/commands/note.md +5 -5
  76. package/plugins/pbr/commands/pause.md +5 -5
  77. package/plugins/pbr/commands/plan.md +5 -5
  78. package/plugins/pbr/commands/quick.md +5 -5
  79. package/plugins/pbr/commands/resume.md +5 -5
  80. package/plugins/pbr/commands/review.md +5 -5
  81. package/plugins/pbr/commands/scan.md +5 -5
  82. package/plugins/pbr/commands/setup.md +5 -5
  83. package/plugins/pbr/commands/status.md +5 -5
  84. package/plugins/pbr/commands/todo.md +5 -5
  85. package/plugins/pbr/contexts/dev.md +27 -27
  86. package/plugins/pbr/contexts/research.md +28 -28
  87. package/plugins/pbr/contexts/review.md +36 -36
  88. package/plugins/pbr/hooks/hooks.json +183 -183
  89. package/plugins/pbr/references/agent-anti-patterns.md +24 -24
  90. package/plugins/pbr/references/agent-interactions.md +134 -134
  91. package/plugins/pbr/references/agent-teams.md +54 -54
  92. package/plugins/pbr/references/checkpoints.md +157 -157
  93. package/plugins/pbr/references/common-bug-patterns.md +13 -13
  94. package/plugins/pbr/references/config-reference.md +441 -0
  95. package/plugins/pbr/references/continuation-format.md +212 -212
  96. package/plugins/pbr/references/deviation-rules.md +112 -112
  97. package/plugins/pbr/references/git-integration.md +226 -226
  98. package/plugins/pbr/references/integration-patterns.md +117 -117
  99. package/plugins/pbr/references/model-profiles.md +99 -99
  100. package/plugins/pbr/references/model-selection.md +31 -31
  101. package/plugins/pbr/references/pbr-rules.md +193 -193
  102. package/plugins/pbr/references/plan-authoring.md +181 -181
  103. package/plugins/pbr/references/plan-format.md +287 -283
  104. package/plugins/pbr/references/planning-config.md +213 -213
  105. package/plugins/pbr/references/questioning.md +214 -214
  106. package/plugins/pbr/references/reading-verification.md +127 -127
  107. package/plugins/pbr/references/stub-patterns.md +160 -160
  108. package/plugins/pbr/references/subagent-coordination.md +119 -119
  109. package/plugins/pbr/references/ui-formatting.md +461 -399
  110. package/plugins/pbr/references/verification-patterns.md +198 -198
  111. package/plugins/pbr/references/wave-execution.md +95 -95
  112. package/plugins/pbr/scripts/auto-continue.js +80 -80
  113. package/plugins/pbr/scripts/check-dangerous-commands.js +136 -136
  114. package/plugins/pbr/scripts/check-doc-sprawl.js +102 -102
  115. package/plugins/pbr/scripts/check-phase-boundary.js +196 -196
  116. package/plugins/pbr/scripts/check-plan-format.js +270 -270
  117. package/plugins/pbr/scripts/check-roadmap-sync.js +322 -252
  118. package/plugins/pbr/scripts/check-skill-workflow.js +262 -262
  119. package/plugins/pbr/scripts/check-state-sync.js +476 -476
  120. package/plugins/pbr/scripts/check-subagent-output.js +144 -144
  121. package/plugins/pbr/scripts/config-schema.json +251 -251
  122. package/plugins/pbr/scripts/context-budget-check.js +287 -287
  123. package/plugins/pbr/scripts/event-handler.js +151 -151
  124. package/plugins/pbr/scripts/event-logger.js +92 -92
  125. package/plugins/pbr/scripts/hook-logger.js +80 -76
  126. package/plugins/pbr/scripts/hooks-schema.json +79 -79
  127. package/plugins/pbr/scripts/log-subagent.js +164 -152
  128. package/plugins/pbr/scripts/log-tool-failure.js +88 -88
  129. package/plugins/pbr/scripts/pbr-tools.js +1378 -1301
  130. package/plugins/pbr/scripts/post-write-dispatch.js +66 -66
  131. package/plugins/pbr/scripts/post-write-quality.js +207 -207
  132. package/plugins/pbr/scripts/pre-bash-dispatch.js +86 -56
  133. package/plugins/pbr/scripts/pre-write-dispatch.js +97 -62
  134. package/plugins/pbr/scripts/progress-tracker.js +281 -228
  135. package/plugins/pbr/scripts/run-hook.js +92 -0
  136. package/plugins/pbr/scripts/session-cleanup.js +254 -254
  137. package/plugins/pbr/scripts/status-line.js +288 -285
  138. package/plugins/pbr/scripts/suggest-compact.js +119 -119
  139. package/plugins/pbr/scripts/task-completed.js +45 -45
  140. package/plugins/pbr/scripts/track-context-budget.js +149 -119
  141. package/plugins/pbr/scripts/validate-commit.js +200 -200
  142. package/plugins/pbr/scripts/validate-plugin-structure.js +183 -172
  143. package/plugins/pbr/scripts/validate-task.js +106 -0
  144. package/plugins/pbr/skills/begin/SKILL.md +594 -545
  145. package/plugins/pbr/skills/begin/templates/PROJECT.md.tmpl +33 -33
  146. package/plugins/pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +18 -18
  147. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +49 -49
  148. package/plugins/pbr/skills/begin/templates/config.json.tmpl +64 -63
  149. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +19 -19
  150. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +30 -30
  151. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +16 -16
  152. package/plugins/pbr/skills/build/SKILL.md +943 -962
  153. package/plugins/pbr/skills/config/SKILL.md +256 -241
  154. package/plugins/pbr/skills/continue/SKILL.md +164 -127
  155. package/plugins/pbr/skills/debug/SKILL.md +515 -489
  156. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +16 -16
  157. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +27 -27
  158. package/plugins/pbr/skills/discuss/SKILL.md +347 -338
  159. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +61 -61
  160. package/plugins/pbr/skills/discuss/templates/decision-categories.md +9 -9
  161. package/plugins/pbr/skills/explore/SKILL.md +378 -362
  162. package/plugins/pbr/skills/health/SKILL.md +221 -186
  163. package/plugins/pbr/skills/health/templates/check-pattern.md.tmpl +30 -30
  164. package/plugins/pbr/skills/health/templates/output-format.md.tmpl +63 -63
  165. package/plugins/pbr/skills/help/SKILL.md +155 -140
  166. package/plugins/pbr/skills/import/SKILL.md +504 -490
  167. package/plugins/pbr/skills/milestone/SKILL.md +704 -673
  168. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +48 -48
  169. package/plugins/pbr/skills/milestone/templates/stats-file.md.tmpl +30 -30
  170. package/plugins/pbr/skills/note/SKILL.md +231 -212
  171. package/plugins/pbr/skills/pause/SKILL.md +249 -235
  172. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +71 -71
  173. package/plugins/pbr/skills/plan/SKILL.md +685 -628
  174. package/plugins/pbr/skills/plan/decimal-phase-calc.md +98 -98
  175. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +21 -21
  176. package/plugins/pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +32 -32
  177. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +38 -38
  178. package/plugins/pbr/skills/plan/templates/researcher-prompt.md.tmpl +19 -19
  179. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +23 -23
  180. package/plugins/pbr/skills/quick/SKILL.md +354 -335
  181. package/plugins/pbr/skills/resume/SKILL.md +402 -388
  182. package/plugins/pbr/skills/review/SKILL.md +686 -652
  183. package/plugins/pbr/skills/review/templates/debugger-prompt.md.tmpl +60 -60
  184. package/plugins/pbr/skills/review/templates/gap-planner-prompt.md.tmpl +40 -40
  185. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +115 -115
  186. package/plugins/pbr/skills/scan/SKILL.md +304 -269
  187. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +201 -201
  188. package/plugins/pbr/skills/setup/SKILL.md +253 -227
  189. package/plugins/pbr/skills/shared/commit-planning-docs.md +35 -35
  190. package/plugins/pbr/skills/shared/config-loading.md +102 -102
  191. package/plugins/pbr/skills/shared/context-budget.md +40 -40
  192. package/plugins/pbr/skills/shared/context-loader-task.md +86 -86
  193. package/plugins/pbr/skills/shared/digest-select.md +79 -79
  194. package/plugins/pbr/skills/shared/domain-probes.md +125 -125
  195. package/plugins/pbr/skills/shared/error-reporting.md +79 -79
  196. package/plugins/pbr/skills/shared/gate-prompts.md +388 -388
  197. package/plugins/pbr/skills/shared/phase-argument-parsing.md +45 -45
  198. package/plugins/pbr/skills/shared/progress-display.md +53 -53
  199. package/plugins/pbr/skills/shared/revision-loop.md +81 -81
  200. package/plugins/pbr/skills/shared/state-loading.md +62 -62
  201. package/plugins/pbr/skills/shared/state-update.md +161 -161
  202. package/plugins/pbr/skills/shared/universal-anti-patterns.md +33 -33
  203. package/plugins/pbr/skills/status/SKILL.md +367 -353
  204. package/plugins/pbr/skills/todo/SKILL.md +198 -181
  205. package/plugins/pbr/templates/CONTEXT.md.tmpl +52 -52
  206. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +151 -151
  207. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +97 -97
  208. package/plugins/pbr/templates/ROADMAP.md.tmpl +40 -40
  209. package/plugins/pbr/templates/SUMMARY.md.tmpl +81 -81
  210. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +116 -116
  211. package/plugins/pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -98
  212. package/plugins/pbr/templates/codebase/CONCERNS.md.tmpl +93 -93
  213. package/plugins/pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -104
  214. package/plugins/pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -78
  215. package/plugins/pbr/templates/codebase/STACK.md.tmpl +78 -78
  216. package/plugins/pbr/templates/codebase/STRUCTURE.md.tmpl +80 -80
  217. package/plugins/pbr/templates/codebase/TESTING.md.tmpl +107 -107
  218. package/plugins/pbr/templates/continue-here.md.tmpl +73 -73
  219. package/plugins/pbr/templates/prompt-partials/phase-project-context.md.tmpl +37 -37
  220. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +124 -124
  221. package/plugins/pbr/templates/research/STACK.md.tmpl +71 -71
  222. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +112 -112
  223. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +81 -81
  224. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +99 -99
  225. 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 |