@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,338 +1,347 @@
1
- ---
2
- name: discuss
3
- description: "Talk through a phase before planning. Identifies gray areas and captures your decisions."
4
- allowed-tools: Read, Write, Glob, Grep, AskUserQuestion
5
- argument-hint: "<phase-number>"
6
- ---
7
-
8
- # /pbr:discuss Pre-Planning Discussion
9
-
10
- You are running the **discuss** skill. Your job is to help the user think through a phase BEFORE planning begins. You identify gray areas where the user's preference matters, ask structured questions, and capture every decision in a CONTEXT.md file that the planner must honor.
11
-
12
- This skill runs **inline** (no Task delegation).
13
-
14
- ---
15
-
16
- ## Core Principle
17
-
18
- **Decisions made here are LOCKED.** The planner cannot override them, even if research suggests a different approach. The planner must implement the locked decision and may note the discrepancy, but must follow the user's choice exactly.
19
-
20
- ---
21
-
22
- ## Flow
23
-
24
- ### Step 0: Check for Existing Plans
25
-
26
- Before starting the discussion, check whether the phase already has plan artifacts:
27
-
28
- 1. Resolve the phase directory (see Step 1 for resolution logic)
29
- 2. Check for `PLAN.md` or `PLAN-*.md` files in the phase directory
30
- 3. If plan files exist:
31
- - Warn: "Phase {N} already has plans. Decisions from this discussion won't retroactively change them. Consider re-planning with `/pbr:plan {N}` after."
32
- - This is a **warning only** do not block the discussion
33
- - Proceed to Step 1
34
-
35
- ### Step 1: Parse Phase Number
36
-
37
- Parse `$ARGUMENTS` to get the phase number.
38
-
39
- **Validation:**
40
- - Must be a valid phase number (integer or decimal like `3.1`)
41
- - If no argument provided, read STATE.md to get the current phase
42
- - If no current phase and no argument: "Which phase do you want to discuss? Run `/pbr:status` to see available phases."
43
-
44
- **Phase directory resolution:**
45
- 1. List directories in `.planning/phases/`
46
- 2. Find directory matching pattern `{NN}-*` where NN matches the phase number
47
- 3. If not found, check ROADMAP.md for the phase name
48
- 4. If still not found, display:
49
- ```
50
- ╔══════════════════════════════════════════════════════════════╗
51
- ║ ERROR ║
52
- ╚══════════════════════════════════════════════════════════════╝
53
-
54
- Phase {N} not found.
55
-
56
- **To fix:** Run `/pbr:status` to see available phases.
57
- ```
58
-
59
- ### Step 2: Load Phase Context
60
-
61
- Read the following files to understand what this phase needs to accomplish:
62
-
63
- 1. **ROADMAP.md** Find the phase entry. Extract:
64
- - Phase name and description
65
- - Goal / objective
66
- - Requirements to satisfy
67
- - Success criteria
68
- - Dependencies on prior phases
69
-
70
- 2. **Prior SUMMARY.md files** Scan `.planning/phases/` for phases with lower numbers that have SUMMARY.md files. Read their frontmatter to understand:
71
- - What's already been built (`provides` field)
72
- - What technologies are in use (`tech_stack` field)
73
- - What patterns have been established (`patterns` field)
74
- - What decisions were already made (`key_decisions` field)
75
-
76
- 3. **REQUIREMENTS.md** (if exists) — Read project requirements relevant to this phase
77
-
78
- 4. **CONTEXT.md** (if exists in the phase directory) — Check if a prior discussion already happened
79
- - If CONTEXT.md exists, inform the user and use the **context-handling** pattern from `skills/shared/gate-prompts.md`:
80
- question: "Phase {N} already has a CONTEXT.md from a prior discussion. How should we handle it?"
81
-
82
- Handle responses:
83
- - "Overwrite": Replace CONTEXT.md entirely with new decisions
84
- - "Append": Add new decisions below existing ones, marked as "Amendment ({date})"
85
- - "Cancel": Stop the discussion, keep existing CONTEXT.md
86
-
87
- ### Step 2.5: Open Exploration Phase
88
-
89
- Before jumping into specific gray areas, give the user space to share their mental model unprompted.
90
-
91
- 1. **Present the phase goal** (from ROADMAP.md) and ask an open question:
92
- - "Before we get into specifics what's your mental model of how this phase should work? What excites you about it? What concerns you?"
93
-
94
- 2. **Follow the user's response with 2-3 domain-aware follow-ups** from `skills/shared/domain-probes.md`:
95
- - Match what the user mentioned to the relevant domain tables
96
- - Pick the 2-3 most insightful probes based on what they said, not a generic checklist
97
- - Ask them conversationally, not as a numbered list
98
-
99
- 3. **Surface implications** from what the user shared:
100
- - "You mentioned X that usually means we'd need Y. Is that part of your vision?"
101
- - Connect their ideas to concrete technical or design consequences
102
- - Flag anything that would affect scope, complexity, or dependencies
103
-
104
- 4. **Let the conversation reveal gray areas naturally.** The user's responses here often surface the real gray areas better than top-down analysis. Carry any themes, concerns, or preferences forward into Step 3.
105
-
106
- ### Step 3: Identify Gray Areas
107
-
108
- Analyze the phase goal, requirements, and what's already built. Identify **3-4 gray areas** where the user's preference matters. Gray areas fall into these categories:
109
-
110
- Read `skills/discuss/templates/decision-categories.md` for the category reference table.
111
-
112
- **How to identify gray areas:**
113
- 1. Look at the phase requirements where are there multiple valid approaches?
114
- 2. Look at prior phase decisions — where might this phase need to diverge?
115
- 3. Look at the success criteria — what's ambiguous about how to satisfy them?
116
- 4. Consider the user's likely pain points — what would they want a say in?
117
-
118
- **Important:** Do NOT identify gray areas that are purely implementation details (e.g., variable naming, file organization). Focus on areas that affect user experience, system behavior, or long-term maintainability.
119
-
120
- ### Step 4: Present Gray Areas
121
-
122
- Present each gray area to the user using the **gray-area-option** pattern from `skills/shared/gate-prompts.md`. For each gray area:
123
-
124
- Use AskUserQuestion:
125
- question: "Gray Area {N}: {Title}{Why this matters}"
126
- header: "Decision"
127
- options: (generate 2-4 concrete options from analysis, each with pros/cons in the description)
128
- - label: "{Option A}" description: "{Pros: ..., Cons: ...}"
129
- - label: "{Option B}" description: "{Pros: ..., Cons: ...}"
130
- - ...up to 4 options total, with "Let Claude decide" always as the last option
131
- - label: "Let Claude decide" description: "Mark as Claude's Discretion"
132
- multiSelect: false
133
-
134
- If more than 3 concrete options exist for a gray area, present only the top 3 plus "Let Claude decide" (max 4 total). Mention the omitted option(s) in the question text.
135
-
136
- **Rules for presenting options:**
137
- - Each option must be concrete and implementable
138
- - Include honest pros/cons (don't bias toward one option)
139
- - "Let Claude decide" should always be available as a choice
140
- - If the user gives a preference not in the options, accept it
141
- - If the user says "I don't care", mark it as Claude's Discretion
142
-
143
- ### Step 5: Deep-Dive Each Selected Area
144
-
145
- For each gray area where the user made a decision (not "Let Claude decide"), ask **4 follow-up questions** to fully capture their intent.
146
-
147
- **Follow-up question types:**
148
-
149
- 1. **Scope boundary**: "Should {feature} also handle {edge case}?"
150
- Use the **yes-no** pattern this is a binary decision.
151
-
152
- 2. **Quality level**: "How polished should this be?"
153
- Do NOT use AskUserQuestion — this is freeform. Let the user describe their quality expectations in their own words.
154
-
155
- 3. **Integration**: "How should this interact with {existing component}?"
156
- Do NOT use AskUserQuestion — this is freeform. The answer depends on the specific component and context.
157
-
158
- 4. **Future-proofing**: "Should we design this to support {potential future need}, or keep it simple?"
159
- Use the **yes-no** pattern:
160
- question: "Design {feature} to support {future need}, or keep it simple for now?"
161
- options:
162
- - label: "Future-proof" description: "Add extensibility for {future need}"
163
- - label: "Keep simple" description: "Build only what's needed now"
164
-
165
- **Rules for follow-ups:**
166
- - Ask all 4 questions for each area
167
- - Record exact answers (don't paraphrase)
168
- - If the user gives a short answer, capture it as-is
169
- - If the user says "you decide" on a follow-up, move that specific sub-decision to Claude's Discretion
170
-
171
- ### Step 6: Capture Deferred Ideas
172
-
173
- During the conversation, the user may mention ideas they want but not in this phase. Track these separately:
174
- - Ideas explicitly deferred by the user ("let's do that later")
175
- - Ideas that are out of scope for this phase based on ROADMAP.md
176
- - Ideas the user considered but rejected
177
-
178
- ### Step 7: Write CONTEXT.md
179
-
180
- Write the CONTEXT.md file to the phase directory:
181
-
182
- **Path:** `.planning/phases/{NN}-{phase-name}/CONTEXT.md`
183
-
184
- **Content:**
185
-
186
- Read `skills/discuss/templates/CONTEXT.md.tmpl` for the template structure.
187
-
188
- **Placeholders to fill:**
189
- - `{N}` -- the phase number
190
- - `{ISO date}` -- today's date in ISO format
191
- - `{Decision title}` / `{User's exact choice and reasoning}` -- from Step 4-5 decisions
192
- - `{Idea}` / `{Why deferred}` -- from Step 6 deferred ideas
193
- - `{Area}` / `{What Claude can choose}` -- items marked "Let Claude decide"
194
- - `{2-3 sentences}` -- user's vision summary from the conversation
195
- - `{Concern}` / `{Context}` -- concerns raised during discussion
196
-
197
- **Decision Summary generation:** The `## Decision Summary` section at the top of CONTEXT.md is a compact digest (~300 tokens) of all decisions. For each locked decision, write only the title and the user's choice in one phrase (no scope/quality/integration details). List deferred and discretion items as comma-separated titles only. This summary is injected into agent prompts by the plan skill -- keep it concise.
198
-
199
- ### Step 7.5: Update STATE.md Pointer
200
-
201
- Update `.planning/STATE.md`'s `## Accumulated Context` section to add a reference to the new CONTEXT.md:
202
-
203
- Add under the `### Decisions` subsection:
204
- ```
205
- Phase {N} discussion: .planning/phases/{NN}-{slug}/CONTEXT.md ({count} locked, {count} deferred, {count} discretion)
206
- ```
207
-
208
- This creates a pointer so `/pbr:resume` and `progress-tracker.js` know that phase-specific decisions exist and where to find them.
209
-
210
- ### Step 8: Confirm and Route
211
-
212
- After writing CONTEXT.md, display branded output:
213
-
214
- ```
215
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
216
- PLAN-BUILD-RUN ► DISCUSSION CAPTURED ✓
217
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
218
-
219
- **Phase {N}: {name}**
220
-
221
- Decisions: {count} locked, {count} deferred, {count} discretion
222
-
223
- ───────────────────────────────────────────────────────────────
224
-
225
- ## Next Up
226
-
227
- **Plan this phase** — your decisions will be honored
228
-
229
- `/pbr:plan {N}`
230
-
231
- <sub>`/clear` first → fresh context window</sub>
232
-
233
- ───────────────────────────────────────────────────────────────
234
-
235
- **Also available:**
236
- - `/pbr:status`see project status
237
- - `/pbr:explore` — explore ideas further
238
-
239
- ───────────────────────────────────────────────────────────────
240
- ```
241
-
242
- ---
243
-
244
- ## Decision Categories Reference
245
-
246
- ### LOCKED Decisions
247
-
248
- These come from:
249
- - User selecting a specific option (not "Let Claude decide")
250
- - User answering follow-up questions with specific preferences
251
- - User volunteering a strong opinion during discussion
252
-
253
- **The planner MUST:**
254
- - Implement exactly as the user specified
255
- - Not modify, optimize, or "improve" the decision
256
- - Note in the plan if research suggests a different approach
257
- - Still follow the locked decision regardless
258
-
259
- ### DEFERRED Ideas
260
-
261
- These come from:
262
- - User explicitly saying "not now" or "later"
263
- - Ideas that are out of scope per ROADMAP.md
264
- - User rejecting an option but saying it's a good idea for later
265
-
266
- **The planner MUST NOT:**
267
- - Include deferred ideas in the plan
268
- - Sneak deferred ideas in as "nice to have" tasks
269
- - Combine deferred ideas with in-scope work
270
-
271
- ### CLAUDE'S DISCRETION
272
-
273
- These come from:
274
- - User selecting "Let Claude decide"
275
- - User saying "I don't care" or "whatever you think"
276
- - Follow-up questions answered with "you decide"
277
-
278
- **The planner MAY:**
279
- - Choose any reasonable approach
280
- - Use research results to inform the choice
281
- - Change their mind during planning if they learn something new
282
- - Must document their choice and rationale in the plan
283
-
284
- ---
285
-
286
- ## Edge Cases
287
-
288
- ### Phase already has CONTEXT.md
289
- - Use the **context-handling** pattern from `skills/shared/gate-prompts.md` (same as Step 2)
290
- - If "Overwrite": replace entirely
291
- - If "Append": add new decisions below existing ones, marking them as "Amendment"
292
- - If "Cancel": stop the discussion, keep existing CONTEXT.md
293
-
294
- ### Phase already has plans
295
- - Handled by Step 0 — warn but do not block
296
- - See Step 0 for the exact warning message
297
-
298
- ### User wants to discuss multiple phases
299
- - Handle one at a time
300
- - After completing one, suggest: "Want to discuss Phase {N+1} too? Run `/pbr:discuss {N+1}`."
301
-
302
- ### User disagrees with all options
303
- - Ask: "What would you prefer instead?" — this is freeform text, do NOT use AskUserQuestion.
304
- - Accept any answer and lock it as a decision.
305
- - The options were suggestions, not constraints
306
-
307
- ### User wants to skip follow-ups
308
- - If user says "that's enough" or "skip the details", respect that
309
- - Write what you have partial follow-ups are fine
310
- - Mark missing follow-up areas as Claude's Discretion
311
-
312
- ---
313
-
314
- ## State Integration
315
-
316
- This skill updates STATE.md's Accumulated Context section with a pointer to the phase CONTEXT.md file. It does NOT change the project position (current phase/plan). STATE.md position is updated when `/pbr:plan` runs.
317
-
318
- ---
319
-
320
- ## Git Integration
321
-
322
- Reference: `skills/shared/commit-planning-docs.md` for the standard commit pattern.
323
-
324
- If `planning.commit_docs: true` in config.json:
325
- - Commit CONTEXT.md: `docs(planning): capture phase {N} discussion decisions`
326
-
327
- ---
328
-
329
- ## Anti-Patterns
330
-
331
- 1. **DO NOT** bias the user toward a particular option
332
- 2. **DO NOT** skip the follow-up questions (unless the user asks to skip)
333
- 3. **DO NOT** paraphrase the user's decisions — capture them verbatim
334
- 4. **DO NOT** add your own opinions to LOCKED decisions
335
- 5. **DO NOT** mark something as Claude's Discretion unless the user explicitly chose that
336
- 6. **DO NOT** include implementation details in CONTEXT.md — it captures WHAT, not HOW
337
- 7. **DO NOT** skip the deferred ideas section — this prevents scope creep later
338
- 8. **DO NOT** present more than 4 options per gray area — decision fatigue is real
1
+ ---
2
+ name: discuss
3
+ description: "Talk through a phase before planning. Identifies gray areas and captures your decisions."
4
+ allowed-tools: Read, Write, Glob, Grep, AskUserQuestion
5
+ argument-hint: "<phase-number>"
6
+ ---
7
+
8
+ **STOPDO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by Claude Code's plugin system. Using the Read tool on this SKILL.md file wastes ~7,600 tokens. Begin executing Step 1 immediately.**
9
+
10
+ ## Step 0 Immediate Output
11
+
12
+ **Before ANY tool calls**, display this banner:
13
+
14
+ ```
15
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16
+ PLAN-BUILD-RUN ► DISCUSSION
17
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18
+ ```
19
+
20
+ Then proceed to Step 1.
21
+
22
+ # /pbr:discuss — Pre-Planning Discussion
23
+
24
+ You are running the **discuss** skill. Your job is to help the user think through a phase BEFORE planning begins. You identify gray areas where the user's preference matters, ask structured questions, and capture every decision in a CONTEXT.md file that the planner must honor.
25
+
26
+ This skill runs **inline** (no Task delegation).
27
+
28
+ ---
29
+
30
+ ## Core Principle
31
+
32
+ **Decisions made here are LOCKED.** The planner cannot override them, even if research suggests a different approach. The planner must implement the locked decision and may note the discrepancy, but must follow the user's choice exactly.
33
+
34
+ ---
35
+
36
+ ## Flow
37
+
38
+ ### Step 1: Parse Phase Number and Check for Existing Plans
39
+
40
+ Parse `$ARGUMENTS` to get the phase number.
41
+
42
+ **Validation:**
43
+ - Must be a valid phase number (integer or decimal like `3.1`)
44
+ - If no argument provided, read STATE.md to get the current phase
45
+ - If no current phase and no argument: "Which phase do you want to discuss? Run `/pbr:status` to see available phases."
46
+
47
+ **Phase directory resolution:**
48
+ 1. List directories in `.planning/phases/`
49
+ 2. Find directory matching pattern `{NN}-*` where NN matches the phase number
50
+ 3. If not found, check ROADMAP.md for the phase name
51
+ 4. If still not found, display:
52
+ ```
53
+ ╔══════════════════════════════════════════════════════════════╗
54
+ ║ ERROR ║
55
+ ╚══════════════════════════════════════════════════════════════╝
56
+
57
+ Phase {N} not found.
58
+
59
+ **To fix:** Run `/pbr:status` to see available phases.
60
+ ```
61
+
62
+ **Check for existing plans** (after resolving the phase directory):
63
+ 1. Check for `PLAN.md` or `PLAN-*.md` files in the phase directory
64
+ 2. If plan files exist:
65
+ - Warn: "Phase {N} already has plans. Decisions from this discussion won't retroactively change them. Consider re-planning with `/pbr:plan {N}` after."
66
+ - This is a **warning only** — do not block the discussion
67
+
68
+ ### Step 2: Load Phase Context
69
+
70
+ Read the following files to understand what this phase needs to accomplish:
71
+
72
+ 1. **ROADMAP.md** Find the phase entry. Extract:
73
+ - Phase name and description
74
+ - Goal / objective
75
+ - Requirements to satisfy
76
+ - Success criteria
77
+ - Dependencies on prior phases
78
+
79
+ 2. **Prior SUMMARY.md files** Scan `.planning/phases/` for phases with lower numbers that have SUMMARY.md files. Read their frontmatter to understand:
80
+ - What's already been built (`provides` field)
81
+ - What technologies are in use (`tech_stack` field)
82
+ - What patterns have been established (`patterns` field)
83
+ - What decisions were already made (`key_decisions` field)
84
+
85
+ 3. **REQUIREMENTS.md** (if exists) Read project requirements relevant to this phase
86
+
87
+ 4. **CONTEXT.md** (if exists in the phase directory) — Check if a prior discussion already happened
88
+ - If CONTEXT.md exists, inform the user and use the **context-handling** pattern from `skills/shared/gate-prompts.md`:
89
+ question: "Phase {N} already has a CONTEXT.md from a prior discussion. How should we handle it?"
90
+
91
+ Handle responses:
92
+ - "Overwrite": Replace CONTEXT.md entirely with new decisions
93
+ - "Append": Add new decisions below existing ones, marked as "Amendment ({date})"
94
+ - "Cancel": Stop the discussion, keep existing CONTEXT.md
95
+
96
+ ### Step 2.5: Open Exploration Phase
97
+
98
+ Before jumping into specific gray areas, give the user space to share their mental model unprompted.
99
+
100
+ 1. **Present the phase goal** (from ROADMAP.md) and ask an open question:
101
+ - "Before we get into specifics what's your mental model of how this phase should work? What excites you about it? What concerns you?"
102
+
103
+ 2. **Follow the user's response with 2-3 domain-aware follow-ups** from `skills/shared/domain-probes.md`:
104
+ - Match what the user mentioned to the relevant domain tables
105
+ - Pick the 2-3 most insightful probes based on what they said, not a generic checklist
106
+ - Ask them conversationally, not as a numbered list
107
+
108
+ 3. **Surface implications** from what the user shared:
109
+ - "You mentioned X — that usually means we'd need Y. Is that part of your vision?"
110
+ - Connect their ideas to concrete technical or design consequences
111
+ - Flag anything that would affect scope, complexity, or dependencies
112
+
113
+ 4. **Let the conversation reveal gray areas naturally.** The user's responses here often surface the real gray areas better than top-down analysis. Carry any themes, concerns, or preferences forward into Step 3.
114
+
115
+ ### Step 3: Identify Gray Areas
116
+
117
+ Analyze the phase goal, requirements, and what's already built. Identify **3-4 gray areas** where the user's preference matters. Gray areas fall into these categories:
118
+
119
+ Read `skills/discuss/templates/decision-categories.md` for the category reference table.
120
+
121
+ **How to identify gray areas:**
122
+ 1. Look at the phase requirements where are there multiple valid approaches?
123
+ 2. Look at prior phase decisions — where might this phase need to diverge?
124
+ 3. Look at the success criteria — what's ambiguous about how to satisfy them?
125
+ 4. Consider the user's likely pain points what would they want a say in?
126
+
127
+ **Important:** Do NOT identify gray areas that are purely implementation details (e.g., variable naming, file organization). Focus on areas that affect user experience, system behavior, or long-term maintainability.
128
+
129
+ ### Step 4: Present Gray Areas
130
+
131
+ Present each gray area to the user using the **gray-area-option** pattern from `skills/shared/gate-prompts.md`. For each gray area:
132
+
133
+ Use AskUserQuestion:
134
+ question: "Gray Area {N}: {Title} {Why this matters}"
135
+ header: "Decision"
136
+ options: (generate 2-4 concrete options from analysis, each with pros/cons in the description)
137
+ - label: "{Option A}" description: "{Pros: ..., Cons: ...}"
138
+ - label: "{Option B}" description: "{Pros: ..., Cons: ...}"
139
+ - ...up to 4 options total, with "Let Claude decide" always as the last option
140
+ - label: "Let Claude decide" description: "Mark as Claude's Discretion"
141
+ multiSelect: false
142
+
143
+ If more than 3 concrete options exist for a gray area, present only the top 3 plus "Let Claude decide" (max 4 total). Mention the omitted option(s) in the question text.
144
+
145
+ **Rules for presenting options:**
146
+ - Each option must be concrete and implementable
147
+ - Include honest pros/cons (don't bias toward one option)
148
+ - "Let Claude decide" should always be available as a choice
149
+ - If the user gives a preference not in the options, accept it
150
+ - If the user says "I don't care", mark it as Claude's Discretion
151
+
152
+ ### Step 5: Deep-Dive Each Selected Area
153
+
154
+ For each gray area where the user made a decision (not "Let Claude decide"), ask **4 follow-up questions** to fully capture their intent.
155
+
156
+ **Follow-up question types:**
157
+
158
+ 1. **Scope boundary**: "Should {feature} also handle {edge case}?"
159
+ Use the **yes-no** pattern — this is a binary decision.
160
+
161
+ 2. **Quality level**: "How polished should this be?"
162
+ Do NOT use AskUserQuestion this is freeform. Let the user describe their quality expectations in their own words.
163
+
164
+ 3. **Integration**: "How should this interact with {existing component}?"
165
+ Do NOT use AskUserQuestion — this is freeform. The answer depends on the specific component and context.
166
+
167
+ 4. **Future-proofing**: "Should we design this to support {potential future need}, or keep it simple?"
168
+ Use the **yes-no** pattern:
169
+ question: "Design {feature} to support {future need}, or keep it simple for now?"
170
+ options:
171
+ - label: "Future-proof" description: "Add extensibility for {future need}"
172
+ - label: "Keep simple" description: "Build only what's needed now"
173
+
174
+ **Rules for follow-ups:**
175
+ - Ask all 4 questions for each area
176
+ - Record exact answers (don't paraphrase)
177
+ - If the user gives a short answer, capture it as-is
178
+ - If the user says "you decide" on a follow-up, move that specific sub-decision to Claude's Discretion
179
+
180
+ ### Step 6: Capture Deferred Ideas
181
+
182
+ During the conversation, the user may mention ideas they want but not in this phase. Track these separately:
183
+ - Ideas explicitly deferred by the user ("let's do that later")
184
+ - Ideas that are out of scope for this phase based on ROADMAP.md
185
+ - Ideas the user considered but rejected
186
+
187
+ ### Step 7: Write CONTEXT.md
188
+
189
+ Write the CONTEXT.md file to the phase directory:
190
+
191
+ **Path:** `.planning/phases/{NN}-{phase-name}/CONTEXT.md`
192
+
193
+ **Content:**
194
+
195
+ Read `skills/discuss/templates/CONTEXT.md.tmpl` for the template structure.
196
+
197
+ **Placeholders to fill:**
198
+ - `{N}` -- the phase number
199
+ - `{ISO date}` -- today's date in ISO format
200
+ - `{Decision title}` / `{User's exact choice and reasoning}` -- from Step 4-5 decisions
201
+ - `{Idea}` / `{Why deferred}` -- from Step 6 deferred ideas
202
+ - `{Area}` / `{What Claude can choose}` -- items marked "Let Claude decide"
203
+ - `{2-3 sentences}` -- user's vision summary from the conversation
204
+ - `{Concern}` / `{Context}` -- concerns raised during discussion
205
+
206
+ **Decision Summary generation:** The `## Decision Summary` section at the top of CONTEXT.md is a compact digest (~300 tokens) of all decisions. For each locked decision, write only the title and the user's choice in one phrase (no scope/quality/integration details). List deferred and discretion items as comma-separated titles only. This summary is injected into agent prompts by the plan skill -- keep it concise.
207
+
208
+ ### Step 7.5: Update STATE.md Pointer
209
+
210
+ Update `.planning/STATE.md`'s `## Accumulated Context` section to add a reference to the new CONTEXT.md:
211
+
212
+ Add under the `### Decisions` subsection:
213
+ ```
214
+ Phase {N} discussion: .planning/phases/{NN}-{slug}/CONTEXT.md ({count} locked, {count} deferred, {count} discretion)
215
+ ```
216
+
217
+ This creates a pointer so `/pbr:resume` and `progress-tracker.js` know that phase-specific decisions exist and where to find them.
218
+
219
+ ### Step 8: Confirm and Route
220
+
221
+ After writing CONTEXT.md, display branded output:
222
+
223
+ ```
224
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
225
+ PLAN-BUILD-RUN DISCUSSION CAPTURED ✓
226
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
227
+
228
+ **Phase {N}: {name}**
229
+
230
+ Decisions: {count} locked, {count} deferred, {count} discretion
231
+
232
+ ───────────────────────────────────────────────────────────────
233
+
234
+ ## ▶ Next Up
235
+
236
+ **Plan this phase** your decisions will be honored
237
+
238
+ `/pbr:plan {N}`
239
+
240
+ <sub>`/clear` first → fresh context window</sub>
241
+
242
+ ───────────────────────────────────────────────────────────────
243
+
244
+ **Also available:**
245
+ - `/pbr:status` — see project status
246
+ - `/pbr:explore` — explore ideas further
247
+
248
+ ───────────────────────────────────────────────────────────────
249
+ ```
250
+
251
+ ---
252
+
253
+ ## Decision Categories Reference
254
+
255
+ ### LOCKED Decisions
256
+
257
+ These come from:
258
+ - User selecting a specific option (not "Let Claude decide")
259
+ - User answering follow-up questions with specific preferences
260
+ - User volunteering a strong opinion during discussion
261
+
262
+ **The planner MUST:**
263
+ - Implement exactly as the user specified
264
+ - Not modify, optimize, or "improve" the decision
265
+ - Note in the plan if research suggests a different approach
266
+ - Still follow the locked decision regardless
267
+
268
+ ### DEFERRED Ideas
269
+
270
+ These come from:
271
+ - User explicitly saying "not now" or "later"
272
+ - Ideas that are out of scope per ROADMAP.md
273
+ - User rejecting an option but saying it's a good idea for later
274
+
275
+ **The planner MUST NOT:**
276
+ - Include deferred ideas in the plan
277
+ - Sneak deferred ideas in as "nice to have" tasks
278
+ - Combine deferred ideas with in-scope work
279
+
280
+ ### CLAUDE'S DISCRETION
281
+
282
+ These come from:
283
+ - User selecting "Let Claude decide"
284
+ - User saying "I don't care" or "whatever you think"
285
+ - Follow-up questions answered with "you decide"
286
+
287
+ **The planner MAY:**
288
+ - Choose any reasonable approach
289
+ - Use research results to inform the choice
290
+ - Change their mind during planning if they learn something new
291
+ - Must document their choice and rationale in the plan
292
+
293
+ ---
294
+
295
+ ## Edge Cases
296
+
297
+ ### Phase already has CONTEXT.md
298
+ - Use the **context-handling** pattern from `skills/shared/gate-prompts.md` (same as Step 2)
299
+ - If "Overwrite": replace entirely
300
+ - If "Append": add new decisions below existing ones, marking them as "Amendment"
301
+ - If "Cancel": stop the discussion, keep existing CONTEXT.md
302
+
303
+ ### Phase already has plans
304
+ - Handled by Step 1 warn but do not block
305
+ - See Step 1 "Check for existing plans" for the exact warning message
306
+
307
+ ### User wants to discuss multiple phases
308
+ - Handle one at a time
309
+ - After completing one, suggest: "Want to discuss Phase {N+1} too? Run `/pbr:discuss {N+1}`."
310
+
311
+ ### User disagrees with all options
312
+ - Ask: "What would you prefer instead?" — this is freeform text, do NOT use AskUserQuestion.
313
+ - Accept any answer and lock it as a decision.
314
+ - The options were suggestions, not constraints
315
+
316
+ ### User wants to skip follow-ups
317
+ - If user says "that's enough" or "skip the details", respect that
318
+ - Write what you have — partial follow-ups are fine
319
+ - Mark missing follow-up areas as Claude's Discretion
320
+
321
+ ---
322
+
323
+ ## State Integration
324
+
325
+ This skill updates STATE.md's Accumulated Context section with a pointer to the phase CONTEXT.md file. It does NOT change the project position (current phase/plan). STATE.md position is updated when `/pbr:plan` runs.
326
+
327
+ ---
328
+
329
+ ## Git Integration
330
+
331
+ Reference: `skills/shared/commit-planning-docs.md` for the standard commit pattern.
332
+
333
+ If `planning.commit_docs: true` in config.json:
334
+ - Commit CONTEXT.md: `docs(planning): capture phase {N} discussion decisions`
335
+
336
+ ---
337
+
338
+ ## Anti-Patterns
339
+
340
+ 1. **DO NOT** bias the user toward a particular option
341
+ 2. **DO NOT** skip the follow-up questions (unless the user asks to skip)
342
+ 3. **DO NOT** paraphrase the user's decisions — capture them verbatim
343
+ 4. **DO NOT** add your own opinions to LOCKED decisions
344
+ 5. **DO NOT** mark something as Claude's Discretion unless the user explicitly chose that
345
+ 6. **DO NOT** include implementation details in CONTEXT.md — it captures WHAT, not HOW
346
+ 7. **DO NOT** skip the deferred ideas section — this prevents scope creep later
347
+ 8. **DO NOT** present more than 4 options per gray area — decision fatigue is real