@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,198 +1,198 @@
1
- # Goal-Backward Verification Patterns
2
-
3
- Reference patterns for deriving verification criteria from goals. Used by the planner to create `<verify>` and `<done>` elements, and by the verifier to check phase completion.
4
-
5
- ---
6
-
7
- ## The Three-Layer Check
8
-
9
- Every must-have is verified through three layers, checked in order:
10
-
11
- ### Layer 1: Existence
12
-
13
- Does the artifact exist?
14
-
15
- ```bash
16
- # File existence
17
- ls -la src/auth/discord.ts
18
-
19
- # Module export existence
20
- grep -q "export.*authenticateWithDiscord" src/auth/discord.ts
21
-
22
- # Database table existence
23
- npx prisma db execute --stdin <<< "SELECT 1 FROM users LIMIT 1"
24
-
25
- # Route existence
26
- curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/api/auth/login
27
- ```
28
-
29
- ### Layer 2: Substantiveness
30
-
31
- Is the artifact more than a stub?
32
-
33
- ```bash
34
- # File has real content (not just exports)
35
- wc -l src/auth/discord.ts # Should be > 10 lines for a real implementation
36
-
37
- # Function has a body (not just a signature)
38
- grep -A5 "authenticateWithDiscord" src/auth/discord.ts | grep -q "return"
39
-
40
- # Test file has actual test cases
41
- grep -c "it(" tests/auth.test.ts # Should be > 0
42
-
43
- # API returns real data (not just 200 OK)
44
- curl -s http://localhost:3000/api/health | jq '.status' | grep -q "ok"
45
- ```
46
-
47
- ### Layer 3: Wiring
48
-
49
- Are components connected to each other?
50
-
51
- ```bash
52
- # Module is imported where needed
53
- grep -q "from.*auth/discord" src/routes/auth.ts
54
-
55
- # Middleware is applied to routes
56
- grep -q "requireAuth" src/routes/protected.ts
57
-
58
- # Database is configured in app init
59
- grep -q "prisma" src/app.ts
60
-
61
- # Environment variables are referenced
62
- grep -q "DISCORD_CLIENT_ID" src/auth/discord.ts
63
- ```
64
-
65
- ---
66
-
67
- ## Verification by Feature Type
68
-
69
- ### API Endpoint
70
-
71
- ```
72
- Existence: curl returns non-404 status
73
- Substance: curl returns expected response shape (correct fields)
74
- Wiring: endpoint calls the right service, middleware is applied
75
- ```
76
-
77
- ### Database Schema
78
-
79
- ```
80
- Existence: table/collection exists, can query without error
81
- Substance: columns/fields match specification, constraints are applied
82
- Wiring: application code references the schema, migrations run cleanly
83
- ```
84
-
85
- ### Authentication
86
-
87
- ```
88
- Existence: auth routes exist, auth module exports functions
89
- Substance: login flow returns token, invalid creds return error
90
- Wiring: protected routes use auth middleware, tokens are validated
91
- ```
92
-
93
- ### UI Component
94
-
95
- ```
96
- Existence: component file exists, exports default component
97
- Substance: component renders expected elements (test or visual check)
98
- Wiring: component is imported in parent, receives correct props, routes to it
99
- ```
100
-
101
- ### Configuration
102
-
103
- ```
104
- Existence: config file exists, environment variables documented
105
- Substance: config values are used (not dead code), defaults are sensible
106
- Wiring: application reads config at startup, config changes take effect
107
- ```
108
-
109
- ---
110
-
111
- ## Verify Command Patterns
112
-
113
- ### TypeScript/JavaScript
114
-
115
- ```bash
116
- # Type checking
117
- npx tsc --noEmit
118
-
119
- # Unit tests
120
- npm test
121
- npm test -- --grep "pattern"
122
- npx jest path/to/test
123
-
124
- # Linting
125
- npx eslint src/auth/
126
-
127
- # Build check
128
- npm run build
129
- ```
130
-
131
- ### Python
132
-
133
- ```bash
134
- # Type checking
135
- mypy src/
136
-
137
- # Unit tests
138
- pytest tests/
139
- pytest tests/test_auth.py -v
140
- pytest -k "test_login"
141
-
142
- # Linting
143
- flake8 src/
144
- pylint src/auth/
145
- ```
146
-
147
- ### General
148
-
149
- ```bash
150
- # File existence
151
- ls -la path/to/file
152
-
153
- # Content check
154
- grep -q "pattern" path/to/file
155
-
156
- # HTTP endpoint
157
- curl -s -o /dev/null -w "%{http_code}" http://localhost:PORT/path
158
-
159
- # Process running
160
- pgrep -f "process-name"
161
-
162
- # Port listening
163
- netstat -an | grep LISTEN | grep PORT
164
- ```
165
-
166
- ---
167
-
168
- ## Done Condition Patterns
169
-
170
- ### Good Done Conditions (Observable, Falsifiable)
171
-
172
- - "User can log in with Discord and see their dashboard"
173
- - "API returns paginated list of items with correct total count"
174
- - "Database migration creates users table with all required columns"
175
- - "Protected routes return 401 without valid JWT"
176
- - "Build completes without TypeScript errors"
177
-
178
- ### Bad Done Conditions (Vague, Not Falsifiable)
179
-
180
- - "Authentication is implemented" (how do you test this?)
181
- - "Code is clean" (subjective)
182
- - "Database is set up" (what does "set up" mean?)
183
- - "Tests pass" (which tests? what do they test?)
184
- - "File was created" (created with what content?)
185
-
186
- ### Transformation Rule
187
-
188
- ```
189
- Bad: "Authentication is implemented"
190
- Good: "User can complete Discord OAuth flow and receive a valid JWT"
191
-
192
- Bad: "Database is set up"
193
- Good: "Users table exists with id, email, name columns and can accept INSERT"
194
-
195
- Bad: "Tests pass"
196
- Good: "All 5 auth middleware tests pass: valid token, expired token,
197
- missing token, malformed token, and correct user extraction"
198
- ```
1
+ # Goal-Backward Verification Patterns
2
+
3
+ Reference patterns for deriving verification criteria from goals. Used by the planner to create `<verify>` and `<done>` elements, and by the verifier to check phase completion.
4
+
5
+ ---
6
+
7
+ ## The Three-Layer Check
8
+
9
+ Every must-have is verified through three layers, checked in order:
10
+
11
+ ### Layer 1: Existence
12
+
13
+ Does the artifact exist?
14
+
15
+ ```bash
16
+ # File existence
17
+ ls -la src/auth/discord.ts
18
+
19
+ # Module export existence
20
+ grep -q "export.*authenticateWithDiscord" src/auth/discord.ts
21
+
22
+ # Database table existence
23
+ npx prisma db execute --stdin <<< "SELECT 1 FROM users LIMIT 1"
24
+
25
+ # Route existence
26
+ curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/api/auth/login
27
+ ```
28
+
29
+ ### Layer 2: Substantiveness
30
+
31
+ Is the artifact more than a stub?
32
+
33
+ ```bash
34
+ # File has real content (not just exports)
35
+ wc -l src/auth/discord.ts # Should be > 10 lines for a real implementation
36
+
37
+ # Function has a body (not just a signature)
38
+ grep -A5 "authenticateWithDiscord" src/auth/discord.ts | grep -q "return"
39
+
40
+ # Test file has actual test cases
41
+ grep -c "it(" tests/auth.test.ts # Should be > 0
42
+
43
+ # API returns real data (not just 200 OK)
44
+ curl -s http://localhost:3000/api/health | jq '.status' | grep -q "ok"
45
+ ```
46
+
47
+ ### Layer 3: Wiring
48
+
49
+ Are components connected to each other?
50
+
51
+ ```bash
52
+ # Module is imported where needed
53
+ grep -q "from.*auth/discord" src/routes/auth.ts
54
+
55
+ # Middleware is applied to routes
56
+ grep -q "requireAuth" src/routes/protected.ts
57
+
58
+ # Database is configured in app init
59
+ grep -q "prisma" src/app.ts
60
+
61
+ # Environment variables are referenced
62
+ grep -q "DISCORD_CLIENT_ID" src/auth/discord.ts
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Verification by Feature Type
68
+
69
+ ### API Endpoint
70
+
71
+ ```
72
+ Existence: curl returns non-404 status
73
+ Substance: curl returns expected response shape (correct fields)
74
+ Wiring: endpoint calls the right service, middleware is applied
75
+ ```
76
+
77
+ ### Database Schema
78
+
79
+ ```
80
+ Existence: table/collection exists, can query without error
81
+ Substance: columns/fields match specification, constraints are applied
82
+ Wiring: application code references the schema, migrations run cleanly
83
+ ```
84
+
85
+ ### Authentication
86
+
87
+ ```
88
+ Existence: auth routes exist, auth module exports functions
89
+ Substance: login flow returns token, invalid creds return error
90
+ Wiring: protected routes use auth middleware, tokens are validated
91
+ ```
92
+
93
+ ### UI Component
94
+
95
+ ```
96
+ Existence: component file exists, exports default component
97
+ Substance: component renders expected elements (test or visual check)
98
+ Wiring: component is imported in parent, receives correct props, routes to it
99
+ ```
100
+
101
+ ### Configuration
102
+
103
+ ```
104
+ Existence: config file exists, environment variables documented
105
+ Substance: config values are used (not dead code), defaults are sensible
106
+ Wiring: application reads config at startup, config changes take effect
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Verify Command Patterns
112
+
113
+ ### TypeScript/JavaScript
114
+
115
+ ```bash
116
+ # Type checking
117
+ npx tsc --noEmit
118
+
119
+ # Unit tests
120
+ npm test
121
+ npm test -- --grep "pattern"
122
+ npx jest path/to/test
123
+
124
+ # Linting
125
+ npx eslint src/auth/
126
+
127
+ # Build check
128
+ npm run build
129
+ ```
130
+
131
+ ### Python
132
+
133
+ ```bash
134
+ # Type checking
135
+ mypy src/
136
+
137
+ # Unit tests
138
+ pytest tests/
139
+ pytest tests/test_auth.py -v
140
+ pytest -k "test_login"
141
+
142
+ # Linting
143
+ flake8 src/
144
+ pylint src/auth/
145
+ ```
146
+
147
+ ### General
148
+
149
+ ```bash
150
+ # File existence
151
+ ls -la path/to/file
152
+
153
+ # Content check
154
+ grep -q "pattern" path/to/file
155
+
156
+ # HTTP endpoint
157
+ curl -s -o /dev/null -w "%{http_code}" http://localhost:PORT/path
158
+
159
+ # Process running
160
+ pgrep -f "process-name"
161
+
162
+ # Port listening
163
+ netstat -an | grep LISTEN | grep PORT
164
+ ```
165
+
166
+ ---
167
+
168
+ ## Done Condition Patterns
169
+
170
+ ### Good Done Conditions (Observable, Falsifiable)
171
+
172
+ - "User can log in with Discord and see their dashboard"
173
+ - "API returns paginated list of items with correct total count"
174
+ - "Database migration creates users table with all required columns"
175
+ - "Protected routes return 401 without valid JWT"
176
+ - "Build completes without TypeScript errors"
177
+
178
+ ### Bad Done Conditions (Vague, Not Falsifiable)
179
+
180
+ - "Authentication is implemented" (how do you test this?)
181
+ - "Code is clean" (subjective)
182
+ - "Database is set up" (what does "set up" mean?)
183
+ - "Tests pass" (which tests? what do they test?)
184
+ - "File was created" (created with what content?)
185
+
186
+ ### Transformation Rule
187
+
188
+ ```
189
+ Bad: "Authentication is implemented"
190
+ Good: "User can complete Discord OAuth flow and receive a valid JWT"
191
+
192
+ Bad: "Database is set up"
193
+ Good: "Users table exists with id, email, name columns and can accept INSERT"
194
+
195
+ Bad: "Tests pass"
196
+ Good: "All 5 auth middleware tests pass: valid token, expired token,
197
+ missing token, malformed token, and correct user extraction"
198
+ ```
@@ -1,95 +1,95 @@
1
- # Wave-Based Execution
2
-
3
- How Plan-Build-Run parallelizes plan execution within a phase while respecting dependencies.
4
-
5
- ---
6
-
7
- ## What Are Waves?
8
-
9
- Waves are dependency-based groupings of plans within a phase. Plans in the same wave have no dependencies on each other and can execute in parallel. Plans in later waves depend on earlier waves completing first.
10
-
11
- ```
12
- Wave 1: [plan-01, plan-02] (no dependencies, can run in parallel)
13
- Wave 2: [plan-03] (depends on wave 1 plans)
14
- Wave 3: [plan-04, plan-05] (depends on wave 2)
15
- ```
16
-
17
- ## How Wave Numbers Are Assigned
18
-
19
- Wave numbers come from the `depends_on` field in each plan's YAML frontmatter:
20
-
21
- ```yaml
22
- ---
23
- plan: "03-01"
24
- wave: 1
25
- depends_on: [] # No dependencies → Wave 1
26
- ---
27
- ```
28
-
29
- ```yaml
30
- ---
31
- plan: "03-03"
32
- wave: 2
33
- depends_on: [03-01] # Depends on Wave 1 plan → Wave 2
34
- ---
35
- ```
36
-
37
- **Rules**:
38
- - Wave 1 plans must have `depends_on: []`
39
- - Wave 2+ plans must depend only on plans from earlier waves
40
- - No plan depends on a plan in the same wave (that would require sequential execution within the wave)
41
-
42
- ## Execution Order
43
-
44
- 1. All Wave 1 plans execute (in parallel if enabled)
45
- 2. Wait for all Wave 1 plans to complete
46
- 3. All Wave 2 plans execute (in parallel if enabled)
47
- 4. Repeat until all waves complete
48
-
49
- ## Parallelization Config
50
-
51
- Controlled by `config.json`:
52
-
53
- ```json
54
- {
55
- "parallelization": {
56
- "enabled": true,
57
- "plan_level": true,
58
- "max_concurrent_agents": 3
59
- }
60
- }
61
- ```
62
-
63
- | Setting | Effect |
64
- |---------|--------|
65
- | `enabled: false` | All plans execute sequentially, regardless of wave |
66
- | `plan_level: true` | Plans within a wave run in parallel |
67
- | `max_concurrent_agents` | Cap on simultaneous executor agents (default: 3) |
68
-
69
- When `enabled: false` or `plan_level: false`, plans execute one at a time within each wave, in plan ID order.
70
-
71
- ## Git Lock Handling
72
-
73
- When multiple executors run in parallel, git lock conflicts can occur. Executors handle this with a retry pattern:
74
-
75
- ```bash
76
- git commit -m "message" || (sleep 2 && git commit -m "message") || (sleep 2 && git commit -m "message")
77
- ```
78
-
79
- Maximum 3 attempts with 2-second delays between retries.
80
-
81
- ## Checkpoint Manifest
82
-
83
- The build skill tracks wave progress in `.checkpoint-manifest.json`:
84
-
85
- ```json
86
- {
87
- "plans": ["03-01", "03-02", "03-03"],
88
- "checkpoints_resolved": ["03-01", "03-02"],
89
- "wave": 2,
90
- "commit_log": [...],
91
- "last_good_commit": "abc1234"
92
- }
93
- ```
94
-
95
- On crash/resume, the manifest tells the build skill which plans are complete and which wave to resume from.
1
+ # Wave-Based Execution
2
+
3
+ How Plan-Build-Run parallelizes plan execution within a phase while respecting dependencies.
4
+
5
+ ---
6
+
7
+ ## What Are Waves?
8
+
9
+ Waves are dependency-based groupings of plans within a phase. Plans in the same wave have no dependencies on each other and can execute in parallel. Plans in later waves depend on earlier waves completing first.
10
+
11
+ ```
12
+ Wave 1: [plan-01, plan-02] (no dependencies, can run in parallel)
13
+ Wave 2: [plan-03] (depends on wave 1 plans)
14
+ Wave 3: [plan-04, plan-05] (depends on wave 2)
15
+ ```
16
+
17
+ ## How Wave Numbers Are Assigned
18
+
19
+ Wave numbers come from the `depends_on` field in each plan's YAML frontmatter:
20
+
21
+ ```yaml
22
+ ---
23
+ plan: "03-01"
24
+ wave: 1
25
+ depends_on: [] # No dependencies → Wave 1
26
+ ---
27
+ ```
28
+
29
+ ```yaml
30
+ ---
31
+ plan: "03-03"
32
+ wave: 2
33
+ depends_on: [03-01] # Depends on Wave 1 plan → Wave 2
34
+ ---
35
+ ```
36
+
37
+ **Rules**:
38
+ - Wave 1 plans must have `depends_on: []`
39
+ - Wave 2+ plans must depend only on plans from earlier waves
40
+ - No plan depends on a plan in the same wave (that would require sequential execution within the wave)
41
+
42
+ ## Execution Order
43
+
44
+ 1. All Wave 1 plans execute (in parallel if enabled)
45
+ 2. Wait for all Wave 1 plans to complete
46
+ 3. All Wave 2 plans execute (in parallel if enabled)
47
+ 4. Repeat until all waves complete
48
+
49
+ ## Parallelization Config
50
+
51
+ Controlled by `config.json`:
52
+
53
+ ```json
54
+ {
55
+ "parallelization": {
56
+ "enabled": true,
57
+ "plan_level": true,
58
+ "max_concurrent_agents": 3
59
+ }
60
+ }
61
+ ```
62
+
63
+ | Setting | Effect |
64
+ |---------|--------|
65
+ | `enabled: false` | All plans execute sequentially, regardless of wave |
66
+ | `plan_level: true` | Plans within a wave run in parallel |
67
+ | `max_concurrent_agents` | Cap on simultaneous executor agents (default: 3) |
68
+
69
+ When `enabled: false` or `plan_level: false`, plans execute one at a time within each wave, in plan ID order.
70
+
71
+ ## Git Lock Handling
72
+
73
+ When multiple executors run in parallel, git lock conflicts can occur. Executors handle this with a retry pattern:
74
+
75
+ ```bash
76
+ git commit -m "message" || (sleep 2 && git commit -m "message") || (sleep 2 && git commit -m "message")
77
+ ```
78
+
79
+ Maximum 3 attempts with 2-second delays between retries.
80
+
81
+ ## Checkpoint Manifest
82
+
83
+ The build skill tracks wave progress in `.checkpoint-manifest.json`:
84
+
85
+ ```json
86
+ {
87
+ "plans": ["03-01", "03-02", "03-03"],
88
+ "checkpoints_resolved": ["03-01", "03-02"],
89
+ "wave": 2,
90
+ "commit_log": [...],
91
+ "last_good_commit": "abc1234"
92
+ }
93
+ ```
94
+
95
+ On crash/resume, the manifest tells the build skill which plans are complete and which wave to resume from.