@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,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
|
+
---
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Frontmatter Fields
|
|
50
|
+
|
|
51
|
+
| Field | Required | Type | Description |
|
|
52
|
+
|-------|----------|------|-------------|
|
|
53
|
+
| `phase` | YES | string | Phase directory name (e.g., "02-authentication") |
|
|
54
|
+
| `plan` | YES | string | Plan ID: `{phase_num}-{plan_num}` (e.g., "02-01") |
|
|
55
|
+
| `type` | YES | enum | `feature`, `bugfix`, `refactor`, `infrastructure`, `docs` |
|
|
56
|
+
| `wave` | YES | int | Execution wave (1 = independent, 2+ = has deps) |
|
|
57
|
+
| `depends_on` | YES | array | Plan IDs that must complete first. `[]` if Wave 1. |
|
|
58
|
+
| `files_modified` | YES | array | All files this plan creates or modifies |
|
|
59
|
+
| `autonomous` | YES | bool | `true` if no human checkpoints |
|
|
60
|
+
| `discovery` | NO | int | Research level: 0=skip, 1=quick, 2=standard, 3=deep. Default: 1 |
|
|
61
|
+
| `gap_closure` | NO | bool | `true` if this is a gap-closure plan. Default: false |
|
|
62
|
+
| `must_haves` | YES | object | Goal-backward derivation |
|
|
63
|
+
| `must_haves.truths` | YES | array | Observable truths that must be true when done |
|
|
64
|
+
| `must_haves.artifacts` | YES | array | Files/modules that must exist. Append `: >N lines` for size hints. |
|
|
65
|
+
| `must_haves.key_links` | YES | array | Connections between components. Append `: grep command` for verification. |
|
|
66
|
+
| `provides` | NO | array | What this plan exports for other plans to consume (classes, endpoints, modules) |
|
|
67
|
+
| `consumes` | NO | array | What this plan needs from prior plans. Format: `"Thing (from plan XX-YY)"` |
|
|
68
|
+
| `dependency_fingerprints` | NO | object | Hashes of dependency phase SUMMARY.md files at plan-creation time. Used to detect stale plans. |
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Summary Section
|
|
73
|
+
|
|
74
|
+
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).
|
|
75
|
+
|
|
76
|
+
Format:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
## Summary
|
|
80
|
+
|
|
81
|
+
**Plan {plan_id}**: {1-sentence description of what this plan does}
|
|
82
|
+
|
|
83
|
+
**Tasks:**
|
|
84
|
+
1. {task_id}: {task name} -- {files touched}
|
|
85
|
+
2. {task_id}: {task name} -- {files touched}
|
|
86
|
+
3. {task_id}: {task name} -- {files touched}
|
|
87
|
+
|
|
88
|
+
**Key files:** {comma-separated list of all files_modified}
|
|
89
|
+
|
|
90
|
+
**Must-haves:** {comma-separated list of truths from frontmatter}
|
|
91
|
+
|
|
92
|
+
**Provides:** {comma-separated list from provides field}
|
|
93
|
+
|
|
94
|
+
**Consumes:** {comma-separated list from consumes field, or "None"}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
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.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Task Types
|
|
102
|
+
|
|
103
|
+
### Standard Auto Task
|
|
104
|
+
|
|
105
|
+
```xml
|
|
106
|
+
<task id="02-01-T1" type="auto" complexity="medium">
|
|
107
|
+
<name>Create Discord OAuth client module</name>
|
|
108
|
+
<files>
|
|
109
|
+
src/auth/discord.ts
|
|
110
|
+
src/auth/types.ts
|
|
111
|
+
</files>
|
|
112
|
+
<action>
|
|
113
|
+
1. Create file `src/auth/types.ts`
|
|
114
|
+
- Export interface `DiscordUser` with fields: id, username, avatar, email
|
|
115
|
+
- Export interface `AuthTokens` with fields: accessToken, refreshToken, expiresAt
|
|
116
|
+
|
|
117
|
+
2. Create file `src/auth/discord.ts`
|
|
118
|
+
- Import `OAuth2Client` from `discord-oauth2`
|
|
119
|
+
- Import `DiscordUser`, `AuthTokens` from `./types`
|
|
120
|
+
- Export async function `authenticateWithDiscord(code: string): Promise<DiscordUser>`
|
|
121
|
+
- Create OAuth2Client with DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET from env
|
|
122
|
+
- Exchange authorization code for access token
|
|
123
|
+
- Fetch user profile: GET /api/users/@me
|
|
124
|
+
- Return DiscordUser object
|
|
125
|
+
- Export function `getDiscordAuthUrl(): string`
|
|
126
|
+
- Build OAuth2 URL with scopes: identify, email
|
|
127
|
+
- Include DISCORD_REDIRECT_URI from env
|
|
128
|
+
|
|
129
|
+
3. Add to `.env.example`:
|
|
130
|
+
DISCORD_CLIENT_ID=
|
|
131
|
+
DISCORD_CLIENT_SECRET=
|
|
132
|
+
DISCORD_REDIRECT_URI=http://localhost:3000/auth/callback
|
|
133
|
+
</action>
|
|
134
|
+
<verify>
|
|
135
|
+
npx tsc --noEmit
|
|
136
|
+
ls src/auth/discord.ts
|
|
137
|
+
ls src/auth/types.ts
|
|
138
|
+
</verify>
|
|
139
|
+
<done>Discord OAuth client module exists and compiles without errors</done>
|
|
140
|
+
</task>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### TDD Task
|
|
144
|
+
|
|
145
|
+
```xml
|
|
146
|
+
<task id="02-01-T2" type="auto" tdd="true" complexity="medium">
|
|
147
|
+
<name>Implement auth middleware with TDD</name>
|
|
148
|
+
<files>
|
|
149
|
+
src/middleware/auth.ts
|
|
150
|
+
tests/middleware/auth.test.ts
|
|
151
|
+
</files>
|
|
152
|
+
<action>
|
|
153
|
+
RED:
|
|
154
|
+
1. Create `tests/middleware/auth.test.ts`
|
|
155
|
+
- Test: "rejects request without token" — expect 401
|
|
156
|
+
- Test: "rejects request with invalid token" — expect 401
|
|
157
|
+
- Test: "passes request with valid token" — expect next() called
|
|
158
|
+
|
|
159
|
+
GREEN:
|
|
160
|
+
2. Create `src/middleware/auth.ts`
|
|
161
|
+
- Export function `requireAuth(req, res, next)`
|
|
162
|
+
- Extract JWT from httpOnly cookie
|
|
163
|
+
- Verify token with jsonwebtoken
|
|
164
|
+
- If valid: attach user to req, call next()
|
|
165
|
+
- If invalid: respond 401
|
|
166
|
+
|
|
167
|
+
REFACTOR:
|
|
168
|
+
3. Extract token verification into `verifyToken()` helper
|
|
169
|
+
</action>
|
|
170
|
+
<verify>
|
|
171
|
+
npm test -- --grep "auth middleware"
|
|
172
|
+
</verify>
|
|
173
|
+
<done>Auth middleware rejects invalid tokens and passes valid tokens</done>
|
|
174
|
+
</task>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Checkpoint: Human Verify
|
|
178
|
+
|
|
179
|
+
```xml
|
|
180
|
+
<task id="03-02-T3" type="checkpoint:human-verify">
|
|
181
|
+
<name>Verify OAuth callback flow</name>
|
|
182
|
+
<files>
|
|
183
|
+
src/pages/auth/callback.ts
|
|
184
|
+
</files>
|
|
185
|
+
<action>
|
|
186
|
+
1. Create the OAuth callback page at `src/pages/auth/callback.ts`
|
|
187
|
+
2. Wire it to call `authenticateWithDiscord()` with the authorization code
|
|
188
|
+
3. On success: set JWT cookie and redirect to dashboard
|
|
189
|
+
4. On failure: redirect to login with error message
|
|
190
|
+
</action>
|
|
191
|
+
<verify>
|
|
192
|
+
what-built: OAuth callback page that exchanges Discord auth code for JWT
|
|
193
|
+
how-to-verify: |
|
|
194
|
+
1. Click "Login with Discord" button
|
|
195
|
+
2. Authorize the application in Discord
|
|
196
|
+
3. Verify you are redirected to the dashboard
|
|
197
|
+
4. Check browser cookies for JWT token
|
|
198
|
+
resume-signal: "User confirms OAuth flow works end-to-end"
|
|
199
|
+
</verify>
|
|
200
|
+
<done>User can complete full Discord OAuth login flow</done>
|
|
201
|
+
</task>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Checkpoint: Decision
|
|
205
|
+
|
|
206
|
+
```xml
|
|
207
|
+
<task id="04-01-T1" type="checkpoint:decision">
|
|
208
|
+
<name>Choose database migration strategy</name>
|
|
209
|
+
<files></files>
|
|
210
|
+
<action>
|
|
211
|
+
Present the user with the migration strategy options after research.
|
|
212
|
+
</action>
|
|
213
|
+
<verify>
|
|
214
|
+
decision: "Which migration strategy to use for production database?"
|
|
215
|
+
context: "We need to decide how to handle schema changes in production."
|
|
216
|
+
options: |
|
|
217
|
+
A) Prisma Migrate — automatic migrations, good for development, requires care in production
|
|
218
|
+
B) Manual SQL — full control, more work, explicit about what changes
|
|
219
|
+
C) TypeORM migrations — auto-generated from entities, reversible
|
|
220
|
+
resume-signal: "User selects option A, B, or C"
|
|
221
|
+
</verify>
|
|
222
|
+
<done>Database migration strategy decided and documented in CONTEXT.md</done>
|
|
223
|
+
</task>
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Checkpoint: Human Action
|
|
227
|
+
|
|
228
|
+
```xml
|
|
229
|
+
<task id="05-03-T2" type="checkpoint:human-action">
|
|
230
|
+
<name>Configure production environment</name>
|
|
231
|
+
<files>
|
|
232
|
+
.env.production
|
|
233
|
+
</files>
|
|
234
|
+
<action>
|
|
235
|
+
1. Create `.env.production.example` with all required variables listed
|
|
236
|
+
2. Document each variable's purpose in comments
|
|
237
|
+
</action>
|
|
238
|
+
<verify>
|
|
239
|
+
what-needed: "Production environment variables must be set"
|
|
240
|
+
how-to-do: |
|
|
241
|
+
1. Copy `.env.production.example` to `.env.production`
|
|
242
|
+
2. Fill in production values for:
|
|
243
|
+
- DATABASE_URL (production database connection string)
|
|
244
|
+
- DISCORD_CLIENT_ID (production Discord app)
|
|
245
|
+
- DISCORD_CLIENT_SECRET (production Discord app)
|
|
246
|
+
- JWT_SECRET (generate with: openssl rand -base64 32)
|
|
247
|
+
resume-signal: "User confirms .env.production is configured"
|
|
248
|
+
</verify>
|
|
249
|
+
<done>Production environment is configured with real credentials</done>
|
|
250
|
+
</task>
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## The 5 Mandatory Elements
|
|
256
|
+
|
|
257
|
+
Every task MUST have ALL 5. No exceptions.
|
|
258
|
+
|
|
259
|
+
| Element | Purpose | Rules |
|
|
260
|
+
|---------|---------|-------|
|
|
261
|
+
| `<name>` | What the task does | Imperative verb phrase. Short. |
|
|
262
|
+
| `<files>` | Files touched | One per line. Actual file paths. |
|
|
263
|
+
| `<action>` | How to do it | Numbered steps. Specific. Code snippets for complex work. |
|
|
264
|
+
| `<verify>` | How to check | Executable shell commands. Or checkpoint format. |
|
|
265
|
+
| `<done>` | How to know it worked | Observable user/system behavior. Maps to a must-have. |
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Task ID Format
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
{plan_id}-T{sequential_number}
|
|
273
|
+
|
|
274
|
+
Examples:
|
|
275
|
+
02-01-T1 — Phase 02, Plan 01, Task 1
|
|
276
|
+
02-01-T2 — Phase 02, Plan 01, Task 2
|
|
277
|
+
03-02-T1 — Phase 03, Plan 02, Task 1
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Task IDs are unique within a phase. They are used for:
|
|
281
|
+
- Commit message references
|
|
282
|
+
- Checkpoint continuation references
|
|
283
|
+
- SUMMARY.md task result tracking
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Planning Config Reference
|
|
2
|
+
|
|
3
|
+
Schema, fields, defaults, and behavioral effects of Plan-Build-Run's `config.json`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
Plan-Build-Run's configuration lives at `.planning/config.json` in the project root. It is created by `/pbr:begin` and can be modified via `/pbr:config` or by editing the file directly. The config controls workflow behavior, model selection, parallelization, git integration, and confirmation gates.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Schema Version
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{ "version": 2 }
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The `version` field tracks schema migrations. Current version is `2`. When loading a config with an older version, Plan-Build-Run runs automatic migration (e.g., v1 to v2 adds missing fields with defaults, renames `model_profile` to per-agent `models` object).
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Top-Level Fields
|
|
24
|
+
|
|
25
|
+
| Field | Type | Default | Description |
|
|
26
|
+
|-------|------|---------|-------------|
|
|
27
|
+
| `version` | number | `2` | Config schema version |
|
|
28
|
+
| `context_strategy` | string | `"aggressive"` | Context budget strategy: `aggressive`, `balanced`, `minimal` |
|
|
29
|
+
| `mode` | string | `"interactive"` | Workflow mode: `interactive` |
|
|
30
|
+
| `depth` | string | `"standard"` | Research/planning depth: `quick`, `standard`, `comprehensive` |
|
|
31
|
+
|
|
32
|
+
### depth
|
|
33
|
+
|
|
34
|
+
Controls how thorough research and planning phases are:
|
|
35
|
+
|
|
36
|
+
| Value | Behavior |
|
|
37
|
+
|-------|----------|
|
|
38
|
+
| `quick` | Minimal research, smaller plans, faster execution |
|
|
39
|
+
| `standard` | Balanced research depth, standard plan detail |
|
|
40
|
+
| `comprehensive` | Deep research with multiple sources, detailed plans with more tasks |
|
|
41
|
+
|
|
42
|
+
### context_strategy
|
|
43
|
+
|
|
44
|
+
Controls how aggressively Plan-Build-Run manages context budget:
|
|
45
|
+
|
|
46
|
+
| Value | Behavior |
|
|
47
|
+
|-------|----------|
|
|
48
|
+
| `aggressive` | Proactive compaction warnings, strict context isolation, minimal file reads in main context |
|
|
49
|
+
| `balanced` | Moderate context management with some inline reads |
|
|
50
|
+
| `minimal` | Relaxed context management, more inline content allowed |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## features
|
|
55
|
+
|
|
56
|
+
Boolean toggles that enable or disable specific workflow capabilities.
|
|
57
|
+
|
|
58
|
+
| Field | Default | Description |
|
|
59
|
+
|-------|---------|-------------|
|
|
60
|
+
| `structured_planning` | `true` | Use phased planning with ROADMAP and plan files |
|
|
61
|
+
| `goal_verification` | `true` | Run verifier agent after builds to check goals are met |
|
|
62
|
+
| `integration_verification` | `true` | Run cross-phase integration checks |
|
|
63
|
+
| `context_isolation` | `true` | Isolate work into subagents to protect main context |
|
|
64
|
+
| `atomic_commits` | `true` | Require one commit per task (vs. batched commits) |
|
|
65
|
+
| `session_persistence` | `true` | Persist state across sessions via STATE.md |
|
|
66
|
+
| `research_phase` | `true` | Run research before planning |
|
|
67
|
+
| `plan_checking` | `true` | Run plan-checker agent before execution |
|
|
68
|
+
| `tdd_mode` | `false` | Enable Test-Driven Development for all tasks (Red-Green-Refactor) |
|
|
69
|
+
| `status_line` | `true` | Show status line in session UI |
|
|
70
|
+
| `auto_continue` | `false` | Write `.auto-next` signal on phase completion for automatic continuation |
|
|
71
|
+
| `auto_advance` | `false` | Chain build→review→plan automatically in autonomous mode (requires `mode: autonomous`) |
|
|
72
|
+
| `team_discussions` | `false` | Enable team-based discussion workflows (never used for execution) |
|
|
73
|
+
| `inline_verify` | `false` | Run per-task verification after each executor commit (opt-in, adds latency) |
|
|
74
|
+
|
|
75
|
+
### Notable interactions
|
|
76
|
+
|
|
77
|
+
- `goal_verification: false` skips the post-build verification step. The build skill appends a note suggesting `/pbr:review` manually.
|
|
78
|
+
- `tdd_mode: true` causes all task types to follow Red-Green-Refactor, producing 3 commits per task instead of 1.
|
|
79
|
+
- `auto_continue: true` writes a `.planning/.auto-next` file containing the next command (e.g., `/pbr:plan 4`), allowing wrapper scripts to chain phases.
|
|
80
|
+
- `auto_advance: true` + `mode: autonomous` enables full phase cycling: build completes → auto-invoke review → if verification passes → auto-invoke plan for next phase. Hard stops at: checkpoints, verification gaps, errors, milestone boundaries.
|
|
81
|
+
- `inline_verify: true` spawns a haiku-model verifier after each plan completes within a wave. Adds ~10-20s latency per plan but catches issues before dependent plans run.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## models
|
|
86
|
+
|
|
87
|
+
Per-agent model selection. See `references/model-profiles.md` for full details.
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"models": {
|
|
92
|
+
"researcher": "sonnet",
|
|
93
|
+
"planner": "inherit",
|
|
94
|
+
"executor": "inherit",
|
|
95
|
+
"verifier": "sonnet",
|
|
96
|
+
"integration_checker": "sonnet",
|
|
97
|
+
"debugger": "inherit",
|
|
98
|
+
"mapper": "sonnet",
|
|
99
|
+
"synthesizer": "haiku"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Valid values: `sonnet`, `opus`, `haiku`, `inherit`.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## parallelization
|
|
109
|
+
|
|
110
|
+
Controls whether and how plans execute concurrently.
|
|
111
|
+
|
|
112
|
+
| Field | Type | Default | Description |
|
|
113
|
+
|-------|------|---------|-------------|
|
|
114
|
+
| `enabled` | boolean | `true` | Enable parallel plan execution within a wave |
|
|
115
|
+
| `plan_level` | boolean | `true` | Parallelize at plan level (multiple plans in same wave) |
|
|
116
|
+
| `task_level` | boolean | `false` | Parallelize at task level within a plan (not currently used) |
|
|
117
|
+
| `max_concurrent_agents` | number | `3` | Maximum simultaneous executor subagents |
|
|
118
|
+
| `min_plans_for_parallel` | number | `2` | Minimum plans in a wave to trigger parallel execution |
|
|
119
|
+
| `use_teams` | boolean | `false` | Use Agent Teams for coordination (discussion only, never execution) |
|
|
120
|
+
|
|
121
|
+
### Behavior
|
|
122
|
+
|
|
123
|
+
When `enabled: true` and a wave has >= `min_plans_for_parallel` plans, the build orchestrator spawns up to `max_concurrent_agents` executor Task() calls in parallel using `run_in_background: true`.
|
|
124
|
+
|
|
125
|
+
When `enabled: false` or a wave has only 1 plan, executors run sequentially.
|
|
126
|
+
|
|
127
|
+
Git lock conflicts can occur with parallel execution. Executors handle this with retry logic (wait 2s, max 3 attempts). If conflicts persist, reduce `max_concurrent_agents` to 1.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## planning
|
|
132
|
+
|
|
133
|
+
Controls planning behavior and documentation.
|
|
134
|
+
|
|
135
|
+
| Field | Type | Default | Description |
|
|
136
|
+
|-------|------|---------|-------------|
|
|
137
|
+
| `commit_docs` | boolean | `true` | Commit planning docs (SUMMARY, VERIFICATION) after builds |
|
|
138
|
+
| `max_tasks_per_plan` | number | `3` | Maximum tasks per plan (keeps plans focused and atomic) |
|
|
139
|
+
| `search_gitignored` | boolean | `false` | Include gitignored files in codebase scanning |
|
|
140
|
+
|
|
141
|
+
### commit_docs
|
|
142
|
+
|
|
143
|
+
When `true`, after all plans in a phase complete, the build orchestrator stages and commits planning artifacts:
|
|
144
|
+
```
|
|
145
|
+
docs({phase}): add build summaries and verification
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
When `false`, planning docs remain unstaged/uncommitted.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## git
|
|
153
|
+
|
|
154
|
+
Controls git integration and branching.
|
|
155
|
+
|
|
156
|
+
| Field | Type | Default | Description |
|
|
157
|
+
|-------|------|---------|-------------|
|
|
158
|
+
| `branching` | string | `"none"` | Branching strategy: `none`, `phase`, `milestone`, `disabled` |
|
|
159
|
+
| `commit_format` | string | `"{type}({phase}-{plan}): {description}"` | Commit message template |
|
|
160
|
+
| `phase_branch_template` | string | `"plan-build-run/phase-{phase}-{slug}"` | Phase branch naming |
|
|
161
|
+
| `milestone_branch_template` | string | `"plan-build-run/{milestone}-{slug}"` | Milestone branch naming |
|
|
162
|
+
| `mode` | string | `"enabled"` | Git mode: `enabled` or `disabled` |
|
|
163
|
+
|
|
164
|
+
See `references/git-integration.md` for full branching strategy details.
|
|
165
|
+
|
|
166
|
+
### mode: disabled
|
|
167
|
+
|
|
168
|
+
When `git.mode` is `"disabled"`, no git commands are run at all -- no commits, no branching, no hook validation. Useful for prototyping or non-git projects.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## gates
|
|
173
|
+
|
|
174
|
+
Confirmation gates that pause execution to ask the user before proceeding.
|
|
175
|
+
|
|
176
|
+
| Field | Default | When Triggered |
|
|
177
|
+
|-------|---------|----------------|
|
|
178
|
+
| `confirm_project` | `true` | Before creating a new Plan-Build-Run project (`/pbr:begin`) |
|
|
179
|
+
| `confirm_roadmap` | `true` | Before finalizing a roadmap |
|
|
180
|
+
| `confirm_plan` | `true` | Before finalizing plans for a phase |
|
|
181
|
+
| `confirm_execute` | `false` | Before starting phase execution (`/pbr:build`) |
|
|
182
|
+
| `confirm_transition` | `true` | Before transitioning to the next phase |
|
|
183
|
+
| `issues_review` | `true` | Before proceeding when issues are detected |
|
|
184
|
+
|
|
185
|
+
Setting a gate to `false` makes that step automatic (no user prompt).
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## safety
|
|
190
|
+
|
|
191
|
+
Safety controls for destructive or external operations.
|
|
192
|
+
|
|
193
|
+
| Field | Type | Default | Description |
|
|
194
|
+
|-------|------|---------|-------------|
|
|
195
|
+
| `always_confirm_destructive` | boolean | `true` | Always ask before destructive git operations |
|
|
196
|
+
| `always_confirm_external_services` | boolean | `true` | Always ask before calling external APIs or services |
|
|
197
|
+
|
|
198
|
+
These cannot be disabled via `/pbr:config` -- they require manual editing of `config.json` as a deliberate action.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Validation Rules
|
|
203
|
+
|
|
204
|
+
When modifying config (via `/pbr:config` or direct edit):
|
|
205
|
+
|
|
206
|
+
| Field | Valid Values |
|
|
207
|
+
|-------|-------------|
|
|
208
|
+
| `depth` | `quick`, `standard`, `comprehensive` |
|
|
209
|
+
| `models.*` | `sonnet`, `inherit`, `haiku`, `opus` |
|
|
210
|
+
| `context_strategy` | `aggressive`, `balanced`, `minimal` |
|
|
211
|
+
| `git.branching` | `none`, `phase`, `milestone`, `disabled` |
|
|
212
|
+
| `git.mode` | `enabled`, `disabled` |
|
|
213
|
+
| All boolean fields | `true`, `false` |
|