@sienklogic/plan-build-run 2.49.0 → 2.51.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 +27 -0
- package/package.json +1 -1
- package/plugins/copilot-pbr/plugin.json +1 -1
- package/plugins/copilot-pbr/skills/build/SKILL.md +34 -24
- package/plugins/copilot-pbr/skills/plan/SKILL.md +43 -53
- package/plugins/cursor-pbr/.cursor-plugin/plugin.json +1 -1
- package/plugins/cursor-pbr/skills/build/SKILL.md +33 -23
- package/plugins/cursor-pbr/skills/plan/SKILL.md +43 -53
- package/plugins/pbr/.claude-plugin/plugin.json +1 -1
- package/plugins/pbr/scripts/lib/build.js +236 -1
- package/plugins/pbr/scripts/pbr-tools.js +17 -3
- package/plugins/pbr/skills/build/SKILL.md +35 -28
- package/plugins/pbr/skills/milestone/SKILL.md +4 -183
- package/plugins/pbr/skills/plan/SKILL.md +47 -140
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,33 @@ All notable changes to Plan-Build-Run will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.51.0](https://github.com/SienkLogic/plan-build-run/compare/plan-build-run-v2.50.0...plan-build-run-v2.51.0) (2026-03-01)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **53-02:** add ci-poll and rollback CLI commands to pbr-tools ([c26434a](https://github.com/SienkLogic/plan-build-run/commit/c26434ac4d58ba8e0849205109f1978222131377))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* **53-02:** sync ci-poll and rollback CLI updates to cursor-pbr and copilot-pbr ([ab78f09](https://github.com/SienkLogic/plan-build-run/commit/ab78f09db8e7e653d49d3b1bff366ae95bae98bc))
|
|
19
|
+
|
|
20
|
+
## [2.50.0](https://github.com/SienkLogic/plan-build-run/compare/plan-build-run-v2.49.0...plan-build-run-v2.50.0) (2026-03-01)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* **52-04:** replace 4 milestone banners with tmpl refs; condense 5 plan SKILL.md sections to < 600 lines ([3e383c4](https://github.com/SienkLogic/plan-build-run/commit/3e383c45d4cfdb51298a2d2531f51752132368a0))
|
|
26
|
+
* **53-01:** add cleanup section and CRITICAL markers to build, consolidate plan pre-planner briefing ([7c14693](https://github.com/SienkLogic/plan-build-run/commit/7c14693e7790728e00d5e4d080e19f54648bc156))
|
|
27
|
+
* **53-02:** GREEN - implement ciPoll and rollback in lib/build.js ([d2ffa30](https://github.com/SienkLogic/plan-build-run/commit/d2ffa309eab8bf10981e88ded12c8e2b4029ad28))
|
|
28
|
+
* **53-02:** register ci-poll and rollback in pbr-tools.js dispatcher ([88c551e](https://github.com/SienkLogic/plan-build-run/commit/88c551e82d3acb1d807bd302c758d041cb0577c0))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Bug Fixes
|
|
32
|
+
|
|
33
|
+
* **52-05:** remove blank lines to bring build SKILL.md to 868 lines (< 870 target) ([6cd9549](https://github.com/SienkLogic/plan-build-run/commit/6cd954972c33540462cb08f6a192604879b8e6df))
|
|
34
|
+
|
|
8
35
|
## [2.49.0](https://github.com/SienkLogic/plan-build-run/compare/plan-build-run-v2.48.0...plan-build-run-v2.49.0) (2026-03-01)
|
|
9
36
|
|
|
10
37
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pbr",
|
|
3
3
|
"displayName": "Plan-Build-Run",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.51.0",
|
|
5
5
|
"description": "Plan-Build-Run — Structured development workflow for GitHub Copilot CLI. Solves context rot through disciplined agent delegation, structured planning, atomic execution, and goal-backward verification.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "SienkLogic",
|
|
@@ -487,19 +487,17 @@ Use AskUserQuestion (pattern: multi-option-failure from `skills/shared/gate-prom
|
|
|
487
487
|
- If yes: warn user that those plans will also need to be skipped or adjusted
|
|
488
488
|
|
|
489
489
|
**If user selects 'Rollback':**
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
- Continue to next wave or stop based on user preference
|
|
502
|
-
- If no `last_good_commit`: warn "No rollback point available (this was the first plan). Use abort instead."
|
|
490
|
+
Run the rollback CLI:
|
|
491
|
+
|
|
492
|
+
```bash
|
|
493
|
+
node ${PLUGIN_ROOT}/scripts/pbr-tools.js rollback .planning/phases/{NN}-{slug}/.checkpoint-manifest.json
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
Returns `{ ok, rolled_back_to, plans_invalidated, files_deleted, warnings }`.
|
|
497
|
+
|
|
498
|
+
- If `ok` is `true`: display "Rolled back to commit {rolled_back_to}. {plans_invalidated.length} downstream plans invalidated."
|
|
499
|
+
Show any warnings. Continue to next wave or stop based on user preference.
|
|
500
|
+
- If `ok` is `false`: display the error message. Suggest "Use abort instead."
|
|
503
501
|
|
|
504
502
|
**If user selects 'Abort':**
|
|
505
503
|
- Update STATE.md with current progress
|
|
@@ -544,19 +542,21 @@ If `config.ci.gate_enabled` is `true` AND `config.git.branching` is not `none`:
|
|
|
544
542
|
|
|
545
543
|
1. Push current commits: `git push`
|
|
546
544
|
2. Wait 5 seconds for CI to trigger
|
|
547
|
-
3.
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
545
|
+
3. Get the current run ID:
|
|
546
|
+
```bash
|
|
547
|
+
gh run list --branch $(git branch --show-current) --limit 1 --json databaseId -q '.[0].databaseId'
|
|
551
548
|
```
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
549
|
+
4. Poll CI status using CLI:
|
|
550
|
+
```bash
|
|
551
|
+
node ${PLUGIN_ROOT}/scripts/pbr-tools.js ci-poll <run-id> [--timeout <seconds>]
|
|
555
552
|
```
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
553
|
+
Returns `{ status, conclusion, url, next_action, elapsed_seconds }`.
|
|
554
|
+
5. If `next_action` is `"continue"`: proceed to next wave
|
|
555
|
+
6. If `next_action` is `"wait"`: re-run ci-poll after 15 seconds (repeat up to `config.ci.wait_timeout_seconds`)
|
|
556
|
+
7. If `next_action` is `"abort"` or `status` is `"failed"`:
|
|
557
|
+
Show warning box and use AskUserQuestion: Wait / Continue anyway / Abort
|
|
558
|
+
8. If "Continue anyway": log deviation — `DEVIATION: CI gate bypassed for wave {N}`
|
|
559
|
+
9. If "Abort": stop build, update STATE.md
|
|
560
560
|
|
|
561
561
|
#### 6f. Update STATE.md
|
|
562
562
|
|
|
@@ -669,6 +669,8 @@ This ensures that `/pbr:review` after a `--gaps-only` build sees the updated ver
|
|
|
669
669
|
|
|
670
670
|
**8-pre-c. Codebase map incremental update (conditional):**
|
|
671
671
|
|
|
672
|
+
**CRITICAL (no hook): Run codebase map update if conditions are met. Do NOT skip this step.**
|
|
673
|
+
|
|
672
674
|
Only run if ALL of these are true:
|
|
673
675
|
- `.planning/codebase/` directory exists (project was previously scanned with `/pbr:scan`)
|
|
674
676
|
- Build was not aborted
|
|
@@ -779,6 +781,8 @@ Write `.planning/.auto-next` containing the next logical command (e.g., `/pbr:pl
|
|
|
779
781
|
|
|
780
782
|
**8e-ii. Check Pending Todos:**
|
|
781
783
|
|
|
784
|
+
**CRITICAL (no hook): Check pending todos after build. Do NOT skip this step.**
|
|
785
|
+
|
|
782
786
|
After completing the build, check if any pending todos are now satisfied:
|
|
783
787
|
|
|
784
788
|
1. Check if `.planning/todos/pending/` exists and contains files
|
|
@@ -895,3 +899,9 @@ If `git.branching` is `phase` but we're not on the phase branch:
|
|
|
895
899
|
| `.planning/STATE.md` | Updated progress | Steps 6f, 8b |
|
|
896
900
|
| `.planning/.auto-next` | Next command signal (if auto_continue enabled) | Step 8e |
|
|
897
901
|
| Project source files | Actual code | Step 6 (executors) |
|
|
902
|
+
|
|
903
|
+
---
|
|
904
|
+
|
|
905
|
+
## Cleanup
|
|
906
|
+
|
|
907
|
+
Delete `.planning/.active-skill` if it exists. This must happen on all paths (success, partial, and failure) before reporting results.
|
|
@@ -243,61 +243,51 @@ After the researcher completes, check the agent output for a completion marker:
|
|
|
243
243
|
|
|
244
244
|
---
|
|
245
245
|
|
|
246
|
-
### Step 4.5:
|
|
247
|
-
|
|
248
|
-
Before invoking the planner, scan `.planning/seeds/` for seeds whose trigger matches the current phase:
|
|
249
|
-
|
|
250
|
-
1. Glob for `.planning/seeds/*.md`
|
|
251
|
-
2. For each seed file, read its frontmatter and check the `trigger` field
|
|
252
|
-
3. A seed matches if ANY of these are true:
|
|
253
|
-
- `trigger` equals the phase slug (e.g., `trigger: authentication`) — **preferred**
|
|
254
|
-
- `trigger` is a substring of the phase directory name (e.g., `trigger: auth` matches `03-authentication`)
|
|
255
|
-
- `trigger` equals the current phase number as integer (e.g., `trigger: 3`) — backward compatible but NOT recommended for new seeds (breaks with decimal phases like 3.1)
|
|
256
|
-
- `trigger` equals `*` (always matches)
|
|
257
|
-
4. If matching seeds are found, present them to the user:
|
|
258
|
-
```
|
|
259
|
-
Found {N} seeds related to Phase {NN}:
|
|
260
|
-
- {seed_name}: {seed description}
|
|
261
|
-
- {seed_name}: {seed description}
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
Use the yes-no-pick pattern from `skills/shared/gate-prompts.md`:
|
|
265
|
-
question: "Include these {N} seeds in planning?"
|
|
266
|
-
header: "Seeds?"
|
|
267
|
-
options:
|
|
268
|
-
- label: "Yes, all" description: "Include all {N} matching seeds"
|
|
269
|
-
- label: "Let me pick" description: "Choose which seeds to include"
|
|
270
|
-
- label: "No" description: "Proceed without seeds"
|
|
271
|
-
5. If "Yes, all": include all matching seed content in the planner's context
|
|
272
|
-
6. If "Let me pick": present individual seeds for selection
|
|
273
|
-
7. If "No" or "Other": proceed without seeds
|
|
274
|
-
8. If no matching seeds found: proceed silently
|
|
246
|
+
### Step 4.5: Pre-Planner Briefing (delegated)
|
|
275
247
|
|
|
276
|
-
|
|
248
|
+
**CRITICAL (no hook): Run pre-planner briefing before spawning the planner. Do NOT skip this step.**
|
|
249
|
+
|
|
250
|
+
Consolidate seed scanning and deferred idea surfacing into a single lightweight Task():
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
Task({
|
|
254
|
+
subagent_type: "pbr:general",
|
|
255
|
+
model: "haiku",
|
|
256
|
+
prompt: "Pre-planner briefing for Phase {NN} ({phase-slug}).
|
|
257
|
+
|
|
258
|
+
1. SEED SCANNING:
|
|
259
|
+
Run: `node ${PLUGIN_ROOT}/scripts/pbr-tools.js seeds match {phase-slug} {phase-number}`
|
|
260
|
+
If `matched` is non-empty, output a ## Seeds section listing each seed name, description, and content.
|
|
261
|
+
If empty, output: ## Seeds\nNo matching seeds found.
|
|
262
|
+
|
|
263
|
+
2. DEFERRED IDEAS:
|
|
264
|
+
Read `.planning/CONTEXT.md`. If it has a section containing 'deferred' or 'ideas' (case-insensitive),
|
|
265
|
+
extract items that mention Phase {NN} or keywords matching the phase slug.
|
|
266
|
+
If relevant items found, output a ## Deferred Ideas section listing them.
|
|
267
|
+
If none found, output: ## Deferred Ideas\nNo relevant deferred items.
|
|
268
|
+
|
|
269
|
+
Output format: Return both sections as markdown. End with ## BRIEFING COMPLETE."
|
|
270
|
+
})
|
|
271
|
+
```
|
|
277
272
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
- label: "No" description: "Proceed without deferred ideas"
|
|
297
|
-
5. If "Yes": append the relevant deferred items to the context bundle for the planner prompt (add them to the `<project_context>` block under a `Deferred ideas to consider:` heading)
|
|
298
|
-
6. If "No" or no relevant items found: proceed without changes
|
|
299
|
-
|
|
300
|
-
This is a lightweight relevance filter — do NOT invoke an agent for this. Just match keywords from the deferred items against the phase goal and requirement text.
|
|
273
|
+
After the Task() completes:
|
|
274
|
+
- If `## Seeds` section contains matches: present them to the user via the yes-no-pick pattern from `skills/shared/gate-prompts.md`:
|
|
275
|
+
question: "Include these {N} seeds in planning?"
|
|
276
|
+
header: "Seeds?"
|
|
277
|
+
options:
|
|
278
|
+
- label: "Yes, all" description: "Include all {N} matching seeds"
|
|
279
|
+
- label: "Let me pick" description: "Choose which seeds to include"
|
|
280
|
+
- label: "No" description: "Proceed without seeds"
|
|
281
|
+
- If "Yes, all": include seed content in planner context
|
|
282
|
+
- If "Let me pick": present individual seeds for selection
|
|
283
|
+
- If "No": proceed without seeds
|
|
284
|
+
|
|
285
|
+
- If `## Deferred Ideas` section has items: present via the yes-no pattern from `skills/shared/gate-prompts.md`:
|
|
286
|
+
question: "Include these deferred ideas in planning context?"
|
|
287
|
+
- If "Yes": append to planner context under `Deferred ideas to consider:`
|
|
288
|
+
- If "No": proceed without changes
|
|
289
|
+
|
|
290
|
+
- If both sections are empty: proceed silently to Step 5 (no AskUserQuestion needed)
|
|
301
291
|
|
|
302
292
|
---
|
|
303
293
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pbr",
|
|
3
3
|
"displayName": "Plan-Build-Run",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.51.0",
|
|
5
5
|
"description": "Plan-Build-Run — Structured development workflow for Cursor. Solves context rot through disciplined subagent delegation, structured planning, atomic execution, and goal-backward verification.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "SienkLogic",
|
|
@@ -488,19 +488,17 @@ Use AskUserQuestion (pattern: multi-option-failure from `skills/shared/gate-prom
|
|
|
488
488
|
- If yes: warn user that those plans will also need to be skipped or adjusted
|
|
489
489
|
|
|
490
490
|
**If user selects 'Rollback':**
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
- Continue to next wave or stop based on user preference
|
|
503
|
-
- If no `last_good_commit`: warn "No rollback point available (this was the first plan). Use abort instead."
|
|
491
|
+
Run the rollback CLI:
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
node ${PLUGIN_ROOT}/scripts/pbr-tools.js rollback .planning/phases/{NN}-{slug}/.checkpoint-manifest.json
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
Returns `{ ok, rolled_back_to, plans_invalidated, files_deleted, warnings }`.
|
|
498
|
+
|
|
499
|
+
- If `ok` is `true`: display "Rolled back to commit {rolled_back_to}. {plans_invalidated.length} downstream plans invalidated."
|
|
500
|
+
Show any warnings. Continue to next wave or stop based on user preference.
|
|
501
|
+
- If `ok` is `false`: display the error message. Suggest "Use abort instead."
|
|
504
502
|
|
|
505
503
|
**If user selects 'Abort':**
|
|
506
504
|
- Update STATE.md with current progress
|
|
@@ -545,18 +543,20 @@ If `config.ci.gate_enabled` is `true` AND `config.git.branching` is not `none`:
|
|
|
545
543
|
|
|
546
544
|
1. Push current commits: `git push`
|
|
547
545
|
2. Wait 5 seconds for CI to trigger
|
|
548
|
-
3.
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
546
|
+
3. Get the current run ID:
|
|
547
|
+
```bash
|
|
548
|
+
gh run list --branch $(git branch --show-current) --limit 1 --json databaseId -q '.[0].databaseId'
|
|
552
549
|
```
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
550
|
+
4. Poll CI status using CLI:
|
|
551
|
+
```bash
|
|
552
|
+
node ${PLUGIN_ROOT}/scripts/pbr-tools.js ci-poll <run-id> [--timeout <seconds>]
|
|
556
553
|
```
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
554
|
+
Returns `{ status, conclusion, url, next_action, elapsed_seconds }`.
|
|
555
|
+
5. If `next_action` is `"continue"`: proceed to next wave
|
|
556
|
+
6. If `next_action` is `"wait"`: re-run ci-poll after 15 seconds (repeat up to `config.ci.wait_timeout_seconds`)
|
|
557
|
+
7. If `next_action` is `"abort"` or `status` is `"failed"`:
|
|
558
|
+
Show warning box and use AskUserQuestion: Wait / Continue anyway / Abort
|
|
559
|
+
8. If "Continue anyway": log deviation — `DEVIATION: CI gate bypassed for wave {N}`
|
|
560
560
|
8. If "Abort": stop build, update STATE.md
|
|
561
561
|
|
|
562
562
|
#### 6f. Update STATE.md
|
|
@@ -670,6 +670,8 @@ This ensures that `/pbr:review` after a `--gaps-only` build sees the updated ver
|
|
|
670
670
|
|
|
671
671
|
**8-pre-c. Codebase map incremental update (conditional):**
|
|
672
672
|
|
|
673
|
+
**CRITICAL (no hook): Run codebase map update if conditions are met. Do NOT skip this step.**
|
|
674
|
+
|
|
673
675
|
Only run if ALL of these are true:
|
|
674
676
|
- `.planning/codebase/` directory exists (project was previously scanned with `/pbr:scan`)
|
|
675
677
|
- Build was not aborted
|
|
@@ -780,6 +782,8 @@ Write `.planning/.auto-next` containing the next logical command (e.g., `/pbr:pl
|
|
|
780
782
|
|
|
781
783
|
**8e-ii. Check Pending Todos:**
|
|
782
784
|
|
|
785
|
+
**CRITICAL (no hook): Check pending todos after build. Do NOT skip this step.**
|
|
786
|
+
|
|
783
787
|
After completing the build, check if any pending todos are now satisfied:
|
|
784
788
|
|
|
785
789
|
1. Check if `.planning/todos/pending/` exists and contains files
|
|
@@ -894,3 +898,9 @@ If `git.branching` is `phase` but we're not on the phase branch:
|
|
|
894
898
|
| `.planning/STATE.md` | Updated progress | Steps 6f, 8b |
|
|
895
899
|
| `.planning/.auto-next` | Next command signal (if auto_continue enabled) | Step 8e |
|
|
896
900
|
| Project source files | Actual code | Step 6 (executors) |
|
|
901
|
+
|
|
902
|
+
---
|
|
903
|
+
|
|
904
|
+
## Cleanup
|
|
905
|
+
|
|
906
|
+
Delete `.planning/.active-skill` if it exists. This must happen on all paths (success, partial, and failure) before reporting results.
|
|
@@ -244,61 +244,51 @@ After the researcher completes, check the agent output for a completion marker:
|
|
|
244
244
|
|
|
245
245
|
---
|
|
246
246
|
|
|
247
|
-
### Step 4.5:
|
|
248
|
-
|
|
249
|
-
Before invoking the planner, scan `.planning/seeds/` for seeds whose trigger matches the current phase:
|
|
250
|
-
|
|
251
|
-
1. Glob for `.planning/seeds/*.md`
|
|
252
|
-
2. For each seed file, read its frontmatter and check the `trigger` field
|
|
253
|
-
3. A seed matches if ANY of these are true:
|
|
254
|
-
- `trigger` equals the phase slug (e.g., `trigger: authentication`) — **preferred**
|
|
255
|
-
- `trigger` is a substring of the phase directory name (e.g., `trigger: auth` matches `03-authentication`)
|
|
256
|
-
- `trigger` equals the current phase number as integer (e.g., `trigger: 3`) — backward compatible but NOT recommended for new seeds (breaks with decimal phases like 3.1)
|
|
257
|
-
- `trigger` equals `*` (always matches)
|
|
258
|
-
4. If matching seeds are found, present them to the user:
|
|
259
|
-
```
|
|
260
|
-
Found {N} seeds related to Phase {NN}:
|
|
261
|
-
- {seed_name}: {seed description}
|
|
262
|
-
- {seed_name}: {seed description}
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
Use the yes-no-pick pattern from `skills/shared/gate-prompts.md`:
|
|
266
|
-
question: "Include these {N} seeds in planning?"
|
|
267
|
-
header: "Seeds?"
|
|
268
|
-
options:
|
|
269
|
-
- label: "Yes, all" description: "Include all {N} matching seeds"
|
|
270
|
-
- label: "Let me pick" description: "Choose which seeds to include"
|
|
271
|
-
- label: "No" description: "Proceed without seeds"
|
|
272
|
-
5. If "Yes, all": include all matching seed content in the planner's context
|
|
273
|
-
6. If "Let me pick": present individual seeds for selection
|
|
274
|
-
7. If "No" or "Other": proceed without seeds
|
|
275
|
-
8. If no matching seeds found: proceed silently
|
|
247
|
+
### Step 4.5: Pre-Planner Briefing (delegated)
|
|
276
248
|
|
|
277
|
-
|
|
249
|
+
**CRITICAL (no hook): Run pre-planner briefing before spawning the planner. Do NOT skip this step.**
|
|
250
|
+
|
|
251
|
+
Consolidate seed scanning and deferred idea surfacing into a single lightweight Task():
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
Task({
|
|
255
|
+
subagent_type: "pbr:general",
|
|
256
|
+
model: "haiku",
|
|
257
|
+
prompt: "Pre-planner briefing for Phase {NN} ({phase-slug}).
|
|
258
|
+
|
|
259
|
+
1. SEED SCANNING:
|
|
260
|
+
Run: `node ${PLUGIN_ROOT}/scripts/pbr-tools.js seeds match {phase-slug} {phase-number}`
|
|
261
|
+
If `matched` is non-empty, output a ## Seeds section listing each seed name, description, and content.
|
|
262
|
+
If empty, output: ## Seeds\nNo matching seeds found.
|
|
263
|
+
|
|
264
|
+
2. DEFERRED IDEAS:
|
|
265
|
+
Read `.planning/CONTEXT.md`. If it has a section containing 'deferred' or 'ideas' (case-insensitive),
|
|
266
|
+
extract items that mention Phase {NN} or keywords matching the phase slug.
|
|
267
|
+
If relevant items found, output a ## Deferred Ideas section listing them.
|
|
268
|
+
If none found, output: ## Deferred Ideas\nNo relevant deferred items.
|
|
269
|
+
|
|
270
|
+
Output format: Return both sections as markdown. End with ## BRIEFING COMPLETE."
|
|
271
|
+
})
|
|
272
|
+
```
|
|
278
273
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
- label: "No" description: "Proceed without deferred ideas"
|
|
298
|
-
5. If "Yes": append the relevant deferred items to the context bundle for the planner prompt (add them to the `<project_context>` block under a `Deferred ideas to consider:` heading)
|
|
299
|
-
6. If "No" or no relevant items found: proceed without changes
|
|
300
|
-
|
|
301
|
-
This is a lightweight relevance filter — do NOT invoke an agent for this. Just match keywords from the deferred items against the phase goal and requirement text.
|
|
274
|
+
After the Task() completes:
|
|
275
|
+
- If `## Seeds` section contains matches: present them to the user via the yes-no-pick pattern from `skills/shared/gate-prompts.md`:
|
|
276
|
+
question: "Include these {N} seeds in planning?"
|
|
277
|
+
header: "Seeds?"
|
|
278
|
+
options:
|
|
279
|
+
- label: "Yes, all" description: "Include all {N} matching seeds"
|
|
280
|
+
- label: "Let me pick" description: "Choose which seeds to include"
|
|
281
|
+
- label: "No" description: "Proceed without seeds"
|
|
282
|
+
- If "Yes, all": include seed content in planner context
|
|
283
|
+
- If "Let me pick": present individual seeds for selection
|
|
284
|
+
- If "No": proceed without seeds
|
|
285
|
+
|
|
286
|
+
- If `## Deferred Ideas` section has items: present via the yes-no pattern from `skills/shared/gate-prompts.md`:
|
|
287
|
+
question: "Include these deferred ideas in planning context?"
|
|
288
|
+
- If "Yes": append to planner context under `Deferred ideas to consider:`
|
|
289
|
+
- If "No": proceed without changes
|
|
290
|
+
|
|
291
|
+
- If both sections are empty: proceed silently to Step 5 (no AskUserQuestion needed)
|
|
302
292
|
|
|
303
293
|
---
|
|
304
294
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pbr",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.51.0",
|
|
4
4
|
"description": "Plan-Build-Run — Structured development workflow for Claude Code. Solves context rot through disciplined subagent delegation, structured planning, atomic execution, and goal-backward verification.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "SienkLogic",
|