@sienklogic/plan-build-run 2.0.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 (221) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/CLAUDE.md +149 -0
  3. package/LICENSE +21 -0
  4. package/README.md +247 -0
  5. package/dashboard/bin/cli.js +25 -0
  6. package/dashboard/package.json +34 -0
  7. package/dashboard/public/.gitkeep +0 -0
  8. package/dashboard/public/css/layout.css +406 -0
  9. package/dashboard/public/css/status-colors.css +98 -0
  10. package/dashboard/public/js/htmx-title.js +5 -0
  11. package/dashboard/public/js/sidebar-toggle.js +20 -0
  12. package/dashboard/src/app.js +78 -0
  13. package/dashboard/src/middleware/errorHandler.js +52 -0
  14. package/dashboard/src/middleware/notFoundHandler.js +9 -0
  15. package/dashboard/src/repositories/planning.repository.js +128 -0
  16. package/dashboard/src/routes/events.routes.js +40 -0
  17. package/dashboard/src/routes/index.routes.js +31 -0
  18. package/dashboard/src/routes/pages.routes.js +195 -0
  19. package/dashboard/src/server.js +42 -0
  20. package/dashboard/src/services/dashboard.service.js +222 -0
  21. package/dashboard/src/services/phase.service.js +167 -0
  22. package/dashboard/src/services/project.service.js +57 -0
  23. package/dashboard/src/services/roadmap.service.js +171 -0
  24. package/dashboard/src/services/sse.service.js +58 -0
  25. package/dashboard/src/services/todo.service.js +254 -0
  26. package/dashboard/src/services/watcher.service.js +48 -0
  27. package/dashboard/src/views/coming-soon.ejs +11 -0
  28. package/dashboard/src/views/error.ejs +13 -0
  29. package/dashboard/src/views/index.ejs +5 -0
  30. package/dashboard/src/views/layout.ejs +1 -0
  31. package/dashboard/src/views/partials/dashboard-content.ejs +77 -0
  32. package/dashboard/src/views/partials/footer.ejs +3 -0
  33. package/dashboard/src/views/partials/head.ejs +21 -0
  34. package/dashboard/src/views/partials/header.ejs +12 -0
  35. package/dashboard/src/views/partials/layout-bottom.ejs +15 -0
  36. package/dashboard/src/views/partials/layout-top.ejs +8 -0
  37. package/dashboard/src/views/partials/phase-content.ejs +181 -0
  38. package/dashboard/src/views/partials/phases-content.ejs +117 -0
  39. package/dashboard/src/views/partials/roadmap-content.ejs +142 -0
  40. package/dashboard/src/views/partials/sidebar.ejs +38 -0
  41. package/dashboard/src/views/partials/todo-create-content.ejs +53 -0
  42. package/dashboard/src/views/partials/todo-detail-content.ejs +38 -0
  43. package/dashboard/src/views/partials/todos-content.ejs +53 -0
  44. package/dashboard/src/views/phase-detail.ejs +5 -0
  45. package/dashboard/src/views/phases.ejs +5 -0
  46. package/dashboard/src/views/roadmap.ejs +5 -0
  47. package/dashboard/src/views/todo-create.ejs +5 -0
  48. package/dashboard/src/views/todo-detail.ejs +5 -0
  49. package/dashboard/src/views/todos.ejs +5 -0
  50. package/package.json +57 -0
  51. package/plugins/pbr/.claude-plugin/plugin.json +13 -0
  52. package/plugins/pbr/UI-CONSISTENCY-GAPS.md +61 -0
  53. package/plugins/pbr/agents/codebase-mapper.md +271 -0
  54. package/plugins/pbr/agents/debugger.md +281 -0
  55. package/plugins/pbr/agents/executor.md +407 -0
  56. package/plugins/pbr/agents/general.md +164 -0
  57. package/plugins/pbr/agents/integration-checker.md +141 -0
  58. package/plugins/pbr/agents/plan-checker.md +280 -0
  59. package/plugins/pbr/agents/planner.md +358 -0
  60. package/plugins/pbr/agents/researcher.md +363 -0
  61. package/plugins/pbr/agents/synthesizer.md +230 -0
  62. package/plugins/pbr/agents/verifier.md +454 -0
  63. package/plugins/pbr/commands/begin.md +5 -0
  64. package/plugins/pbr/commands/build.md +5 -0
  65. package/plugins/pbr/commands/config.md +5 -0
  66. package/plugins/pbr/commands/continue.md +5 -0
  67. package/plugins/pbr/commands/debug.md +5 -0
  68. package/plugins/pbr/commands/discuss.md +5 -0
  69. package/plugins/pbr/commands/explore.md +5 -0
  70. package/plugins/pbr/commands/health.md +5 -0
  71. package/plugins/pbr/commands/help.md +5 -0
  72. package/plugins/pbr/commands/import.md +5 -0
  73. package/plugins/pbr/commands/milestone.md +5 -0
  74. package/plugins/pbr/commands/note.md +5 -0
  75. package/plugins/pbr/commands/pause.md +5 -0
  76. package/plugins/pbr/commands/plan.md +5 -0
  77. package/plugins/pbr/commands/quick.md +5 -0
  78. package/plugins/pbr/commands/resume.md +5 -0
  79. package/plugins/pbr/commands/review.md +5 -0
  80. package/plugins/pbr/commands/scan.md +5 -0
  81. package/plugins/pbr/commands/setup.md +5 -0
  82. package/plugins/pbr/commands/status.md +5 -0
  83. package/plugins/pbr/commands/todo.md +5 -0
  84. package/plugins/pbr/contexts/dev.md +27 -0
  85. package/plugins/pbr/contexts/research.md +28 -0
  86. package/plugins/pbr/contexts/review.md +36 -0
  87. package/plugins/pbr/hooks/hooks.json +183 -0
  88. package/plugins/pbr/references/agent-anti-patterns.md +24 -0
  89. package/plugins/pbr/references/agent-interactions.md +134 -0
  90. package/plugins/pbr/references/agent-teams.md +54 -0
  91. package/plugins/pbr/references/checkpoints.md +157 -0
  92. package/plugins/pbr/references/common-bug-patterns.md +13 -0
  93. package/plugins/pbr/references/continuation-format.md +212 -0
  94. package/plugins/pbr/references/deviation-rules.md +112 -0
  95. package/plugins/pbr/references/git-integration.md +226 -0
  96. package/plugins/pbr/references/integration-patterns.md +117 -0
  97. package/plugins/pbr/references/model-profiles.md +99 -0
  98. package/plugins/pbr/references/model-selection.md +31 -0
  99. package/plugins/pbr/references/pbr-rules.md +193 -0
  100. package/plugins/pbr/references/plan-authoring.md +181 -0
  101. package/plugins/pbr/references/plan-format.md +283 -0
  102. package/plugins/pbr/references/planning-config.md +213 -0
  103. package/plugins/pbr/references/questioning.md +214 -0
  104. package/plugins/pbr/references/reading-verification.md +127 -0
  105. package/plugins/pbr/references/stub-patterns.md +160 -0
  106. package/plugins/pbr/references/subagent-coordination.md +119 -0
  107. package/plugins/pbr/references/ui-formatting.md +399 -0
  108. package/plugins/pbr/references/verification-patterns.md +198 -0
  109. package/plugins/pbr/references/wave-execution.md +95 -0
  110. package/plugins/pbr/scripts/auto-continue.js +80 -0
  111. package/plugins/pbr/scripts/check-dangerous-commands.js +136 -0
  112. package/plugins/pbr/scripts/check-doc-sprawl.js +102 -0
  113. package/plugins/pbr/scripts/check-phase-boundary.js +196 -0
  114. package/plugins/pbr/scripts/check-plan-format.js +270 -0
  115. package/plugins/pbr/scripts/check-roadmap-sync.js +252 -0
  116. package/plugins/pbr/scripts/check-skill-workflow.js +262 -0
  117. package/plugins/pbr/scripts/check-state-sync.js +476 -0
  118. package/plugins/pbr/scripts/check-subagent-output.js +144 -0
  119. package/plugins/pbr/scripts/config-schema.json +251 -0
  120. package/plugins/pbr/scripts/context-budget-check.js +287 -0
  121. package/plugins/pbr/scripts/event-handler.js +151 -0
  122. package/plugins/pbr/scripts/event-logger.js +92 -0
  123. package/plugins/pbr/scripts/hook-logger.js +76 -0
  124. package/plugins/pbr/scripts/hooks-schema.json +79 -0
  125. package/plugins/pbr/scripts/log-subagent.js +152 -0
  126. package/plugins/pbr/scripts/log-tool-failure.js +88 -0
  127. package/plugins/pbr/scripts/pbr-tools.js +1301 -0
  128. package/plugins/pbr/scripts/post-write-dispatch.js +66 -0
  129. package/plugins/pbr/scripts/post-write-quality.js +207 -0
  130. package/plugins/pbr/scripts/pre-bash-dispatch.js +56 -0
  131. package/plugins/pbr/scripts/pre-write-dispatch.js +62 -0
  132. package/plugins/pbr/scripts/progress-tracker.js +228 -0
  133. package/plugins/pbr/scripts/session-cleanup.js +254 -0
  134. package/plugins/pbr/scripts/status-line.js +285 -0
  135. package/plugins/pbr/scripts/suggest-compact.js +119 -0
  136. package/plugins/pbr/scripts/task-completed.js +45 -0
  137. package/plugins/pbr/scripts/track-context-budget.js +119 -0
  138. package/plugins/pbr/scripts/validate-commit.js +200 -0
  139. package/plugins/pbr/scripts/validate-plugin-structure.js +172 -0
  140. package/plugins/pbr/skills/begin/SKILL.md +545 -0
  141. package/plugins/pbr/skills/begin/templates/PROJECT.md.tmpl +33 -0
  142. package/plugins/pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +18 -0
  143. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +49 -0
  144. package/plugins/pbr/skills/begin/templates/config.json.tmpl +63 -0
  145. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +19 -0
  146. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +30 -0
  147. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +16 -0
  148. package/plugins/pbr/skills/build/SKILL.md +962 -0
  149. package/plugins/pbr/skills/config/SKILL.md +241 -0
  150. package/plugins/pbr/skills/continue/SKILL.md +127 -0
  151. package/plugins/pbr/skills/debug/SKILL.md +489 -0
  152. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +16 -0
  153. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +27 -0
  154. package/plugins/pbr/skills/discuss/SKILL.md +338 -0
  155. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +61 -0
  156. package/plugins/pbr/skills/discuss/templates/decision-categories.md +9 -0
  157. package/plugins/pbr/skills/explore/SKILL.md +362 -0
  158. package/plugins/pbr/skills/health/SKILL.md +186 -0
  159. package/plugins/pbr/skills/health/templates/check-pattern.md.tmpl +30 -0
  160. package/plugins/pbr/skills/health/templates/output-format.md.tmpl +63 -0
  161. package/plugins/pbr/skills/help/SKILL.md +140 -0
  162. package/plugins/pbr/skills/import/SKILL.md +490 -0
  163. package/plugins/pbr/skills/milestone/SKILL.md +673 -0
  164. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +48 -0
  165. package/plugins/pbr/skills/milestone/templates/stats-file.md.tmpl +30 -0
  166. package/plugins/pbr/skills/note/SKILL.md +212 -0
  167. package/plugins/pbr/skills/pause/SKILL.md +235 -0
  168. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +71 -0
  169. package/plugins/pbr/skills/plan/SKILL.md +628 -0
  170. package/plugins/pbr/skills/plan/decimal-phase-calc.md +98 -0
  171. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +21 -0
  172. package/plugins/pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +32 -0
  173. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +38 -0
  174. package/plugins/pbr/skills/plan/templates/researcher-prompt.md.tmpl +19 -0
  175. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +23 -0
  176. package/plugins/pbr/skills/quick/SKILL.md +335 -0
  177. package/plugins/pbr/skills/resume/SKILL.md +388 -0
  178. package/plugins/pbr/skills/review/SKILL.md +652 -0
  179. package/plugins/pbr/skills/review/templates/debugger-prompt.md.tmpl +60 -0
  180. package/plugins/pbr/skills/review/templates/gap-planner-prompt.md.tmpl +40 -0
  181. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +115 -0
  182. package/plugins/pbr/skills/scan/SKILL.md +269 -0
  183. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +201 -0
  184. package/plugins/pbr/skills/setup/SKILL.md +227 -0
  185. package/plugins/pbr/skills/shared/commit-planning-docs.md +35 -0
  186. package/plugins/pbr/skills/shared/config-loading.md +102 -0
  187. package/plugins/pbr/skills/shared/context-budget.md +40 -0
  188. package/plugins/pbr/skills/shared/context-loader-task.md +86 -0
  189. package/plugins/pbr/skills/shared/digest-select.md +79 -0
  190. package/plugins/pbr/skills/shared/domain-probes.md +125 -0
  191. package/plugins/pbr/skills/shared/error-reporting.md +79 -0
  192. package/plugins/pbr/skills/shared/gate-prompts.md +388 -0
  193. package/plugins/pbr/skills/shared/phase-argument-parsing.md +45 -0
  194. package/plugins/pbr/skills/shared/progress-display.md +53 -0
  195. package/plugins/pbr/skills/shared/revision-loop.md +81 -0
  196. package/plugins/pbr/skills/shared/state-loading.md +62 -0
  197. package/plugins/pbr/skills/shared/state-update.md +161 -0
  198. package/plugins/pbr/skills/shared/universal-anti-patterns.md +33 -0
  199. package/plugins/pbr/skills/status/SKILL.md +353 -0
  200. package/plugins/pbr/skills/todo/SKILL.md +181 -0
  201. package/plugins/pbr/templates/CONTEXT.md.tmpl +52 -0
  202. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +151 -0
  203. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +97 -0
  204. package/plugins/pbr/templates/ROADMAP.md.tmpl +40 -0
  205. package/plugins/pbr/templates/SUMMARY.md.tmpl +81 -0
  206. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +116 -0
  207. package/plugins/pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -0
  208. package/plugins/pbr/templates/codebase/CONCERNS.md.tmpl +93 -0
  209. package/plugins/pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -0
  210. package/plugins/pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -0
  211. package/plugins/pbr/templates/codebase/STACK.md.tmpl +78 -0
  212. package/plugins/pbr/templates/codebase/STRUCTURE.md.tmpl +80 -0
  213. package/plugins/pbr/templates/codebase/TESTING.md.tmpl +107 -0
  214. package/plugins/pbr/templates/continue-here.md.tmpl +73 -0
  215. package/plugins/pbr/templates/prompt-partials/phase-project-context.md.tmpl +37 -0
  216. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +124 -0
  217. package/plugins/pbr/templates/research/STACK.md.tmpl +71 -0
  218. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +112 -0
  219. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +81 -0
  220. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +99 -0
  221. package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +36 -0
@@ -0,0 +1,212 @@
1
+ # Continuation Protocol
2
+
3
+ How to spawn a fresh executor agent to continue from a checkpoint or partial completion.
4
+
5
+ ---
6
+
7
+ ## Why Fresh Agents
8
+
9
+ When an executor hits a checkpoint, it STOPS and returns. A new, fresh agent must be spawned to continue because:
10
+ 1. The checkpoint may require user input that changes the execution path
11
+ 2. Context isolation prevents accumulated state from causing issues
12
+ 3. Fresh agents have full context budget for remaining work
13
+
14
+ ---
15
+
16
+ ## Lean Continuation State File
17
+
18
+ Instead of inlining all prior context into the continuation prompt, the build skill writes a compact state file to disk. The continuation executor reads this file + the original PLAN.md, keeping the prompt lean.
19
+
20
+ ### File Location
21
+
22
+ ```
23
+ .planning/phases/{NN}-{slug}/.continuation-state.json
24
+ ```
25
+
26
+ ### Schema
27
+
28
+ ```json
29
+ {
30
+ "plan_id": "02-01",
31
+ "completed_tasks": [
32
+ {
33
+ "id": "02-01-T1",
34
+ "commit": "abc1234",
35
+ "files": ["src/auth/discord.ts", "src/auth/types.ts"]
36
+ },
37
+ {
38
+ "id": "02-01-T2",
39
+ "commit": "def5678",
40
+ "files": ["src/middleware/auth.ts"]
41
+ }
42
+ ],
43
+ "checkpoint": {
44
+ "task": "02-01-T3",
45
+ "type": "human-verify",
46
+ "resolution": "passed"
47
+ },
48
+ "resume_at": "02-01-T3"
49
+ }
50
+ ```
51
+
52
+ ### Fields
53
+
54
+ | Field | Type | Description |
55
+ |-------|------|-------------|
56
+ | `plan_id` | string | The plan being executed |
57
+ | `completed_tasks` | array | Tasks completed before checkpoint. Each has `id`, `commit` hash, and `files` changed. |
58
+ | `checkpoint` | object | The checkpoint that triggered continuation. `task` = task ID, `type` = checkpoint type, `resolution` = user's response. |
59
+ | `resume_at` | string | Task ID to resume execution from |
60
+
61
+ ### How the Build Skill Uses It
62
+
63
+ **Writing** (when executor hits a checkpoint):
64
+ 1. Executor returns checkpoint info to the build orchestrator
65
+ 2. Build orchestrator writes `.continuation-state.json` with completed tasks, checkpoint details, and resume point
66
+ 3. Build orchestrator prompts user for checkpoint resolution
67
+ 4. Build orchestrator updates `checkpoint.resolution` with user's response
68
+
69
+ **Reading** (when spawning continuation executor):
70
+ 1. Build orchestrator reads `.continuation-state.json` from disk
71
+ 2. Build orchestrator reads the original PLAN.md from disk
72
+ 3. Build orchestrator constructs a lean continuation prompt referencing both files
73
+ 4. Continuation executor reads `.continuation-state.json` itself to verify prior commits
74
+
75
+ This approach replaces inlining the full completed-tasks table into the prompt, saving significant context budget on plans with many tasks or multiple checkpoints.
76
+
77
+ ---
78
+
79
+ ## Continuation Context Structure
80
+
81
+ The continuation prompt must include:
82
+
83
+ ### 1. Completed Tasks Table
84
+
85
+ A table of all tasks completed before the checkpoint, with their commit hashes:
86
+
87
+ ```markdown
88
+ | Task ID | Task Name | Commit | Files Changed | Status |
89
+ |---------|-----------|--------|---------------|--------|
90
+ | 02-01-T1 | Create auth module | abc1234 | src/auth/discord.ts, src/auth/types.ts | complete |
91
+ | 02-01-T2 | Add auth middleware | def5678 | src/middleware/auth.ts | complete |
92
+ | 02-01-T3 | Wire OAuth callback | — | — | checkpoint |
93
+ ```
94
+
95
+ ### 2. Resume Task Number
96
+
97
+ Which task to resume from:
98
+ - If the checkpoint task needs to be RE-EXECUTED with user input: resume at the checkpoint task
99
+ - If the checkpoint task was completed and the next task is blocked: resume at the NEXT task
100
+
101
+ ### 3. User Response
102
+
103
+ The user's response to the checkpoint:
104
+ - For `decision`: which option they chose
105
+ - For `human-verify`: whether they passed or failed each item
106
+ - For `human-action`: confirmation that the action was taken
107
+
108
+ ---
109
+
110
+ ## Continuation Prompt Template
111
+
112
+ ```
113
+ You are the executor agent. Continue executing a plan from a checkpoint.
114
+
115
+ <plan>
116
+ [Inline the FULL PLAN.md content — all tasks, not just remaining ones]
117
+ </plan>
118
+
119
+ <completed_tasks>
120
+ The following tasks have already been completed. DO NOT re-execute them.
121
+ Verify their commits exist before proceeding.
122
+
123
+ | Task ID | Task Name | Commit | Status |
124
+ |---------|-----------|--------|--------|
125
+ | {id} | {name} | {hash} | complete |
126
+ | {id} | {name} | {hash} | complete |
127
+ | {id} | {name} | — | checkpoint |
128
+ </completed_tasks>
129
+
130
+ <checkpoint_resolution>
131
+ Checkpoint type: {human-verify | decision | human-action | architectural-change}
132
+ User response: {the user's response to the checkpoint}
133
+
134
+ {For decision: "User chose Option {X}: {description}"}
135
+ {For human-verify: "User confirmed: {pass/fail per item}"}
136
+ {For human-action: "User confirms action completed: {what they did}"}
137
+ {For architectural-change: "User approved approach: {new approach}"}
138
+ </checkpoint_resolution>
139
+
140
+ <resume_instructions>
141
+ Resume execution at Task {N}.
142
+ {If checkpoint task should be re-executed: "Re-execute Task {N} with the user's input."}
143
+ {If checkpoint task is done: "Skip Task {N} and continue from Task {N+1}."}
144
+ </resume_instructions>
145
+
146
+ <project_context>
147
+ [Same project context as original spawn — config, CONTEXT.md, STATE.md]
148
+ </project_context>
149
+
150
+ <prior_work_this_phase>
151
+ [Include all SUMMARY.md files from other completed plans in this phase]
152
+ </prior_work_this_phase>
153
+
154
+ Instructions:
155
+ 1. Verify completed task commits exist: git log --oneline -n {count}
156
+ 2. If commits are missing, STOP and return error
157
+ 3. Resume execution at Task {N}
158
+ 4. Create atomic commits for each remaining task
159
+ 5. Write SUMMARY.md when complete (include ALL tasks — completed and newly executed)
160
+ 6. Run self-check
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Verification Before Resuming
166
+
167
+ The continuation agent MUST verify prior work before continuing:
168
+
169
+ ```bash
170
+ # Check that expected commits exist
171
+ git log --oneline -n {expected_commit_count}
172
+
173
+ # Check that expected files exist
174
+ ls -la {each file from completed tasks}
175
+ ```
176
+
177
+ If verification fails:
178
+ - STOP immediately
179
+ - Report which commits/files are missing
180
+ - DO NOT attempt to re-create them (that's the orchestrator's job)
181
+
182
+ ---
183
+
184
+ ## SUMMARY.md for Continued Plans
185
+
186
+ The final SUMMARY.md must include ALL tasks — both pre-checkpoint and post-checkpoint:
187
+
188
+ ```markdown
189
+ ## Task Results
190
+
191
+ ### Task 1: {name}
192
+ - **Commit**: `{hash}` - {message}
193
+ - **Status**: complete (pre-checkpoint)
194
+
195
+ ### Task 2: {name}
196
+ - **Commit**: `{hash}` - {message}
197
+ - **Status**: complete (pre-checkpoint)
198
+
199
+ ### Task 3: {name} (checkpoint: {type})
200
+ - **Checkpoint resolution**: {user response}
201
+ - **Commit**: `{hash}` - {message}
202
+ - **Status**: complete (post-checkpoint)
203
+ ```
204
+
205
+ ---
206
+
207
+ ## Multiple Checkpoints
208
+
209
+ If a plan has multiple checkpoint tasks:
210
+ - Each checkpoint requires a separate continuation agent spawn
211
+ - The completed_tasks table grows with each continuation
212
+ - Each continuation verifies ALL prior commits, not just the most recent
@@ -0,0 +1,112 @@
1
+ # Deviation Rules
2
+
3
+ When execution doesn't go exactly as planned, these 5 rules govern what the executor can do on its own versus what requires user approval.
4
+
5
+ ---
6
+
7
+ ## Rule 1: Bug Discovered
8
+
9
+ **Trigger**: Verify command fails due to a bug in the code just written.
10
+
11
+ **Action**: Auto-fix the bug, re-run verify. If it passes, commit as normal. Note the bug and fix in SUMMARY.md under "Deviations".
12
+
13
+ **Limit**: 3 fix attempts maximum. After 3 failures, STOP and return error with failing verify output.
14
+
15
+ **Approval needed**: No
16
+
17
+ ---
18
+
19
+ ## Rule 2: Missing Dependency
20
+
21
+ **Trigger**: Action or verify fails because a package/dependency is not installed.
22
+
23
+ **Action**: Auto-install the dependency using the project's package manager. Continue execution.
24
+
25
+ **Commit**: Include dependency installation in the task's commit (e.g., package.json, package-lock.json changes).
26
+
27
+ **Limit**: Only install dependencies directly referenced in the plan's `<action>` or clearly required by the code being written. Do NOT install "nice-to-have" packages.
28
+
29
+ **Approval needed**: No
30
+
31
+ ---
32
+
33
+ ## Rule 3: Critical Gap
34
+
35
+ **Trigger**: While implementing, a critical gap is noticed that would cause runtime errors — missing error handling, null checks, input validation for security.
36
+
37
+ **Action**: Add the minimal necessary code. Note it in SUMMARY.md under "Deviations".
38
+
39
+ **Limit**: This is for preventing crashes and security holes ONLY. Not for adding features, improving UX, or refactoring.
40
+
41
+ **Examples of valid critical gaps**:
42
+ - Missing null check that would cause runtime crash
43
+ - Unhandled promise rejection
44
+ - SQL injection vulnerability
45
+ - Missing input sanitization
46
+ - Missing error boundary
47
+
48
+ **Examples that are NOT critical gaps (use Rule 5 instead)**:
49
+ - Better error messages
50
+ - Input validation for UX (e.g., email format)
51
+ - Performance optimization
52
+ - Code organization improvements
53
+
54
+ **Approval needed**: No
55
+
56
+ ---
57
+
58
+ ## Rule 4: Architectural Change
59
+
60
+ **Trigger**: The plan's approach won't work as specified. The architecture needs to change. A fundamental assumption was wrong.
61
+
62
+ **Action**: STOP immediately. Return a checkpoint-style response describing:
63
+ - What the plan says to do
64
+ - Why it won't work
65
+ - What the alternative would be
66
+ - Which tasks are affected
67
+
68
+ **DO NOT** make architectural changes without approval. DO NOT try to "make it work" with hacks.
69
+
70
+ **Examples**:
71
+ - Plan says to use library X, but it doesn't support the required feature
72
+ - Plan assumes a REST API, but the service only has GraphQL
73
+ - Plan's database schema won't support the required queries
74
+ - Plan's authentication approach conflicts with the framework
75
+
76
+ **Approval needed**: YES — full stop, present to user
77
+
78
+ ---
79
+
80
+ ## Rule 5: Scope Creep
81
+
82
+ **Trigger**: While implementing, something is noticed that would be nice to have, could be improved, or is related but not in the plan.
83
+
84
+ **Action**: Log it in SUMMARY.md under "Deferred Ideas". DO NOT implement it. Continue with the plan as written.
85
+
86
+ **Examples**:
87
+ - "This could use caching" -> Deferred
88
+ - "The error messages could be better" -> Deferred
89
+ - "This should have pagination" -> Deferred
90
+ - "The existing code has a bug unrelated to this plan" -> Deferred (unless it blocks the plan)
91
+ - "This API should have rate limiting" -> Deferred
92
+ - "The UI could use loading states" -> Deferred
93
+
94
+ **Approval needed**: No (just log and continue)
95
+
96
+ ---
97
+
98
+ ## Decision Tree
99
+
100
+ ```
101
+ Execution deviates from plan
102
+ |
103
+ ├─ Code bug? ──────────────── Rule 1: Auto-fix (3 attempts)
104
+ |
105
+ ├─ Missing package? ──────── Rule 2: Auto-install
106
+ |
107
+ ├─ Security/crash risk? ──── Rule 3: Minimal fix + note
108
+ |
109
+ ├─ Architecture wrong? ───── Rule 4: STOP + checkpoint
110
+ |
111
+ └─ Nice to have? ─────────── Rule 5: Log + continue
112
+ ```
@@ -0,0 +1,226 @@
1
+ # Git Integration Reference
2
+
3
+ Plan-Build-Run's commit conventions, commit points, branching strategy, and hook scripts.
4
+
5
+ ---
6
+
7
+ ## Commit Message Format
8
+
9
+ ```
10
+ {type}({phase}-{plan}): {description}
11
+ ```
12
+
13
+ ### Components
14
+
15
+ | Part | Description | Example |
16
+ |------|-------------|---------|
17
+ | `{type}` | Conventional commit type | `feat`, `fix`, `test` |
18
+ | `{phase}` | Phase number (zero-padded) | `02` |
19
+ | `{plan}` | Plan number | `01` |
20
+ | `{description}` | Imperative, lowercase description | `implement discord oauth client` |
21
+
22
+ The format is configurable via `config.json` at `git.commit_format`. The default is `{type}({phase}-{plan}): {description}`.
23
+
24
+ ### Full Example
25
+ ```
26
+ feat(02-01): implement discord oauth client
27
+ ```
28
+
29
+ ---
30
+
31
+ ## Commit Types
32
+
33
+ | Type | When to Use | Example |
34
+ |------|------------|---------|
35
+ | `feat` | New feature or functionality | `feat(02-01): implement discord oauth client` |
36
+ | `fix` | Bug fix (including during execution) | `fix(02-01): handle null user profile from discord api` |
37
+ | `refactor` | Code restructuring, no behavior change | `refactor(02-01): extract token validation into helper` |
38
+ | `test` | Adding or modifying tests | `test(02-01): add failing tests for discord oauth flow` |
39
+ | `docs` | Documentation changes | `docs(03-02): add api endpoint documentation` |
40
+ | `chore` | Build config, dependencies, tooling | `chore(01-01): configure typescript and eslint` |
41
+ | `style` | Formatting, whitespace (no logic change) | `style(02-01): fix import ordering` |
42
+
43
+ ---
44
+
45
+ ## Special Commit Scopes
46
+
47
+ Beyond the standard `{phase}-{plan}` scope, Plan-Build-Run recognizes these additional patterns:
48
+
49
+ | Pattern | When Used | Example |
50
+ |---------|-----------|---------|
51
+ | `{type}(quick-{NNN})` | Quick-task commits via `/pbr:quick` | `feat(quick-001): add health endpoint` |
52
+ | `docs(planning)` | Planning document commits | `docs(planning): add phase 3 plans` |
53
+ | `wip: {desc}` or `wip({area}): {desc}` | Work-in-progress (use sparingly) | `wip(auth): partial oauth implementation` |
54
+ | Merge commits | Git merge operations | `Merge branch 'plan-build-run/phase-02-auth'` |
55
+
56
+ ---
57
+
58
+ ## Commit Body (Optional)
59
+
60
+ For commits that need explanation, add a body after a blank line:
61
+
62
+ ```
63
+ feat(02-01): implement discord oauth client
64
+
65
+ - Uses discord-oauth2 library for token exchange
66
+ - Stores tokens in httpOnly cookies for security
67
+ - Supports identify and email OAuth scopes
68
+
69
+ Deviation: Added null check for user.email (Rule 3 -- critical gap)
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Commit Points
75
+
76
+ Plan-Build-Run defines strict rules about WHEN commits happen:
77
+
78
+ ### One Task = One Commit
79
+
80
+ Each successfully completed plan task gets exactly one atomic commit. No more, no less.
81
+
82
+ ### TDD Tasks = Three Commits
83
+
84
+ TDD tasks (`tdd="true"`) produce exactly 3 commits following Red-Green-Refactor:
85
+
86
+ ```
87
+ test(02-01): RED - add failing tests for auth middleware
88
+ feat(02-01): GREEN - implement auth middleware to pass tests
89
+ refactor(02-01): REFACTOR - extract token verification helper
90
+ ```
91
+
92
+ ### Commit Preconditions
93
+
94
+ A commit is created only when:
95
+ 1. All `<action>` steps in the task are complete
96
+ 2. All `<verify>` commands pass with exit code 0
97
+ 3. Only files listed in the task's `<files>` element are staged (plus deviation-required files)
98
+
99
+ ### Deviation Commits
100
+
101
+ When an executor applies a deviation rule during a task, the deviation is included in the same task commit (not a separate commit):
102
+
103
+ ```
104
+ # Rule 1 auto-fix: rolled into the task's commit
105
+ # Rule 2 auto-install: package.json/lock added to same commit
106
+ # Rule 3 critical gap: null check added in same commit
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Atomic Commit Rules
112
+
113
+ 1. **One task = one commit** (TDD tasks get 3)
114
+ 2. **Commit only after verify passes** -- never commit broken code
115
+ 3. **Stage only files listed in `<files>`** plus any deviation-required files
116
+ 4. **Never use `git add .` or `git add -A`** -- stage specific files
117
+ 5. **Include all files from the task** -- do not leave modified files unstaged
118
+ 6. **Commit message must describe what was done** -- not just the task name
119
+ 7. **Use the configured commit format** -- from `config.json` `git.commit_format`
120
+
121
+ ---
122
+
123
+ ## Staging Examples
124
+
125
+ ```bash
126
+ # Standard task
127
+ git add src/auth/discord.ts src/auth/types.ts
128
+ git commit -m "feat(02-01): implement Discord OAuth client with token exchange"
129
+
130
+ # Task that also installed a dependency (Rule 2)
131
+ git add src/auth/discord.ts src/auth/types.ts package.json package-lock.json
132
+ git commit -m "feat(02-01): implement Discord OAuth client with token exchange"
133
+
134
+ # TDD RED
135
+ git add tests/auth/discord.test.ts
136
+ git commit -m "test(02-01): add failing tests for Discord OAuth flow"
137
+ ```
138
+
139
+ ---
140
+
141
+ ## Git Retry Logic
142
+
143
+ If `git commit` fails with a lock error (`fatal: Unable to create ... .git/index.lock`):
144
+ 1. Wait 2 seconds
145
+ 2. Retry the commit
146
+ 3. Maximum 3 attempts
147
+ 4. If still failing after 3 attempts, report the error and stop
148
+
149
+ This commonly occurs when parallel executors compete for the git index lock.
150
+
151
+ ---
152
+
153
+ ## Branching Strategy
154
+
155
+ Configured via `config.json` at `git.branching`:
156
+
157
+ | Strategy | Behavior |
158
+ |----------|----------|
159
+ | `none` | All commits go directly to the current branch (default) |
160
+ | `phase` | Each phase gets its own branch: `plan-build-run/phase-{NN}-{slug}`. Squash-merged to main on completion. |
161
+ | `milestone` | Each milestone gets a branch: `plan-build-run/{milestone}-{slug}`. Merged on milestone completion. |
162
+ | `disabled` | No git operations at all. No commits, no branching. Useful for prototyping or non-git projects. |
163
+
164
+ ### Phase Branching Flow
165
+
166
+ When `git.branching` is `phase`:
167
+ 1. Build orchestrator creates branch: `git checkout -b plan-build-run/phase-{NN}-{slug}`
168
+ 2. All executor commits go to the phase branch
169
+ 3. After all plans complete and verification passes, orchestrator asks user to confirm squash merge
170
+ 4. If confirmed: `git checkout main && git merge --squash plan-build-run/phase-{NN}-{slug}`
171
+ 5. Phase branch is deleted after merge
172
+
173
+ Branch name templates are configured in `config.json`:
174
+ - `git.phase_branch_template`: Default `plan-build-run/phase-{phase}-{slug}`
175
+ - `git.milestone_branch_template`: Default `plan-build-run/{milestone}-{slug}`
176
+
177
+ ### Git Mode
178
+
179
+ The `git.mode` field controls whether git integration is active:
180
+
181
+ | Mode | Behavior |
182
+ |------|----------|
183
+ | `enabled` | Normal operation -- commits, branching, hooks all active (default) |
184
+ | `disabled` | No git commands are run. No commits, no branching. Useful for non-git projects. |
185
+
186
+ ---
187
+
188
+ ## Hook Scripts
189
+
190
+ Plan-Build-Run uses Claude Code hooks (defined in `hooks/hooks.json`) to enforce conventions and track progress during execution. All hooks log via `hook-logger.js` to `.planning/.hook-log` (JSONL format, max 200 entries).
191
+
192
+ ### Hook Summary
193
+
194
+ | Hook Event | Script | Purpose |
195
+ |------------|--------|---------|
196
+ | `SessionStart` | `progress-tracker.js` | Displays current project progress on session start |
197
+ | `PostToolUse` (Write/Edit) | `check-plan-format.js` | Validates plan file YAML frontmatter after writes |
198
+ | `PostToolUse` (Write/Edit) | `check-roadmap-sync.js` | Ensures ROADMAP.md stays in sync with phase changes |
199
+ | `PreToolUse` (Bash) | `validate-commit.js` | Validates commit message format before `git commit` runs |
200
+ | `PreCompact` | `context-budget-check.js` | Warns about context budget before compaction |
201
+ | `Stop` | `auto-continue.js` | Handles auto-continuation signal when session ends |
202
+ | `SubagentStart` | `log-subagent.js start` | Logs subagent spawn events |
203
+ | `SubagentStop` | `log-subagent.js stop` | Logs subagent completion events |
204
+ | `SessionEnd` | `session-cleanup.js` | Cleans up temporary state on session end |
205
+
206
+ ### validate-commit.js Details
207
+
208
+ The commit validation hook (`PreToolUse` on Bash commands) enforces the commit format:
209
+ - Checks that `git commit -m "..."` messages match the pattern: `{type}({scope}): {description}`
210
+ - Valid types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `wip`
211
+ - Allows merge commits (starting with "Merge")
212
+ - Allows quick-task, planning, and WIP scope patterns
213
+ - Blocks commits with sensitive file patterns (`.env`, `.key`, `.pem`, credentials) unless they match safe patterns (`.example`, `.template`, `.sample`, test directories)
214
+ - Exit code 2 blocks the commit; exit code 0 allows it
215
+
216
+ ---
217
+
218
+ ## Planning Doc Commits
219
+
220
+ When `config.json` has `planning.commit_docs: true`, the build orchestrator commits planning artifacts (SUMMARY.md, VERIFICATION.md) after all plans in a phase complete:
221
+
222
+ ```
223
+ docs({phase}): add build summaries and verification
224
+ ```
225
+
226
+ This keeps the planning trail in version control alongside the code it describes.
@@ -0,0 +1,117 @@
1
+ # Integration Patterns Reference
2
+
3
+ Technology-specific grep/search patterns and E2E flow templates for integration-checker.
4
+
5
+ ## E2E Flow Templates
6
+
7
+ ### Authentication Flow
8
+
9
+ | Step | Check |
10
+ |------|-------|
11
+ | 1. Login form exists | Component with email/password fields or OAuth button |
12
+ | 2. Form submits to auth endpoint | onSubmit calls auth API or redirects to OAuth |
13
+ | 3. Backend validates credentials | Route handler with validation logic |
14
+ | 4. Token/session created | JWT generation or session creation |
15
+ | 5. Token stored client-side | Cookie set or localStorage/state |
16
+ | 6. Requests include auth | Auth header or cookie sent with API calls |
17
+ | 7. Protected routes accessible | Auth middleware passes with valid token |
18
+ | 8. Invalid auth redirects | 401 or redirect when no/invalid token |
19
+
20
+ ### Data Display Flow
21
+
22
+ | Step | Check |
23
+ |------|-------|
24
+ | 1. Page/component renders | Component file with JSX/HTML |
25
+ | 2. Component requests data | useEffect/useSWR/useQuery with API call |
26
+ | 3. API route handles request | Route handler exists for endpoint |
27
+ | 4. Handler queries data source | Database query or service call |
28
+ | 5. Data returned | res.json() or return with data |
29
+ | 6. Component renders data | Data mapped to JSX elements |
30
+ | 7. Loading state handled | Loading indicator while fetching |
31
+ | 8. Error state handled | Error message on failure |
32
+
33
+ ### Form Submission Flow
34
+
35
+ | Step | Check |
36
+ |------|-------|
37
+ | 1. Form component exists | Form element with inputs |
38
+ | 2. Client-side validation | Schema or manual checks |
39
+ | 3. Submit calls API | fetch/axios with form data |
40
+ | 4. Server validates input | Input validation in handler |
41
+ | 5. Server processes request | Business logic (CRUD) |
42
+ | 6. Database mutation | Write operation |
43
+ | 7. Success response | Response with success status |
44
+ | 8. UI reflects success | Toast/redirect/state update |
45
+ | 9. Error handling | Server errors shown in form |
46
+
47
+ ### CRUD Flow (per entity)
48
+
49
+ | Step | Check |
50
+ |------|-------|
51
+ | 1. List view | Component renders list |
52
+ | 2. Create form | Component with creation UI |
53
+ | 3. Create API | POST route with handler |
54
+ | 4. Read/detail API | GET route with handler |
55
+ | 5. Update form | Component with edit UI |
56
+ | 6. Update API | PUT/PATCH route with handler |
57
+ | 7. Delete action | Delete button/handler |
58
+ | 8. Delete API | DELETE route with handler |
59
+ | 9. Frontend calls all CRUD | All operations invoked from UI |
60
+ | 10. Auth on all ops | All operations require auth (if applicable) |
61
+
62
+ ## Technology-Specific Search Patterns
63
+
64
+ ### React / Next.js
65
+
66
+ ```bash
67
+ # Component imports and usage
68
+ grep -rn "import.*{Component}" src/ --include="*.tsx"
69
+ grep -rn "<{Component}" src/ --include="*.tsx"
70
+
71
+ # Context providers (must wrap the app)
72
+ grep -rn "Provider" src/app/layout.tsx src/pages/_app.tsx 2>/dev/null
73
+
74
+ # Client vs Server components (Next.js)
75
+ grep -rn "'use client'\|\"use client\"" src/ --include="*.tsx"
76
+
77
+ # Next.js API routes (App Router)
78
+ find src/app/api -name "route.ts" 2>/dev/null
79
+
80
+ # Next.js middleware
81
+ find src -name "middleware.ts" -maxdepth 2 2>/dev/null
82
+
83
+ # Data fetching hooks
84
+ grep -rn "useSWR\|useQuery\|useMutation\|getServerSideProps\|getStaticProps" src/ --include="*.tsx" --include="*.ts"
85
+ ```
86
+
87
+ ### Express / Node.js API
88
+
89
+ ```bash
90
+ # Route registration on main app
91
+ grep -rn "app\.use\|router\.use" src/ --include="*.ts" --include="*.js"
92
+
93
+ # Middleware chain order (important for auth)
94
+ grep -rn "\.use(" src/app.ts src/server.ts src/index.ts 2>/dev/null
95
+
96
+ # Error handling middleware (must be last)
97
+ grep -rn "err.*req.*res.*next\|ErrorHandler\|errorMiddleware" src/ --include="*.ts" --include="*.js"
98
+
99
+ # Database connection used in routes
100
+ grep -rn "db\.\|prisma\.\|knex\.\|mongoose\.\|sequelize\." src/ --include="*.ts" --include="*.js" | grep -v "node_modules"
101
+ ```
102
+
103
+ ### Python (Django / Flask / FastAPI)
104
+
105
+ ```bash
106
+ # URL patterns
107
+ grep -rn "urlpatterns\|path(\|route(" */urls.py **/urls.py 2>/dev/null
108
+
109
+ # View imports
110
+ grep -rn "from.*views.*import\|from.*api.*import" */urls.py **/urls.py 2>/dev/null
111
+
112
+ # Middleware registration
113
+ grep -rn "MIDDLEWARE" */settings.py 2>/dev/null
114
+
115
+ # Model imports in views
116
+ grep -rn "from.*models.*import" */views.py **/views.py 2>/dev/null
117
+ ```