@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.
- package/CHANGELOG.md +56 -0
- package/CLAUDE.md +149 -0
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/dashboard/bin/cli.js +25 -0
- package/dashboard/package.json +34 -0
- package/dashboard/public/.gitkeep +0 -0
- package/dashboard/public/css/layout.css +406 -0
- package/dashboard/public/css/status-colors.css +98 -0
- package/dashboard/public/js/htmx-title.js +5 -0
- package/dashboard/public/js/sidebar-toggle.js +20 -0
- package/dashboard/src/app.js +78 -0
- package/dashboard/src/middleware/errorHandler.js +52 -0
- package/dashboard/src/middleware/notFoundHandler.js +9 -0
- package/dashboard/src/repositories/planning.repository.js +128 -0
- package/dashboard/src/routes/events.routes.js +40 -0
- package/dashboard/src/routes/index.routes.js +31 -0
- package/dashboard/src/routes/pages.routes.js +195 -0
- package/dashboard/src/server.js +42 -0
- package/dashboard/src/services/dashboard.service.js +222 -0
- package/dashboard/src/services/phase.service.js +167 -0
- package/dashboard/src/services/project.service.js +57 -0
- package/dashboard/src/services/roadmap.service.js +171 -0
- package/dashboard/src/services/sse.service.js +58 -0
- package/dashboard/src/services/todo.service.js +254 -0
- package/dashboard/src/services/watcher.service.js +48 -0
- package/dashboard/src/views/coming-soon.ejs +11 -0
- package/dashboard/src/views/error.ejs +13 -0
- package/dashboard/src/views/index.ejs +5 -0
- package/dashboard/src/views/layout.ejs +1 -0
- package/dashboard/src/views/partials/dashboard-content.ejs +77 -0
- package/dashboard/src/views/partials/footer.ejs +3 -0
- package/dashboard/src/views/partials/head.ejs +21 -0
- package/dashboard/src/views/partials/header.ejs +12 -0
- package/dashboard/src/views/partials/layout-bottom.ejs +15 -0
- package/dashboard/src/views/partials/layout-top.ejs +8 -0
- package/dashboard/src/views/partials/phase-content.ejs +181 -0
- package/dashboard/src/views/partials/phases-content.ejs +117 -0
- package/dashboard/src/views/partials/roadmap-content.ejs +142 -0
- package/dashboard/src/views/partials/sidebar.ejs +38 -0
- package/dashboard/src/views/partials/todo-create-content.ejs +53 -0
- package/dashboard/src/views/partials/todo-detail-content.ejs +38 -0
- package/dashboard/src/views/partials/todos-content.ejs +53 -0
- package/dashboard/src/views/phase-detail.ejs +5 -0
- package/dashboard/src/views/phases.ejs +5 -0
- package/dashboard/src/views/roadmap.ejs +5 -0
- package/dashboard/src/views/todo-create.ejs +5 -0
- package/dashboard/src/views/todo-detail.ejs +5 -0
- package/dashboard/src/views/todos.ejs +5 -0
- package/package.json +57 -0
- package/plugins/pbr/.claude-plugin/plugin.json +13 -0
- package/plugins/pbr/UI-CONSISTENCY-GAPS.md +61 -0
- package/plugins/pbr/agents/codebase-mapper.md +271 -0
- package/plugins/pbr/agents/debugger.md +281 -0
- package/plugins/pbr/agents/executor.md +407 -0
- package/plugins/pbr/agents/general.md +164 -0
- package/plugins/pbr/agents/integration-checker.md +141 -0
- package/plugins/pbr/agents/plan-checker.md +280 -0
- package/plugins/pbr/agents/planner.md +358 -0
- package/plugins/pbr/agents/researcher.md +363 -0
- package/plugins/pbr/agents/synthesizer.md +230 -0
- package/plugins/pbr/agents/verifier.md +454 -0
- package/plugins/pbr/commands/begin.md +5 -0
- package/plugins/pbr/commands/build.md +5 -0
- package/plugins/pbr/commands/config.md +5 -0
- package/plugins/pbr/commands/continue.md +5 -0
- package/plugins/pbr/commands/debug.md +5 -0
- package/plugins/pbr/commands/discuss.md +5 -0
- package/plugins/pbr/commands/explore.md +5 -0
- package/plugins/pbr/commands/health.md +5 -0
- package/plugins/pbr/commands/help.md +5 -0
- package/plugins/pbr/commands/import.md +5 -0
- package/plugins/pbr/commands/milestone.md +5 -0
- package/plugins/pbr/commands/note.md +5 -0
- package/plugins/pbr/commands/pause.md +5 -0
- package/plugins/pbr/commands/plan.md +5 -0
- package/plugins/pbr/commands/quick.md +5 -0
- package/plugins/pbr/commands/resume.md +5 -0
- package/plugins/pbr/commands/review.md +5 -0
- package/plugins/pbr/commands/scan.md +5 -0
- package/plugins/pbr/commands/setup.md +5 -0
- package/plugins/pbr/commands/status.md +5 -0
- package/plugins/pbr/commands/todo.md +5 -0
- package/plugins/pbr/contexts/dev.md +27 -0
- package/plugins/pbr/contexts/research.md +28 -0
- package/plugins/pbr/contexts/review.md +36 -0
- package/plugins/pbr/hooks/hooks.json +183 -0
- package/plugins/pbr/references/agent-anti-patterns.md +24 -0
- package/plugins/pbr/references/agent-interactions.md +134 -0
- package/plugins/pbr/references/agent-teams.md +54 -0
- package/plugins/pbr/references/checkpoints.md +157 -0
- package/plugins/pbr/references/common-bug-patterns.md +13 -0
- package/plugins/pbr/references/continuation-format.md +212 -0
- package/plugins/pbr/references/deviation-rules.md +112 -0
- package/plugins/pbr/references/git-integration.md +226 -0
- package/plugins/pbr/references/integration-patterns.md +117 -0
- package/plugins/pbr/references/model-profiles.md +99 -0
- package/plugins/pbr/references/model-selection.md +31 -0
- package/plugins/pbr/references/pbr-rules.md +193 -0
- package/plugins/pbr/references/plan-authoring.md +181 -0
- package/plugins/pbr/references/plan-format.md +283 -0
- package/plugins/pbr/references/planning-config.md +213 -0
- package/plugins/pbr/references/questioning.md +214 -0
- package/plugins/pbr/references/reading-verification.md +127 -0
- package/plugins/pbr/references/stub-patterns.md +160 -0
- package/plugins/pbr/references/subagent-coordination.md +119 -0
- package/plugins/pbr/references/ui-formatting.md +399 -0
- package/plugins/pbr/references/verification-patterns.md +198 -0
- package/plugins/pbr/references/wave-execution.md +95 -0
- package/plugins/pbr/scripts/auto-continue.js +80 -0
- package/plugins/pbr/scripts/check-dangerous-commands.js +136 -0
- package/plugins/pbr/scripts/check-doc-sprawl.js +102 -0
- package/plugins/pbr/scripts/check-phase-boundary.js +196 -0
- package/plugins/pbr/scripts/check-plan-format.js +270 -0
- package/plugins/pbr/scripts/check-roadmap-sync.js +252 -0
- package/plugins/pbr/scripts/check-skill-workflow.js +262 -0
- package/plugins/pbr/scripts/check-state-sync.js +476 -0
- package/plugins/pbr/scripts/check-subagent-output.js +144 -0
- package/plugins/pbr/scripts/config-schema.json +251 -0
- package/plugins/pbr/scripts/context-budget-check.js +287 -0
- package/plugins/pbr/scripts/event-handler.js +151 -0
- package/plugins/pbr/scripts/event-logger.js +92 -0
- package/plugins/pbr/scripts/hook-logger.js +76 -0
- package/plugins/pbr/scripts/hooks-schema.json +79 -0
- package/plugins/pbr/scripts/log-subagent.js +152 -0
- package/plugins/pbr/scripts/log-tool-failure.js +88 -0
- package/plugins/pbr/scripts/pbr-tools.js +1301 -0
- package/plugins/pbr/scripts/post-write-dispatch.js +66 -0
- package/plugins/pbr/scripts/post-write-quality.js +207 -0
- package/plugins/pbr/scripts/pre-bash-dispatch.js +56 -0
- package/plugins/pbr/scripts/pre-write-dispatch.js +62 -0
- package/plugins/pbr/scripts/progress-tracker.js +228 -0
- package/plugins/pbr/scripts/session-cleanup.js +254 -0
- package/plugins/pbr/scripts/status-line.js +285 -0
- package/plugins/pbr/scripts/suggest-compact.js +119 -0
- package/plugins/pbr/scripts/task-completed.js +45 -0
- package/plugins/pbr/scripts/track-context-budget.js +119 -0
- package/plugins/pbr/scripts/validate-commit.js +200 -0
- package/plugins/pbr/scripts/validate-plugin-structure.js +172 -0
- package/plugins/pbr/skills/begin/SKILL.md +545 -0
- package/plugins/pbr/skills/begin/templates/PROJECT.md.tmpl +33 -0
- package/plugins/pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +18 -0
- package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +49 -0
- package/plugins/pbr/skills/begin/templates/config.json.tmpl +63 -0
- package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +19 -0
- package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +30 -0
- package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +16 -0
- package/plugins/pbr/skills/build/SKILL.md +962 -0
- package/plugins/pbr/skills/config/SKILL.md +241 -0
- package/plugins/pbr/skills/continue/SKILL.md +127 -0
- package/plugins/pbr/skills/debug/SKILL.md +489 -0
- package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +16 -0
- package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +27 -0
- package/plugins/pbr/skills/discuss/SKILL.md +338 -0
- package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +61 -0
- package/plugins/pbr/skills/discuss/templates/decision-categories.md +9 -0
- package/plugins/pbr/skills/explore/SKILL.md +362 -0
- package/plugins/pbr/skills/health/SKILL.md +186 -0
- package/plugins/pbr/skills/health/templates/check-pattern.md.tmpl +30 -0
- package/plugins/pbr/skills/health/templates/output-format.md.tmpl +63 -0
- package/plugins/pbr/skills/help/SKILL.md +140 -0
- package/plugins/pbr/skills/import/SKILL.md +490 -0
- package/plugins/pbr/skills/milestone/SKILL.md +673 -0
- package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +48 -0
- package/plugins/pbr/skills/milestone/templates/stats-file.md.tmpl +30 -0
- package/plugins/pbr/skills/note/SKILL.md +212 -0
- package/plugins/pbr/skills/pause/SKILL.md +235 -0
- package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +71 -0
- package/plugins/pbr/skills/plan/SKILL.md +628 -0
- package/plugins/pbr/skills/plan/decimal-phase-calc.md +98 -0
- package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +21 -0
- package/plugins/pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +32 -0
- package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +38 -0
- package/plugins/pbr/skills/plan/templates/researcher-prompt.md.tmpl +19 -0
- package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +23 -0
- package/plugins/pbr/skills/quick/SKILL.md +335 -0
- package/plugins/pbr/skills/resume/SKILL.md +388 -0
- package/plugins/pbr/skills/review/SKILL.md +652 -0
- package/plugins/pbr/skills/review/templates/debugger-prompt.md.tmpl +60 -0
- package/plugins/pbr/skills/review/templates/gap-planner-prompt.md.tmpl +40 -0
- package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +115 -0
- package/plugins/pbr/skills/scan/SKILL.md +269 -0
- package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +201 -0
- package/plugins/pbr/skills/setup/SKILL.md +227 -0
- package/plugins/pbr/skills/shared/commit-planning-docs.md +35 -0
- package/plugins/pbr/skills/shared/config-loading.md +102 -0
- package/plugins/pbr/skills/shared/context-budget.md +40 -0
- package/plugins/pbr/skills/shared/context-loader-task.md +86 -0
- package/plugins/pbr/skills/shared/digest-select.md +79 -0
- package/plugins/pbr/skills/shared/domain-probes.md +125 -0
- package/plugins/pbr/skills/shared/error-reporting.md +79 -0
- package/plugins/pbr/skills/shared/gate-prompts.md +388 -0
- package/plugins/pbr/skills/shared/phase-argument-parsing.md +45 -0
- package/plugins/pbr/skills/shared/progress-display.md +53 -0
- package/plugins/pbr/skills/shared/revision-loop.md +81 -0
- package/plugins/pbr/skills/shared/state-loading.md +62 -0
- package/plugins/pbr/skills/shared/state-update.md +161 -0
- package/plugins/pbr/skills/shared/universal-anti-patterns.md +33 -0
- package/plugins/pbr/skills/status/SKILL.md +353 -0
- package/plugins/pbr/skills/todo/SKILL.md +181 -0
- package/plugins/pbr/templates/CONTEXT.md.tmpl +52 -0
- package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +151 -0
- package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +97 -0
- package/plugins/pbr/templates/ROADMAP.md.tmpl +40 -0
- package/plugins/pbr/templates/SUMMARY.md.tmpl +81 -0
- package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +116 -0
- package/plugins/pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -0
- package/plugins/pbr/templates/codebase/CONCERNS.md.tmpl +93 -0
- package/plugins/pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -0
- package/plugins/pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -0
- package/plugins/pbr/templates/codebase/STACK.md.tmpl +78 -0
- package/plugins/pbr/templates/codebase/STRUCTURE.md.tmpl +80 -0
- package/plugins/pbr/templates/codebase/TESTING.md.tmpl +107 -0
- package/plugins/pbr/templates/continue-here.md.tmpl +73 -0
- package/plugins/pbr/templates/prompt-partials/phase-project-context.md.tmpl +37 -0
- package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +124 -0
- package/plugins/pbr/templates/research/STACK.md.tmpl +71 -0
- package/plugins/pbr/templates/research/SUMMARY.md.tmpl +112 -0
- package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +81 -0
- package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +99 -0
- package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +36 -0
|
@@ -0,0 +1,338 @@
|
|
|
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
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<!-- Source: discuss/SKILL.md | Purpose: Template for the CONTEXT.md file written after a phase discussion -->
|
|
2
|
+
|
|
3
|
+
# Phase {N} Context
|
|
4
|
+
|
|
5
|
+
**Created by:** /pbr:discuss {N}
|
|
6
|
+
**Date:** {ISO date}
|
|
7
|
+
|
|
8
|
+
## Decision Summary
|
|
9
|
+
|
|
10
|
+
<!-- Compact digest for agent prompt injection. ~300 tokens max. -->
|
|
11
|
+
<!-- Agents: Read the full sections below only if you need scope/quality/integration details. -->
|
|
12
|
+
|
|
13
|
+
**Locked:**
|
|
14
|
+
- {Decision title}: {User's choice in one phrase}
|
|
15
|
+
- {Decision title}: {User's choice in one phrase}
|
|
16
|
+
|
|
17
|
+
**Deferred (excluded):** {Comma-separated list of deferred idea titles, or "None"}
|
|
18
|
+
|
|
19
|
+
**Discretion:** {Comma-separated list of discretion area titles, or "None"}
|
|
20
|
+
|
|
21
|
+
## Decisions (LOCKED -- must implement exactly as specified)
|
|
22
|
+
|
|
23
|
+
These decisions are NON-NEGOTIABLE during planning. If research suggests a different approach,
|
|
24
|
+
the planner must use the locked decision and note the discrepancy in the plan.
|
|
25
|
+
|
|
26
|
+
- [ ] **{Decision title}** -- {User's exact choice and reasoning}
|
|
27
|
+
- Scope: {Any scope boundaries from follow-ups}
|
|
28
|
+
- Quality: {Quality level from follow-ups}
|
|
29
|
+
- Integration: {Integration notes from follow-ups}
|
|
30
|
+
- Notes: {Any additional context}
|
|
31
|
+
|
|
32
|
+
- [ ] **{Decision title}** -- {User's exact choice and reasoning}
|
|
33
|
+
...
|
|
34
|
+
|
|
35
|
+
## Deferred Ideas (EXCLUDED -- do not plan these)
|
|
36
|
+
|
|
37
|
+
These ideas were discussed but explicitly excluded from this phase.
|
|
38
|
+
They may be addressed in future phases or milestones.
|
|
39
|
+
|
|
40
|
+
- **{Idea}** -- {Why deferred}
|
|
41
|
+
- **{Idea}** -- {Why deferred}
|
|
42
|
+
|
|
43
|
+
## Claude's Discretion (OPEN -- Claude decides during planning)
|
|
44
|
+
|
|
45
|
+
These areas were identified as gray areas but the user chose to let Claude decide.
|
|
46
|
+
The planner has freedom here but should document their choices.
|
|
47
|
+
|
|
48
|
+
- **{Area}** -- {What Claude can choose, any constraints mentioned}
|
|
49
|
+
- **{Area}** -- {What Claude can choose, any constraints mentioned}
|
|
50
|
+
|
|
51
|
+
## User's Vision Summary
|
|
52
|
+
|
|
53
|
+
{2-3 sentences capturing how the user imagines this phase. This should reflect
|
|
54
|
+
the user's mental model, not a technical specification. Write in the user's voice
|
|
55
|
+
where possible, quoting key phrases they used.}
|
|
56
|
+
|
|
57
|
+
## User's Concerns
|
|
58
|
+
|
|
59
|
+
Things the user raised during discussion that should inform planning:
|
|
60
|
+
|
|
61
|
+
- **{Concern}** -- {Context from the conversation}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- Source: discuss/SKILL.md | Purpose: Reference table of gray area categories for phase discussions -->
|
|
2
|
+
|
|
3
|
+
| Category | Example Gray Areas |
|
|
4
|
+
|----------|-------------------|
|
|
5
|
+
| **UI/UX choices** | Layout approach, component library, responsive strategy, accessibility level |
|
|
6
|
+
| **Architecture decisions** | State management approach, API design style, database schema trade-offs |
|
|
7
|
+
| **Edge case behavior** | What happens on failure, empty states, concurrent access, rate limiting |
|
|
8
|
+
| **Technology selections** | Which library for X, build tool choice, testing framework preference |
|
|
9
|
+
| **Feature scope boundaries** | MVP vs full feature, what to include vs defer, depth of implementation |
|