@sienklogic/plan-build-run 2.0.0 → 2.0.2
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/cursor-pbr/.cursor-plugin/plugin.json +22 -0
- package/plugins/cursor-pbr/agents/.gitkeep +0 -0
- package/plugins/cursor-pbr/assets/.gitkeep +0 -0
- package/plugins/cursor-pbr/hooks/hooks.json +11 -0
- package/plugins/cursor-pbr/references/.gitkeep +0 -0
- package/plugins/cursor-pbr/rules/.gitkeep +0 -0
- package/plugins/cursor-pbr/skills/.gitkeep +0 -0
- package/plugins/cursor-pbr/templates/.gitkeep +0 -0
- 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,193 +1,193 @@
|
|
|
1
|
-
# Plan-Build-Run Rules
|
|
2
|
-
|
|
3
|
-
Authoritative rules for all Plan-Build-Run skills, agents, hooks, and workflows.
|
|
4
|
-
Condensed from the 3,100-line `docs/DEVELOPMENT-GUIDE.md`. When in doubt, these rules govern.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Philosophy
|
|
9
|
-
|
|
10
|
-
1. **Context is precious.** The orchestrator stays lean (~15% usage). Delegate heavy work to subagents.
|
|
11
|
-
2. **State lives on disk.** Skills and agents communicate through `.planning/` files, not messages.
|
|
12
|
-
3. **Agents are black boxes.** Clear input/output contracts. Agents never read other agent definitions.
|
|
13
|
-
4. **Gates provide safety.** Users control pace via config toggles. Never skip a gate.
|
|
14
|
-
5. **One task, one commit.** Atomic commits for clean history and easy rollback.
|
|
15
|
-
6. **Cross-platform always.** `path.join()`, CommonJS, test on Windows/macOS/Linux.
|
|
16
|
-
7. **Test everything.** 70% coverage minimum. All 9 CI matrix combinations must pass.
|
|
17
|
-
8. **PLAN-BUILD-RUN branding only.** Always use `PLAN-BUILD-RUN ►` prefix in banners.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Context Budget
|
|
22
|
-
|
|
23
|
-
9. Target 15% orchestrator context usage. Warn user at 30%.
|
|
24
|
-
10. **Never** read agent definitions (`agents/*.md`) in the orchestrator — `subagent_type` auto-loads them.
|
|
25
|
-
11. **Never** inline large files into `Task()` prompts — tell agents to read files from disk.
|
|
26
|
-
12. **Never** read full subagent output — read frontmatter only (first 10-20 lines).
|
|
27
|
-
13. Read STATE.md and config.json fully. Read ROADMAP.md by section. Read PLAN.md/SUMMARY.md/VERIFICATION.md frontmatter only.
|
|
28
|
-
14. Use the `limit` parameter on Read to restrict line counts.
|
|
29
|
-
15. Proactively suggest `/pbr:pause` when context gets heavy — before compaction, not after.
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## State Management
|
|
34
|
-
|
|
35
|
-
16. STATE.md is the **single source of truth** for current position.
|
|
36
|
-
17. **Never** infer current phase from directory listings, git log, or conversation history.
|
|
37
|
-
18. Always read STATE.md before making state-dependent decisions.
|
|
38
|
-
19. Update STATE.md at: begin, plan, build, review, pause, continue, milestone.
|
|
39
|
-
20. **Never** commit STATE.md mid-skill — hooks handle session persistence.
|
|
40
|
-
21. Agents write artifacts (SUMMARY.md, VERIFICATION.md). Only the orchestrator writes STATE.md.
|
|
41
|
-
22. Every ROADMAP.md phase must have a matching `.planning/phases/` directory, and vice versa.
|
|
42
|
-
23. config.json is validated against `scripts/config-schema.json` on load.
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## Agent Spawning
|
|
47
|
-
|
|
48
|
-
24. Always use `subagent_type: "pbr:{name}"` to spawn agents.
|
|
49
|
-
25. Pass file paths to agents, not file contents.
|
|
50
|
-
26. Agents never read other agent definition files.
|
|
51
|
-
27. Each agent gets a fresh 200k token context window — let them do the heavy reading.
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## User Interaction Patterns
|
|
56
|
-
|
|
57
|
-
28. Use `AskUserQuestion` for all structured gate checks — never plain-text "Type approved" prompts.
|
|
58
|
-
29. AskUserQuestion is an orchestrator-only tool. It **cannot** be called from subagents (Task contexts).
|
|
59
|
-
30. Max 4 options per AskUserQuestion call. If more options exist, split into a 2-step flow.
|
|
60
|
-
31. `header` field must be max 12 characters. Keep it a single word when possible.
|
|
61
|
-
32. `multiSelect` is always `false` for Plan-Build-Run gate checks.
|
|
62
|
-
33. Always handle the "Other" case — users may type freeform text instead of selecting an option.
|
|
63
|
-
34. Reuse patterns from `skills/shared/gate-prompts.md` by name. Do not reinvent prompts inline.
|
|
64
|
-
35. Do **not** use AskUserQuestion for freeform text input (symptom gathering, Socratic discussion, open-ended questions). Use plain conversation for those.
|
|
65
|
-
36. Skills that do not require user interaction (continue, health, help, pause) intentionally omit AskUserQuestion from allowed-tools.
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## Skill Authoring
|
|
70
|
-
|
|
71
|
-
37. Every SKILL.md starts with YAML frontmatter: `name`, `description`, `allowed-tools`, `argument-hint`.
|
|
72
|
-
38. Skills that spawn agents **must** have a `## Context Budget` section.
|
|
73
|
-
39. Mark each step as `(inline)` or `(delegate)` — inline for light work, delegate for analysis.
|
|
74
|
-
40. Reference templates and references by filename — never inline them.
|
|
75
|
-
41. Gate checks: read config toggle → display summary → ask user → proceed/abort/revise.
|
|
76
|
-
42. Use branded UI elements from `references/ui-formatting.md`.
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## Agent Authoring
|
|
81
|
-
|
|
82
|
-
43. Every agent file starts with YAML frontmatter: `name`, `description`, `model`, `memory`, `tools`.
|
|
83
|
-
44. Agent name matches the agent file name (no prefix needed).
|
|
84
|
-
45. `tools` array: only include tools the agent actually uses.
|
|
85
|
-
46. Agents write artifacts to disk. They never modify STATE.md or ROADMAP.md.
|
|
86
|
-
47. Agent definitions are self-contained — no cross-agent references.
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## Hook Development
|
|
91
|
-
|
|
92
|
-
48. All hooks use **CommonJS** (`require`), never ES modules (`import`).
|
|
93
|
-
49. All hooks call `logHook()` from `hook-logger.js`. No silent exits.
|
|
94
|
-
50. Exit codes: `0` = allow/success, `2` = block (PreToolUse only), other = error (logged, non-blocking).
|
|
95
|
-
51. Hooks receive JSON on stdin, write JSON to stdout.
|
|
96
|
-
52. Fail gracefully: wrap in try/catch, exit 0 on parse errors.
|
|
97
|
-
53. Every hook in `hooks.json` must have a `statusMessage` field (gerund form: "Validating...", keep short).
|
|
98
|
-
54. Windows file deletion: use 3-attempt retry loop to handle AV/indexer locks.
|
|
99
|
-
55. Every hook script must have a corresponding `tests/{name}.test.js`.
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## Commits
|
|
104
|
-
|
|
105
|
-
56. Format: `{type}({scope}): {description}`.
|
|
106
|
-
57. Valid types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `wip`.
|
|
107
|
-
58. Valid scopes: `{NN}-{MM}` (phase-plan), `quick-{NNN}`, `planning`, or any lowercase word.
|
|
108
|
-
59. **Never** use `git add .` or `git add -A` — stage specific files only.
|
|
109
|
-
60. Blocked files: `.env` (not `.env.example`), `*.key`, `*.pem`, `*.pfx`, `*.p12`, `*credential*`, `*secret*` (unless in `tests/` or `*.example`).
|
|
110
|
-
61. TDD tasks: exactly 3 commits — RED (test), GREEN (feat), REFACTOR.
|
|
111
|
-
62. Executors: one atomic commit per task.
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## Templates
|
|
116
|
-
|
|
117
|
-
63. Default syntax: `{variable}` placeholders for string substitution.
|
|
118
|
-
64. Only use EJS (`<%= %>`, `<% %>`) when loops or conditionals are genuinely needed.
|
|
119
|
-
65. Template files use `.tmpl` extension. Name matches the output file (e.g., `SUMMARY.md.tmpl` → `SUMMARY.md`).
|
|
120
|
-
66. Templates live in `templates/` (global), `templates/codebase/` (scan), `templates/research/` (research), or `skills/{name}/templates/` (skill-specific).
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## File Naming
|
|
125
|
-
|
|
126
|
-
67. Skills: `plugins/pbr/skills/{skill-name}/SKILL.md` — lowercase hyphenated dir, uppercase `SKILL.md`.
|
|
127
|
-
68. Agents: `plugins/pbr/agents/{name}.md` — agent name matches file name.
|
|
128
|
-
69. Scripts: `plugins/pbr/scripts/{name}.js` — lowercase, hyphenated, CommonJS.
|
|
129
|
-
70. References: `plugins/pbr/references/{name}.md` — lowercase, hyphenated.
|
|
130
|
-
71. Tests: `tests/{script-name}.test.js` — mirrors the script name.
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## Testing
|
|
135
|
-
|
|
136
|
-
72. Test files mirror script names: `scripts/foo.js` → `tests/foo.test.js`.
|
|
137
|
-
73. Use the fixture project at `tests/fixtures/fake-project/` for integration tests.
|
|
138
|
-
74. Hook tests: use stdin/stdout protocol with `execSync()`, timeout 5000ms, run in temp dir.
|
|
139
|
-
75. Coverage target: 70% branches/functions/lines/statements.
|
|
140
|
-
76. CI matrix: Node 18/20/22 × ubuntu/macos/windows. All 9 must pass.
|
|
141
|
-
77. Local pre-push: `npm run lint && npm test && npm run validate`.
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
## Cross-Platform
|
|
146
|
-
|
|
147
|
-
78. **Never** hardcode `/` or `\` — always `path.join()`.
|
|
148
|
-
79. Use `\n` in string literals — Node.js and Git normalize line endings.
|
|
149
|
-
80. In `hooks.json`, use `${CLAUDE_PLUGIN_ROOT}` — Claude Code expands this internally on all platforms.
|
|
150
|
-
81. **Never** use `$CLAUDE_PLUGIN_ROOT` (shell expansion is platform-dependent).
|
|
151
|
-
82. **Never** rely on execute bits — always invoke via `node script.js`.
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## Dependencies & Gates
|
|
156
|
-
|
|
157
|
-
83. Check all `depends_on` plans have SUMMARY.md files before executing.
|
|
158
|
-
84. Checkpoint tasks (`checkpoint:human-verify`) require STOP — write partial SUMMARY.md, return metadata.
|
|
159
|
-
85. Respect all `gates.confirm_*` config toggles. Never auto-proceed when a gate is enabled.
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
## Logging
|
|
164
|
-
|
|
165
|
-
86. Hook scripts → `logHook()` (writes to `logs/hooks.jsonl`, max 200 entries).
|
|
166
|
-
87. Workflow milestones → `logEvent()` (writes to `logs/events.jsonl`, max 1,000 entries).
|
|
167
|
-
88. Rule of thumb: inside a hook? `logHook()`. Tracking a high-level event? `logEvent()`.
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## Gotchas
|
|
172
|
-
|
|
173
|
-
89. JSDoc `*/` in glob patterns closes Babel comments early — use `//` line comments instead.
|
|
174
|
-
90. Regex anchors: use `\b` word boundaries, not `^` anchors (misses chained commands like `cd && git commit`).
|
|
175
|
-
91. Windows cwd locking in tests: use `cwd` option in `execSync()` instead of `process.chdir()`.
|
|
176
|
-
92. PLAN.md frontmatter must include all required fields: `phase`, `plan`, `type`, `wave`, `depends_on`, `files_modified`, `autonomous`, `must_haves`.
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## Quick Reference: Never Do This
|
|
181
|
-
|
|
182
|
-
| # | Anti-Pattern | Impact |
|
|
183
|
-
|---|-------------|--------|
|
|
184
|
-
| 1 | Read agent definitions in orchestrator | Context balloons 15% → 88% |
|
|
185
|
-
| 2 | Inline large files into Task() prompts | Wasted orchestrator context |
|
|
186
|
-
| 3 | Read full subagent output | Context bloat |
|
|
187
|
-
| 4 | Use non-Plan-Build-Run branding | User confusion |
|
|
188
|
-
| 5 | Hardcode path separators | Cross-platform breakage |
|
|
189
|
-
| 6 | Use ES modules in hooks | Hook fails to load |
|
|
190
|
-
| 7 | Skip hook logging | Silent failures |
|
|
191
|
-
| 8 | Modify STATE.md in agents | Race conditions, corruption |
|
|
192
|
-
| 9 | Use `git add .` | Sensitive data leaks |
|
|
193
|
-
| 10 | Skip tests for new scripts | CI failures, regressions |
|
|
1
|
+
# Plan-Build-Run Rules
|
|
2
|
+
|
|
3
|
+
Authoritative rules for all Plan-Build-Run skills, agents, hooks, and workflows.
|
|
4
|
+
Condensed from the 3,100-line `docs/DEVELOPMENT-GUIDE.md`. When in doubt, these rules govern.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Philosophy
|
|
9
|
+
|
|
10
|
+
1. **Context is precious.** The orchestrator stays lean (~15% usage). Delegate heavy work to subagents.
|
|
11
|
+
2. **State lives on disk.** Skills and agents communicate through `.planning/` files, not messages.
|
|
12
|
+
3. **Agents are black boxes.** Clear input/output contracts. Agents never read other agent definitions.
|
|
13
|
+
4. **Gates provide safety.** Users control pace via config toggles. Never skip a gate.
|
|
14
|
+
5. **One task, one commit.** Atomic commits for clean history and easy rollback.
|
|
15
|
+
6. **Cross-platform always.** `path.join()`, CommonJS, test on Windows/macOS/Linux.
|
|
16
|
+
7. **Test everything.** 70% coverage minimum. All 9 CI matrix combinations must pass.
|
|
17
|
+
8. **PLAN-BUILD-RUN branding only.** Always use `PLAN-BUILD-RUN ►` prefix in banners.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Context Budget
|
|
22
|
+
|
|
23
|
+
9. Target 15% orchestrator context usage. Warn user at 30%.
|
|
24
|
+
10. **Never** read agent definitions (`agents/*.md`) in the orchestrator — `subagent_type` auto-loads them.
|
|
25
|
+
11. **Never** inline large files into `Task()` prompts — tell agents to read files from disk.
|
|
26
|
+
12. **Never** read full subagent output — read frontmatter only (first 10-20 lines).
|
|
27
|
+
13. Read STATE.md and config.json fully. Read ROADMAP.md by section. Read PLAN.md/SUMMARY.md/VERIFICATION.md frontmatter only.
|
|
28
|
+
14. Use the `limit` parameter on Read to restrict line counts.
|
|
29
|
+
15. Proactively suggest `/pbr:pause` when context gets heavy — before compaction, not after.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## State Management
|
|
34
|
+
|
|
35
|
+
16. STATE.md is the **single source of truth** for current position.
|
|
36
|
+
17. **Never** infer current phase from directory listings, git log, or conversation history.
|
|
37
|
+
18. Always read STATE.md before making state-dependent decisions.
|
|
38
|
+
19. Update STATE.md at: begin, plan, build, review, pause, continue, milestone.
|
|
39
|
+
20. **Never** commit STATE.md mid-skill — hooks handle session persistence.
|
|
40
|
+
21. Agents write artifacts (SUMMARY.md, VERIFICATION.md). Only the orchestrator writes STATE.md.
|
|
41
|
+
22. Every ROADMAP.md phase must have a matching `.planning/phases/` directory, and vice versa.
|
|
42
|
+
23. config.json is validated against `scripts/config-schema.json` on load.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Agent Spawning
|
|
47
|
+
|
|
48
|
+
24. Always use `subagent_type: "pbr:{name}"` to spawn agents.
|
|
49
|
+
25. Pass file paths to agents, not file contents.
|
|
50
|
+
26. Agents never read other agent definition files.
|
|
51
|
+
27. Each agent gets a fresh 200k token context window — let them do the heavy reading.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## User Interaction Patterns
|
|
56
|
+
|
|
57
|
+
28. Use `AskUserQuestion` for all structured gate checks — never plain-text "Type approved" prompts.
|
|
58
|
+
29. AskUserQuestion is an orchestrator-only tool. It **cannot** be called from subagents (Task contexts).
|
|
59
|
+
30. Max 4 options per AskUserQuestion call. If more options exist, split into a 2-step flow.
|
|
60
|
+
31. `header` field must be max 12 characters. Keep it a single word when possible.
|
|
61
|
+
32. `multiSelect` is always `false` for Plan-Build-Run gate checks.
|
|
62
|
+
33. Always handle the "Other" case — users may type freeform text instead of selecting an option.
|
|
63
|
+
34. Reuse patterns from `skills/shared/gate-prompts.md` by name. Do not reinvent prompts inline.
|
|
64
|
+
35. Do **not** use AskUserQuestion for freeform text input (symptom gathering, Socratic discussion, open-ended questions). Use plain conversation for those.
|
|
65
|
+
36. Skills that do not require user interaction (continue, health, help, pause) intentionally omit AskUserQuestion from allowed-tools.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Skill Authoring
|
|
70
|
+
|
|
71
|
+
37. Every SKILL.md starts with YAML frontmatter: `name`, `description`, `allowed-tools`, `argument-hint`.
|
|
72
|
+
38. Skills that spawn agents **must** have a `## Context Budget` section.
|
|
73
|
+
39. Mark each step as `(inline)` or `(delegate)` — inline for light work, delegate for analysis.
|
|
74
|
+
40. Reference templates and references by filename — never inline them.
|
|
75
|
+
41. Gate checks: read config toggle → display summary → ask user → proceed/abort/revise.
|
|
76
|
+
42. Use branded UI elements from `references/ui-formatting.md`.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Agent Authoring
|
|
81
|
+
|
|
82
|
+
43. Every agent file starts with YAML frontmatter: `name`, `description`, `model`, `memory`, `tools`.
|
|
83
|
+
44. Agent name matches the agent file name (no prefix needed).
|
|
84
|
+
45. `tools` array: only include tools the agent actually uses.
|
|
85
|
+
46. Agents write artifacts to disk. They never modify STATE.md or ROADMAP.md.
|
|
86
|
+
47. Agent definitions are self-contained — no cross-agent references.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Hook Development
|
|
91
|
+
|
|
92
|
+
48. All hooks use **CommonJS** (`require`), never ES modules (`import`).
|
|
93
|
+
49. All hooks call `logHook()` from `hook-logger.js`. No silent exits.
|
|
94
|
+
50. Exit codes: `0` = allow/success, `2` = block (PreToolUse only), other = error (logged, non-blocking).
|
|
95
|
+
51. Hooks receive JSON on stdin, write JSON to stdout.
|
|
96
|
+
52. Fail gracefully: wrap in try/catch, exit 0 on parse errors.
|
|
97
|
+
53. Every hook in `hooks.json` must have a `statusMessage` field (gerund form: "Validating...", keep short).
|
|
98
|
+
54. Windows file deletion: use 3-attempt retry loop to handle AV/indexer locks.
|
|
99
|
+
55. Every hook script must have a corresponding `tests/{name}.test.js`.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Commits
|
|
104
|
+
|
|
105
|
+
56. Format: `{type}({scope}): {description}`.
|
|
106
|
+
57. Valid types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `wip`.
|
|
107
|
+
58. Valid scopes: `{NN}-{MM}` (phase-plan), `quick-{NNN}`, `planning`, or any lowercase word.
|
|
108
|
+
59. **Never** use `git add .` or `git add -A` — stage specific files only.
|
|
109
|
+
60. Blocked files: `.env` (not `.env.example`), `*.key`, `*.pem`, `*.pfx`, `*.p12`, `*credential*`, `*secret*` (unless in `tests/` or `*.example`).
|
|
110
|
+
61. TDD tasks: exactly 3 commits — RED (test), GREEN (feat), REFACTOR.
|
|
111
|
+
62. Executors: one atomic commit per task.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Templates
|
|
116
|
+
|
|
117
|
+
63. Default syntax: `{variable}` placeholders for string substitution.
|
|
118
|
+
64. Only use EJS (`<%= %>`, `<% %>`) when loops or conditionals are genuinely needed.
|
|
119
|
+
65. Template files use `.tmpl` extension. Name matches the output file (e.g., `SUMMARY.md.tmpl` → `SUMMARY.md`).
|
|
120
|
+
66. Templates live in `templates/` (global), `templates/codebase/` (scan), `templates/research/` (research), or `skills/{name}/templates/` (skill-specific).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## File Naming
|
|
125
|
+
|
|
126
|
+
67. Skills: `plugins/pbr/skills/{skill-name}/SKILL.md` — lowercase hyphenated dir, uppercase `SKILL.md`.
|
|
127
|
+
68. Agents: `plugins/pbr/agents/{name}.md` — agent name matches file name.
|
|
128
|
+
69. Scripts: `plugins/pbr/scripts/{name}.js` — lowercase, hyphenated, CommonJS.
|
|
129
|
+
70. References: `plugins/pbr/references/{name}.md` — lowercase, hyphenated.
|
|
130
|
+
71. Tests: `tests/{script-name}.test.js` — mirrors the script name.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Testing
|
|
135
|
+
|
|
136
|
+
72. Test files mirror script names: `scripts/foo.js` → `tests/foo.test.js`.
|
|
137
|
+
73. Use the fixture project at `tests/fixtures/fake-project/` for integration tests.
|
|
138
|
+
74. Hook tests: use stdin/stdout protocol with `execSync()`, timeout 5000ms, run in temp dir.
|
|
139
|
+
75. Coverage target: 70% branches/functions/lines/statements.
|
|
140
|
+
76. CI matrix: Node 18/20/22 × ubuntu/macos/windows. All 9 must pass.
|
|
141
|
+
77. Local pre-push: `npm run lint && npm test && npm run validate`.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Cross-Platform
|
|
146
|
+
|
|
147
|
+
78. **Never** hardcode `/` or `\` — always `path.join()`.
|
|
148
|
+
79. Use `\n` in string literals — Node.js and Git normalize line endings.
|
|
149
|
+
80. In `hooks.json`, use `${CLAUDE_PLUGIN_ROOT}` — Claude Code expands this internally on all platforms.
|
|
150
|
+
81. **Never** use `$CLAUDE_PLUGIN_ROOT` (shell expansion is platform-dependent).
|
|
151
|
+
82. **Never** rely on execute bits — always invoke via `node script.js`.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Dependencies & Gates
|
|
156
|
+
|
|
157
|
+
83. Check all `depends_on` plans have SUMMARY.md files before executing.
|
|
158
|
+
84. Checkpoint tasks (`checkpoint:human-verify`) require STOP — write partial SUMMARY.md, return metadata.
|
|
159
|
+
85. Respect all `gates.confirm_*` config toggles. Never auto-proceed when a gate is enabled.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Logging
|
|
164
|
+
|
|
165
|
+
86. Hook scripts → `logHook()` (writes to `logs/hooks.jsonl`, max 200 entries).
|
|
166
|
+
87. Workflow milestones → `logEvent()` (writes to `logs/events.jsonl`, max 1,000 entries).
|
|
167
|
+
88. Rule of thumb: inside a hook? `logHook()`. Tracking a high-level event? `logEvent()`.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Gotchas
|
|
172
|
+
|
|
173
|
+
89. JSDoc `*/` in glob patterns closes Babel comments early — use `//` line comments instead.
|
|
174
|
+
90. Regex anchors: use `\b` word boundaries, not `^` anchors (misses chained commands like `cd && git commit`).
|
|
175
|
+
91. Windows cwd locking in tests: use `cwd` option in `execSync()` instead of `process.chdir()`.
|
|
176
|
+
92. PLAN.md frontmatter must include all required fields: `phase`, `plan`, `type`, `wave`, `depends_on`, `files_modified`, `autonomous`, `must_haves`.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Quick Reference: Never Do This
|
|
181
|
+
|
|
182
|
+
| # | Anti-Pattern | Impact |
|
|
183
|
+
|---|-------------|--------|
|
|
184
|
+
| 1 | Read agent definitions in orchestrator | Context balloons 15% → 88% |
|
|
185
|
+
| 2 | Inline large files into Task() prompts | Wasted orchestrator context |
|
|
186
|
+
| 3 | Read full subagent output | Context bloat |
|
|
187
|
+
| 4 | Use non-Plan-Build-Run branding | User confusion |
|
|
188
|
+
| 5 | Hardcode path separators | Cross-platform breakage |
|
|
189
|
+
| 6 | Use ES modules in hooks | Hook fails to load |
|
|
190
|
+
| 7 | Skip hook logging | Silent failures |
|
|
191
|
+
| 8 | Modify STATE.md in agents | Race conditions, corruption |
|
|
192
|
+
| 9 | Use `git add .` | Sensitive data leaks |
|
|
193
|
+
| 10 | Skip tests for new scripts | CI failures, regressions |
|