@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.
- package/CHANGELOG.md +56 -56
- package/CLAUDE.md +149 -149
- package/LICENSE +21 -21
- package/README.md +247 -247
- package/dashboard/bin/cli.js +25 -25
- package/dashboard/package.json +34 -34
- package/dashboard/public/css/layout.css +406 -406
- package/dashboard/public/css/status-colors.css +98 -98
- package/dashboard/public/js/htmx-title.js +5 -5
- package/dashboard/public/js/sidebar-toggle.js +20 -20
- package/dashboard/src/app.js +78 -78
- package/dashboard/src/middleware/errorHandler.js +52 -52
- package/dashboard/src/middleware/notFoundHandler.js +9 -9
- package/dashboard/src/repositories/planning.repository.js +128 -128
- package/dashboard/src/routes/events.routes.js +40 -40
- package/dashboard/src/routes/index.routes.js +31 -31
- package/dashboard/src/routes/pages.routes.js +245 -195
- package/dashboard/src/server.js +42 -42
- package/dashboard/src/services/dashboard.service.js +222 -222
- package/dashboard/src/services/phase.service.js +220 -167
- package/dashboard/src/services/project.service.js +57 -57
- package/dashboard/src/services/roadmap.service.js +171 -171
- package/dashboard/src/services/sse.service.js +58 -58
- package/dashboard/src/services/todo.service.js +254 -254
- package/dashboard/src/services/watcher.service.js +48 -48
- package/dashboard/src/views/coming-soon.ejs +11 -11
- package/dashboard/src/views/error.ejs +13 -13
- package/dashboard/src/views/index.ejs +5 -5
- package/dashboard/src/views/layout.ejs +1 -1
- package/dashboard/src/views/partials/dashboard-content.ejs +77 -77
- package/dashboard/src/views/partials/footer.ejs +3 -3
- package/dashboard/src/views/partials/head.ejs +21 -21
- package/dashboard/src/views/partials/header.ejs +12 -12
- package/dashboard/src/views/partials/layout-bottom.ejs +15 -15
- package/dashboard/src/views/partials/layout-top.ejs +8 -8
- package/dashboard/src/views/partials/phase-content.ejs +188 -181
- package/dashboard/src/views/partials/phase-doc-content.ejs +38 -0
- package/dashboard/src/views/partials/phases-content.ejs +117 -117
- package/dashboard/src/views/partials/roadmap-content.ejs +142 -142
- package/dashboard/src/views/partials/sidebar.ejs +38 -38
- package/dashboard/src/views/partials/todo-create-content.ejs +53 -53
- package/dashboard/src/views/partials/todo-detail-content.ejs +38 -38
- package/dashboard/src/views/partials/todos-content.ejs +53 -53
- package/dashboard/src/views/phase-detail.ejs +5 -5
- package/dashboard/src/views/phase-doc.ejs +5 -0
- package/dashboard/src/views/phases.ejs +5 -5
- package/dashboard/src/views/roadmap.ejs +5 -5
- package/dashboard/src/views/todo-create.ejs +5 -5
- package/dashboard/src/views/todo-detail.ejs +5 -5
- package/dashboard/src/views/todos.ejs +5 -5
- package/package.json +57 -57
- package/plugins/pbr/.claude-plugin/plugin.json +13 -13
- package/plugins/pbr/UI-CONSISTENCY-GAPS.md +61 -61
- package/plugins/pbr/agents/codebase-mapper.md +279 -271
- package/plugins/pbr/agents/debugger.md +281 -281
- package/plugins/pbr/agents/executor.md +428 -407
- package/plugins/pbr/agents/general.md +164 -164
- package/plugins/pbr/agents/integration-checker.md +169 -141
- package/plugins/pbr/agents/plan-checker.md +296 -280
- package/plugins/pbr/agents/planner.md +358 -358
- package/plugins/pbr/agents/researcher.md +363 -363
- package/plugins/pbr/agents/synthesizer.md +230 -230
- package/plugins/pbr/agents/verifier.md +489 -454
- package/plugins/pbr/commands/begin.md +5 -5
- package/plugins/pbr/commands/build.md +5 -5
- package/plugins/pbr/commands/config.md +5 -5
- package/plugins/pbr/commands/continue.md +5 -5
- package/plugins/pbr/commands/debug.md +5 -5
- package/plugins/pbr/commands/discuss.md +5 -5
- package/plugins/pbr/commands/explore.md +5 -5
- package/plugins/pbr/commands/health.md +5 -5
- package/plugins/pbr/commands/help.md +5 -5
- package/plugins/pbr/commands/import.md +5 -5
- package/plugins/pbr/commands/milestone.md +5 -5
- package/plugins/pbr/commands/note.md +5 -5
- package/plugins/pbr/commands/pause.md +5 -5
- package/plugins/pbr/commands/plan.md +5 -5
- package/plugins/pbr/commands/quick.md +5 -5
- package/plugins/pbr/commands/resume.md +5 -5
- package/plugins/pbr/commands/review.md +5 -5
- package/plugins/pbr/commands/scan.md +5 -5
- package/plugins/pbr/commands/setup.md +5 -5
- package/plugins/pbr/commands/status.md +5 -5
- package/plugins/pbr/commands/todo.md +5 -5
- package/plugins/pbr/contexts/dev.md +27 -27
- package/plugins/pbr/contexts/research.md +28 -28
- package/plugins/pbr/contexts/review.md +36 -36
- package/plugins/pbr/hooks/hooks.json +183 -183
- package/plugins/pbr/references/agent-anti-patterns.md +24 -24
- package/plugins/pbr/references/agent-interactions.md +134 -134
- package/plugins/pbr/references/agent-teams.md +54 -54
- package/plugins/pbr/references/checkpoints.md +157 -157
- package/plugins/pbr/references/common-bug-patterns.md +13 -13
- package/plugins/pbr/references/config-reference.md +441 -0
- package/plugins/pbr/references/continuation-format.md +212 -212
- package/plugins/pbr/references/deviation-rules.md +112 -112
- package/plugins/pbr/references/git-integration.md +226 -226
- package/plugins/pbr/references/integration-patterns.md +117 -117
- package/plugins/pbr/references/model-profiles.md +99 -99
- package/plugins/pbr/references/model-selection.md +31 -31
- package/plugins/pbr/references/pbr-rules.md +193 -193
- package/plugins/pbr/references/plan-authoring.md +181 -181
- package/plugins/pbr/references/plan-format.md +287 -283
- package/plugins/pbr/references/planning-config.md +213 -213
- package/plugins/pbr/references/questioning.md +214 -214
- package/plugins/pbr/references/reading-verification.md +127 -127
- package/plugins/pbr/references/stub-patterns.md +160 -160
- package/plugins/pbr/references/subagent-coordination.md +119 -119
- package/plugins/pbr/references/ui-formatting.md +461 -399
- package/plugins/pbr/references/verification-patterns.md +198 -198
- package/plugins/pbr/references/wave-execution.md +95 -95
- package/plugins/pbr/scripts/auto-continue.js +80 -80
- package/plugins/pbr/scripts/check-dangerous-commands.js +136 -136
- package/plugins/pbr/scripts/check-doc-sprawl.js +102 -102
- package/plugins/pbr/scripts/check-phase-boundary.js +196 -196
- package/plugins/pbr/scripts/check-plan-format.js +270 -270
- package/plugins/pbr/scripts/check-roadmap-sync.js +322 -252
- package/plugins/pbr/scripts/check-skill-workflow.js +262 -262
- package/plugins/pbr/scripts/check-state-sync.js +476 -476
- package/plugins/pbr/scripts/check-subagent-output.js +144 -144
- package/plugins/pbr/scripts/config-schema.json +251 -251
- package/plugins/pbr/scripts/context-budget-check.js +287 -287
- package/plugins/pbr/scripts/event-handler.js +151 -151
- package/plugins/pbr/scripts/event-logger.js +92 -92
- package/plugins/pbr/scripts/hook-logger.js +80 -76
- package/plugins/pbr/scripts/hooks-schema.json +79 -79
- package/plugins/pbr/scripts/log-subagent.js +164 -152
- package/plugins/pbr/scripts/log-tool-failure.js +88 -88
- package/plugins/pbr/scripts/pbr-tools.js +1378 -1301
- package/plugins/pbr/scripts/post-write-dispatch.js +66 -66
- package/plugins/pbr/scripts/post-write-quality.js +207 -207
- package/plugins/pbr/scripts/pre-bash-dispatch.js +86 -56
- package/plugins/pbr/scripts/pre-write-dispatch.js +97 -62
- package/plugins/pbr/scripts/progress-tracker.js +281 -228
- package/plugins/pbr/scripts/run-hook.js +92 -0
- package/plugins/pbr/scripts/session-cleanup.js +254 -254
- package/plugins/pbr/scripts/status-line.js +288 -285
- package/plugins/pbr/scripts/suggest-compact.js +119 -119
- package/plugins/pbr/scripts/task-completed.js +45 -45
- package/plugins/pbr/scripts/track-context-budget.js +149 -119
- package/plugins/pbr/scripts/validate-commit.js +200 -200
- package/plugins/pbr/scripts/validate-plugin-structure.js +183 -172
- package/plugins/pbr/scripts/validate-task.js +106 -0
- package/plugins/pbr/skills/begin/SKILL.md +594 -545
- package/plugins/pbr/skills/begin/templates/PROJECT.md.tmpl +33 -33
- package/plugins/pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +18 -18
- package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +49 -49
- package/plugins/pbr/skills/begin/templates/config.json.tmpl +64 -63
- package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +19 -19
- package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +30 -30
- package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +16 -16
- package/plugins/pbr/skills/build/SKILL.md +943 -962
- package/plugins/pbr/skills/config/SKILL.md +256 -241
- package/plugins/pbr/skills/continue/SKILL.md +164 -127
- package/plugins/pbr/skills/debug/SKILL.md +515 -489
- package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +16 -16
- package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +27 -27
- package/plugins/pbr/skills/discuss/SKILL.md +347 -338
- package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +61 -61
- package/plugins/pbr/skills/discuss/templates/decision-categories.md +9 -9
- package/plugins/pbr/skills/explore/SKILL.md +378 -362
- package/plugins/pbr/skills/health/SKILL.md +221 -186
- package/plugins/pbr/skills/health/templates/check-pattern.md.tmpl +30 -30
- package/plugins/pbr/skills/health/templates/output-format.md.tmpl +63 -63
- package/plugins/pbr/skills/help/SKILL.md +155 -140
- package/plugins/pbr/skills/import/SKILL.md +504 -490
- package/plugins/pbr/skills/milestone/SKILL.md +704 -673
- package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +48 -48
- package/plugins/pbr/skills/milestone/templates/stats-file.md.tmpl +30 -30
- package/plugins/pbr/skills/note/SKILL.md +231 -212
- package/plugins/pbr/skills/pause/SKILL.md +249 -235
- package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +71 -71
- package/plugins/pbr/skills/plan/SKILL.md +685 -628
- package/plugins/pbr/skills/plan/decimal-phase-calc.md +98 -98
- package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +21 -21
- package/plugins/pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +32 -32
- package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +38 -38
- package/plugins/pbr/skills/plan/templates/researcher-prompt.md.tmpl +19 -19
- package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +23 -23
- package/plugins/pbr/skills/quick/SKILL.md +354 -335
- package/plugins/pbr/skills/resume/SKILL.md +402 -388
- package/plugins/pbr/skills/review/SKILL.md +686 -652
- package/plugins/pbr/skills/review/templates/debugger-prompt.md.tmpl +60 -60
- package/plugins/pbr/skills/review/templates/gap-planner-prompt.md.tmpl +40 -40
- package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +115 -115
- package/plugins/pbr/skills/scan/SKILL.md +304 -269
- package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +201 -201
- package/plugins/pbr/skills/setup/SKILL.md +253 -227
- package/plugins/pbr/skills/shared/commit-planning-docs.md +35 -35
- package/plugins/pbr/skills/shared/config-loading.md +102 -102
- package/plugins/pbr/skills/shared/context-budget.md +40 -40
- package/plugins/pbr/skills/shared/context-loader-task.md +86 -86
- package/plugins/pbr/skills/shared/digest-select.md +79 -79
- package/plugins/pbr/skills/shared/domain-probes.md +125 -125
- package/plugins/pbr/skills/shared/error-reporting.md +79 -79
- package/plugins/pbr/skills/shared/gate-prompts.md +388 -388
- package/plugins/pbr/skills/shared/phase-argument-parsing.md +45 -45
- package/plugins/pbr/skills/shared/progress-display.md +53 -53
- package/plugins/pbr/skills/shared/revision-loop.md +81 -81
- package/plugins/pbr/skills/shared/state-loading.md +62 -62
- package/plugins/pbr/skills/shared/state-update.md +161 -161
- package/plugins/pbr/skills/shared/universal-anti-patterns.md +33 -33
- package/plugins/pbr/skills/status/SKILL.md +367 -353
- package/plugins/pbr/skills/todo/SKILL.md +198 -181
- package/plugins/pbr/templates/CONTEXT.md.tmpl +52 -52
- package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +151 -151
- package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +97 -97
- package/plugins/pbr/templates/ROADMAP.md.tmpl +40 -40
- package/plugins/pbr/templates/SUMMARY.md.tmpl +81 -81
- package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +116 -116
- package/plugins/pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -98
- package/plugins/pbr/templates/codebase/CONCERNS.md.tmpl +93 -93
- package/plugins/pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -104
- package/plugins/pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -78
- package/plugins/pbr/templates/codebase/STACK.md.tmpl +78 -78
- package/plugins/pbr/templates/codebase/STRUCTURE.md.tmpl +80 -80
- package/plugins/pbr/templates/codebase/TESTING.md.tmpl +107 -107
- package/plugins/pbr/templates/continue-here.md.tmpl +73 -73
- package/plugins/pbr/templates/prompt-partials/phase-project-context.md.tmpl +37 -37
- package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +124 -124
- package/plugins/pbr/templates/research/STACK.md.tmpl +71 -71
- package/plugins/pbr/templates/research/SUMMARY.md.tmpl +112 -112
- package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +81 -81
- package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +99 -99
- package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +36 -36
|
@@ -1,283 +1,287 @@
|
|
|
1
|
-
# Plan Format Reference
|
|
2
|
-
|
|
3
|
-
Complete reference for the XML task specification used in Plan-Build-Run plan files.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Plan File Structure
|
|
8
|
-
|
|
9
|
-
Every plan file has two sections:
|
|
10
|
-
1. **YAML Frontmatter** — metadata about the plan
|
|
11
|
-
2. **XML Tasks** — the executable task specifications
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## YAML Frontmatter
|
|
16
|
-
|
|
17
|
-
```yaml
|
|
18
|
-
---
|
|
19
|
-
phase: "02-authentication"
|
|
20
|
-
plan: "02-01"
|
|
21
|
-
type: "feature"
|
|
22
|
-
wave: 1
|
|
23
|
-
depends_on: []
|
|
24
|
-
files_modified:
|
|
25
|
-
- "src/auth/discord.ts"
|
|
26
|
-
- "src/middleware/auth.ts"
|
|
27
|
-
autonomous: true
|
|
28
|
-
discovery: 1
|
|
29
|
-
gap_closure: false
|
|
30
|
-
must_haves:
|
|
31
|
-
truths:
|
|
32
|
-
- "User can authenticate via Discord OAuth"
|
|
33
|
-
- "JWT token is set in httpOnly cookie"
|
|
34
|
-
artifacts:
|
|
35
|
-
- "src/auth/discord.ts: >50 lines"
|
|
36
|
-
- "src/middleware/auth.ts: >30 lines"
|
|
37
|
-
key_links:
|
|
38
|
-
- "Auth middleware applied to protected routes"
|
|
39
|
-
- "Login button calls authenticateWithDiscord()"
|
|
40
|
-
provides:
|
|
41
|
-
- "AuthService class"
|
|
42
|
-
- "POST /api/auth/login endpoint"
|
|
43
|
-
- "requireAuth() middleware"
|
|
44
|
-
consumes:
|
|
45
|
-
- "Database connection (from plan 01-01)"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
|
55
|
-
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
63
|
-
| `
|
|
64
|
-
| `
|
|
65
|
-
| `must_haves
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
68
|
-
| `
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
**
|
|
93
|
-
|
|
94
|
-
**
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
</
|
|
112
|
-
<
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
</
|
|
152
|
-
<
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
<
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
</
|
|
213
|
-
<
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
<
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
</
|
|
238
|
-
<
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
|
264
|
-
|
|
265
|
-
| `<
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
-
|
|
282
|
-
|
|
283
|
-
|
|
1
|
+
# Plan Format Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for the XML task specification used in Plan-Build-Run plan files.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Plan File Structure
|
|
8
|
+
|
|
9
|
+
Every plan file has two sections:
|
|
10
|
+
1. **YAML Frontmatter** — metadata about the plan
|
|
11
|
+
2. **XML Tasks** — the executable task specifications
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## YAML Frontmatter
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
---
|
|
19
|
+
phase: "02-authentication"
|
|
20
|
+
plan: "02-01"
|
|
21
|
+
type: "feature"
|
|
22
|
+
wave: 1
|
|
23
|
+
depends_on: []
|
|
24
|
+
files_modified:
|
|
25
|
+
- "src/auth/discord.ts"
|
|
26
|
+
- "src/middleware/auth.ts"
|
|
27
|
+
autonomous: true
|
|
28
|
+
discovery: 1
|
|
29
|
+
gap_closure: false
|
|
30
|
+
must_haves:
|
|
31
|
+
truths:
|
|
32
|
+
- "User can authenticate via Discord OAuth"
|
|
33
|
+
- "JWT token is set in httpOnly cookie"
|
|
34
|
+
artifacts:
|
|
35
|
+
- "src/auth/discord.ts: >50 lines"
|
|
36
|
+
- "src/middleware/auth.ts: >30 lines"
|
|
37
|
+
key_links:
|
|
38
|
+
- "Auth middleware applied to protected routes"
|
|
39
|
+
- "Login button calls authenticateWithDiscord()"
|
|
40
|
+
provides:
|
|
41
|
+
- "AuthService class"
|
|
42
|
+
- "POST /api/auth/login endpoint"
|
|
43
|
+
- "requireAuth() middleware"
|
|
44
|
+
consumes:
|
|
45
|
+
- "Database connection (from plan 01-01)"
|
|
46
|
+
requirement_ids:
|
|
47
|
+
- "P02-G1"
|
|
48
|
+
- "P02-G2"
|
|
49
|
+
---
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Frontmatter Fields
|
|
53
|
+
|
|
54
|
+
| Field | Required | Type | Description |
|
|
55
|
+
|-------|----------|------|-------------|
|
|
56
|
+
| `phase` | YES | string | Phase directory name (e.g., "02-authentication") |
|
|
57
|
+
| `plan` | YES | string | Plan ID: `{phase_num}-{plan_num}` (e.g., "02-01") |
|
|
58
|
+
| `type` | YES | enum | `feature`, `bugfix`, `refactor`, `infrastructure`, `docs` |
|
|
59
|
+
| `wave` | YES | int | Execution wave (1 = independent, 2+ = has deps) |
|
|
60
|
+
| `depends_on` | YES | array | Plan IDs that must complete first. `[]` if Wave 1. |
|
|
61
|
+
| `files_modified` | YES | array | All files this plan creates or modifies |
|
|
62
|
+
| `autonomous` | YES | bool | `true` if no human checkpoints |
|
|
63
|
+
| `discovery` | NO | int | Research level: 0=skip, 1=quick, 2=standard, 3=deep. Default: 1 |
|
|
64
|
+
| `gap_closure` | NO | bool | `true` if this is a gap-closure plan. Default: false |
|
|
65
|
+
| `must_haves` | YES | object | Goal-backward derivation |
|
|
66
|
+
| `must_haves.truths` | YES | array | Observable truths that must be true when done |
|
|
67
|
+
| `must_haves.artifacts` | YES | array | Files/modules that must exist. Append `: >N lines` for size hints. |
|
|
68
|
+
| `must_haves.key_links` | YES | array | Connections between components. Append `: grep command` for verification. |
|
|
69
|
+
| `provides` | NO | array | What this plan exports for other plans to consume (classes, endpoints, modules) |
|
|
70
|
+
| `consumes` | NO | array | What this plan needs from prior plans. Format: `"Thing (from plan XX-YY)"` |
|
|
71
|
+
| `requirement_ids` | NO | array | Requirement IDs from REQUIREMENTS.md or ROADMAP.md goal IDs that this plan addresses. Enables bidirectional traceability between plans and requirements/goals. |
|
|
72
|
+
| `dependency_fingerprints` | NO | object | Hashes of dependency phase SUMMARY.md files at plan-creation time. Used to detect stale plans. |
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Summary Section
|
|
77
|
+
|
|
78
|
+
Every plan file MUST end with a `## Summary` section after all XML tasks. This section provides a compact overview (~500 tokens) for injection into executor prompts, avoiding the need to inline the full plan (~1,500 tokens).
|
|
79
|
+
|
|
80
|
+
Format:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
## Summary
|
|
84
|
+
|
|
85
|
+
**Plan {plan_id}**: {1-sentence description of what this plan does}
|
|
86
|
+
|
|
87
|
+
**Tasks:**
|
|
88
|
+
1. {task_id}: {task name} -- {files touched}
|
|
89
|
+
2. {task_id}: {task name} -- {files touched}
|
|
90
|
+
3. {task_id}: {task name} -- {files touched}
|
|
91
|
+
|
|
92
|
+
**Key files:** {comma-separated list of all files_modified}
|
|
93
|
+
|
|
94
|
+
**Must-haves:** {comma-separated list of truths from frontmatter}
|
|
95
|
+
|
|
96
|
+
**Provides:** {comma-separated list from provides field}
|
|
97
|
+
|
|
98
|
+
**Consumes:** {comma-separated list from consumes field, or "None"}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The Summary section is generated by the planner agent at plan creation time. It is a denormalized view of plan metadata -- if the plan is revised, the Summary must also be updated.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Task Types
|
|
106
|
+
|
|
107
|
+
### Standard Auto Task
|
|
108
|
+
|
|
109
|
+
```xml
|
|
110
|
+
<task id="02-01-T1" type="auto" complexity="medium">
|
|
111
|
+
<name>Create Discord OAuth client module</name>
|
|
112
|
+
<files>
|
|
113
|
+
src/auth/discord.ts
|
|
114
|
+
src/auth/types.ts
|
|
115
|
+
</files>
|
|
116
|
+
<action>
|
|
117
|
+
1. Create file `src/auth/types.ts`
|
|
118
|
+
- Export interface `DiscordUser` with fields: id, username, avatar, email
|
|
119
|
+
- Export interface `AuthTokens` with fields: accessToken, refreshToken, expiresAt
|
|
120
|
+
|
|
121
|
+
2. Create file `src/auth/discord.ts`
|
|
122
|
+
- Import `OAuth2Client` from `discord-oauth2`
|
|
123
|
+
- Import `DiscordUser`, `AuthTokens` from `./types`
|
|
124
|
+
- Export async function `authenticateWithDiscord(code: string): Promise<DiscordUser>`
|
|
125
|
+
- Create OAuth2Client with DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET from env
|
|
126
|
+
- Exchange authorization code for access token
|
|
127
|
+
- Fetch user profile: GET /api/users/@me
|
|
128
|
+
- Return DiscordUser object
|
|
129
|
+
- Export function `getDiscordAuthUrl(): string`
|
|
130
|
+
- Build OAuth2 URL with scopes: identify, email
|
|
131
|
+
- Include DISCORD_REDIRECT_URI from env
|
|
132
|
+
|
|
133
|
+
3. Add to `.env.example`:
|
|
134
|
+
DISCORD_CLIENT_ID=
|
|
135
|
+
DISCORD_CLIENT_SECRET=
|
|
136
|
+
DISCORD_REDIRECT_URI=http://localhost:3000/auth/callback
|
|
137
|
+
</action>
|
|
138
|
+
<verify>
|
|
139
|
+
npx tsc --noEmit
|
|
140
|
+
ls src/auth/discord.ts
|
|
141
|
+
ls src/auth/types.ts
|
|
142
|
+
</verify>
|
|
143
|
+
<done>Discord OAuth client module exists and compiles without errors</done>
|
|
144
|
+
</task>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### TDD Task
|
|
148
|
+
|
|
149
|
+
```xml
|
|
150
|
+
<task id="02-01-T2" type="auto" tdd="true" complexity="medium">
|
|
151
|
+
<name>Implement auth middleware with TDD</name>
|
|
152
|
+
<files>
|
|
153
|
+
src/middleware/auth.ts
|
|
154
|
+
tests/middleware/auth.test.ts
|
|
155
|
+
</files>
|
|
156
|
+
<action>
|
|
157
|
+
RED:
|
|
158
|
+
1. Create `tests/middleware/auth.test.ts`
|
|
159
|
+
- Test: "rejects request without token" — expect 401
|
|
160
|
+
- Test: "rejects request with invalid token" — expect 401
|
|
161
|
+
- Test: "passes request with valid token" — expect next() called
|
|
162
|
+
|
|
163
|
+
GREEN:
|
|
164
|
+
2. Create `src/middleware/auth.ts`
|
|
165
|
+
- Export function `requireAuth(req, res, next)`
|
|
166
|
+
- Extract JWT from httpOnly cookie
|
|
167
|
+
- Verify token with jsonwebtoken
|
|
168
|
+
- If valid: attach user to req, call next()
|
|
169
|
+
- If invalid: respond 401
|
|
170
|
+
|
|
171
|
+
REFACTOR:
|
|
172
|
+
3. Extract token verification into `verifyToken()` helper
|
|
173
|
+
</action>
|
|
174
|
+
<verify>
|
|
175
|
+
npm test -- --grep "auth middleware"
|
|
176
|
+
</verify>
|
|
177
|
+
<done>Auth middleware rejects invalid tokens and passes valid tokens</done>
|
|
178
|
+
</task>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Checkpoint: Human Verify
|
|
182
|
+
|
|
183
|
+
```xml
|
|
184
|
+
<task id="03-02-T3" type="checkpoint:human-verify">
|
|
185
|
+
<name>Verify OAuth callback flow</name>
|
|
186
|
+
<files>
|
|
187
|
+
src/pages/auth/callback.ts
|
|
188
|
+
</files>
|
|
189
|
+
<action>
|
|
190
|
+
1. Create the OAuth callback page at `src/pages/auth/callback.ts`
|
|
191
|
+
2. Wire it to call `authenticateWithDiscord()` with the authorization code
|
|
192
|
+
3. On success: set JWT cookie and redirect to dashboard
|
|
193
|
+
4. On failure: redirect to login with error message
|
|
194
|
+
</action>
|
|
195
|
+
<verify>
|
|
196
|
+
what-built: OAuth callback page that exchanges Discord auth code for JWT
|
|
197
|
+
how-to-verify: |
|
|
198
|
+
1. Click "Login with Discord" button
|
|
199
|
+
2. Authorize the application in Discord
|
|
200
|
+
3. Verify you are redirected to the dashboard
|
|
201
|
+
4. Check browser cookies for JWT token
|
|
202
|
+
resume-signal: "User confirms OAuth flow works end-to-end"
|
|
203
|
+
</verify>
|
|
204
|
+
<done>User can complete full Discord OAuth login flow</done>
|
|
205
|
+
</task>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Checkpoint: Decision
|
|
209
|
+
|
|
210
|
+
```xml
|
|
211
|
+
<task id="04-01-T1" type="checkpoint:decision">
|
|
212
|
+
<name>Choose database migration strategy</name>
|
|
213
|
+
<files></files>
|
|
214
|
+
<action>
|
|
215
|
+
Present the user with the migration strategy options after research.
|
|
216
|
+
</action>
|
|
217
|
+
<verify>
|
|
218
|
+
decision: "Which migration strategy to use for production database?"
|
|
219
|
+
context: "We need to decide how to handle schema changes in production."
|
|
220
|
+
options: |
|
|
221
|
+
A) Prisma Migrate — automatic migrations, good for development, requires care in production
|
|
222
|
+
B) Manual SQL — full control, more work, explicit about what changes
|
|
223
|
+
C) TypeORM migrations — auto-generated from entities, reversible
|
|
224
|
+
resume-signal: "User selects option A, B, or C"
|
|
225
|
+
</verify>
|
|
226
|
+
<done>Database migration strategy decided and documented in CONTEXT.md</done>
|
|
227
|
+
</task>
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Checkpoint: Human Action
|
|
231
|
+
|
|
232
|
+
```xml
|
|
233
|
+
<task id="05-03-T2" type="checkpoint:human-action">
|
|
234
|
+
<name>Configure production environment</name>
|
|
235
|
+
<files>
|
|
236
|
+
.env.production
|
|
237
|
+
</files>
|
|
238
|
+
<action>
|
|
239
|
+
1. Create `.env.production.example` with all required variables listed
|
|
240
|
+
2. Document each variable's purpose in comments
|
|
241
|
+
</action>
|
|
242
|
+
<verify>
|
|
243
|
+
what-needed: "Production environment variables must be set"
|
|
244
|
+
how-to-do: |
|
|
245
|
+
1. Copy `.env.production.example` to `.env.production`
|
|
246
|
+
2. Fill in production values for:
|
|
247
|
+
- DATABASE_URL (production database connection string)
|
|
248
|
+
- DISCORD_CLIENT_ID (production Discord app)
|
|
249
|
+
- DISCORD_CLIENT_SECRET (production Discord app)
|
|
250
|
+
- JWT_SECRET (generate with: openssl rand -base64 32)
|
|
251
|
+
resume-signal: "User confirms .env.production is configured"
|
|
252
|
+
</verify>
|
|
253
|
+
<done>Production environment is configured with real credentials</done>
|
|
254
|
+
</task>
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## The 5 Mandatory Elements
|
|
260
|
+
|
|
261
|
+
Every task MUST have ALL 5. No exceptions.
|
|
262
|
+
|
|
263
|
+
| Element | Purpose | Rules |
|
|
264
|
+
|---------|---------|-------|
|
|
265
|
+
| `<name>` | What the task does | Imperative verb phrase. Short. |
|
|
266
|
+
| `<files>` | Files touched | One per line. Actual file paths. |
|
|
267
|
+
| `<action>` | How to do it | Numbered steps. Specific. Code snippets for complex work. |
|
|
268
|
+
| `<verify>` | How to check | Executable shell commands. Or checkpoint format. |
|
|
269
|
+
| `<done>` | How to know it worked | Observable user/system behavior. Maps to a must-have. |
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Task ID Format
|
|
274
|
+
|
|
275
|
+
```
|
|
276
|
+
{plan_id}-T{sequential_number}
|
|
277
|
+
|
|
278
|
+
Examples:
|
|
279
|
+
02-01-T1 — Phase 02, Plan 01, Task 1
|
|
280
|
+
02-01-T2 — Phase 02, Plan 01, Task 2
|
|
281
|
+
03-02-T1 — Phase 03, Plan 02, Task 1
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Task IDs are unique within a phase. They are used for:
|
|
285
|
+
- Commit message references
|
|
286
|
+
- Checkpoint continuation references
|
|
287
|
+
- SUMMARY.md task result tracking
|