bigpowers 2.6.0 → 2.7.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/.pi/package.json +1 -1
- package/.pi/prompts/align-grid.md +2 -0
- package/.pi/prompts/run-planning.md +59 -6
- package/.pi/prompts/scope-work.md +36 -6
- package/.pi/prompts/search-skills.md +54 -6
- package/.pi/prompts/slice-tasks.md +37 -5
- package/.pi/skills/align-grid/SKILL.md +2 -0
- package/.pi/skills/run-planning/SKILL.md +59 -6
- package/.pi/skills/scope-work/SKILL.md +36 -6
- package/.pi/skills/search-skills/SKILL.md +54 -6
- package/.pi/skills/slice-tasks/SKILL.md +37 -5
- package/CHANGELOG.md +7 -0
- package/SKILL-INDEX.md +97 -103
- package/align-grid/SKILL.md +2 -0
- package/package.json +1 -1
- package/run-planning/SKILL.md +59 -6
- package/scope-work/SKILL.md +36 -6
- package/scripts/generate-skill-index.sh +218 -0
- package/scripts/regenerate-lockfile.sh +41 -0
- package/scripts/sync-skills.sh +12 -0
- package/search-skills/SKILL.md +54 -6
- package/skills-lock.json +234 -76
- package/slice-tasks/SKILL.md +37 -5
package/.pi/package.json
CHANGED
|
@@ -7,6 +7,8 @@ description: "Build editorial/magazine/report webpages on a GENUINE Müller-Broc
|
|
|
7
7
|
|
|
8
8
|
Josef Müller-Brockmann (1914–1996), Zurich; *Grid Systems in Graphic Design* (1981) is the corpus. The grid is treated as an ethic, not decoration: **"The grid system is an aid, not a guarantee. It permits a number of possible uses and each designer can look for a solution appropriate to his personal style. But one must learn how to use the grid; it is an art that requires practice."** This skill encodes that discipline AND — the part most attempts get wrong — the front-end engineering to make the grid genuinely load-bearing on the web, plus a harness that PROVES it.
|
|
9
9
|
|
|
10
|
+
> **HARD GATE** — Do NOT ship a grid page without running `verify_grid.js` first. A visually plausible layout is not evidence of grid adherence — the harness is. Zero failing assertions is the only passing bar.
|
|
11
|
+
|
|
10
12
|
> Two real review notes this skill exists to prevent:
|
|
11
13
|
> 1. *"the grid is just slapped on top and misaligned"* → the overlay wasn't in the same content box as the content (see §2.2).
|
|
12
14
|
> 2. *"the H in the headline is off the grid"* → the headline's BOX was on the grid but its INK wasn't; large glyphs carry a side-bearing (see §2.6). **Box-on-grid ≠ ink-on-grid.**
|
|
@@ -4,22 +4,75 @@ description: "DISCOVER-PHASE ADVANCER — Drive the discover-phase checklist (sp
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
# Run Planning
|
|
7
|
-
> **HARD GATE** — Before running planning skills, confirm the epic capsule exists and the active story is clear. Planning without a target is noise.
|
|
8
7
|
|
|
8
|
+
> **HARD GATE** — Before running planning skills, confirm the epic capsule exists and the active story is clear. Planning without a target is noise.
|
|
9
|
+
>
|
|
9
10
|
> **Role:** DISCOVER-PHASE ADVANCER — orchestrates the discover-phase sequence; hands off to the scope-work → slice-tasks → plan-work spine for implementation planning.
|
|
10
11
|
|
|
11
|
-
Updates `specs/planning-status.yaml` as discover-phase skills complete.
|
|
12
|
+
Updates `specs/planning-status.yaml` as discover-phase skills complete. This is NOT a duplicate of plan-work — it orchestrates the *pre-coding* discovery phase only (Discover phase in the 6-phase PMBOK lifecycle), handing off to the planning spine for implementation detail.
|
|
13
|
+
|
|
14
|
+
## When to use
|
|
15
|
+
|
|
16
|
+
- Starting a brand-new feature or initiative with no prior planning artifacts
|
|
17
|
+
- Returning to a stalled initiative and needing to resume the discovery workflow
|
|
18
|
+
- After `orchestrate-project` hands off to the Discover phase
|
|
19
|
+
- When a new epic emerges from `change-request` and needs to go through full discovery
|
|
20
|
+
|
|
21
|
+
## Pre-flight
|
|
22
|
+
|
|
23
|
+
- [ ] Does `specs/planning-status.yaml` exist? If not, create it with the default workflow keys.
|
|
24
|
+
- [ ] Does `specs/state.yaml` have `active_flow: planning`? Set it if not already.
|
|
25
|
+
- [ ] Is the epic identified in `release-plan.yaml`? The epic must exist before discovery begins.
|
|
12
26
|
|
|
13
27
|
## Workflows (default keys)
|
|
14
28
|
|
|
15
29
|
- `survey-context` → `scope-work` → `research-first` → `elaborate-spec` (optional) → `plan-release` → `slice-tasks`
|
|
16
30
|
|
|
31
|
+
Each key maps to a skill invocation. Optional keys can be skipped; required keys must complete before the phase advances.
|
|
32
|
+
|
|
17
33
|
## Process
|
|
18
34
|
|
|
19
|
-
1. Read `specs/planning-status.yaml` and `specs/state.yaml`.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
35
|
+
1. **Read state** — Read `specs/planning-status.yaml` and `specs/state.yaml`. Understand where discovery stands: which workflow keys are `done`, which are `pending`, and which are `optional` (can be skipped).
|
|
36
|
+
|
|
37
|
+
2. **Find next step** — Find the first workflow key with `status: pending`. If the key is `optional`, check if the user wants to run it. If not, mark it `skipped`.
|
|
38
|
+
|
|
39
|
+
3. **Invoke the matching skill** — Run the skill that matches the workflow key:
|
|
40
|
+
- `survey-context` — where are we?
|
|
41
|
+
- `scope-work` — what's in and out?
|
|
42
|
+
- `research-first` — what already exists?
|
|
43
|
+
- `elaborate-spec` — refine the idea (optional)
|
|
44
|
+
- `plan-release` — sequence epics by WSJF
|
|
45
|
+
- `slice-tasks` — cut vertical slices
|
|
46
|
+
|
|
47
|
+
4. **Update status** — On successful completion, set `status: done` for that workflow key in `planning-status.yaml`.
|
|
48
|
+
|
|
49
|
+
5. **Advance** — Set `state.yaml` `active_flow: planning` while in this chain. When all required keys are done, set `handoff.next_skill` to `plan-work`.
|
|
50
|
+
|
|
51
|
+
## Workflow Keys Schema
|
|
52
|
+
|
|
53
|
+
In `specs/planning-status.yaml`:
|
|
54
|
+
```yaml
|
|
55
|
+
workflows:
|
|
56
|
+
survey-context:
|
|
57
|
+
required: true
|
|
58
|
+
status: done
|
|
59
|
+
scope-work:
|
|
60
|
+
required: true
|
|
61
|
+
status: pending
|
|
62
|
+
research-first:
|
|
63
|
+
required: false
|
|
64
|
+
status: optional
|
|
65
|
+
note: "Skip if no external dependencies"
|
|
66
|
+
elaborate-spec:
|
|
67
|
+
required: false
|
|
68
|
+
status: optional
|
|
69
|
+
plan-release:
|
|
70
|
+
required: true
|
|
71
|
+
status: pending
|
|
72
|
+
slice-tasks:
|
|
73
|
+
required: true
|
|
74
|
+
status: pending
|
|
75
|
+
```
|
|
23
76
|
|
|
24
77
|
## Verify
|
|
25
78
|
|
|
@@ -7,16 +7,46 @@ description: "PLANNING SPINE STEP 1 of 3 — Scope the work: define what is in a
|
|
|
7
7
|
|
|
8
8
|
> **Spine position:** Step 1 — scope-work → slice-tasks → plan-work.
|
|
9
9
|
|
|
10
|
-
Turn the current conversation into a bounded PRD at `specs/product/SCOPE_LATEST.yaml`.
|
|
10
|
+
Turn the current conversation into a bounded PRD at `specs/product/SCOPE_LATEST.yaml`. Without a scope boundary, implementation drifts — stories expand, estimates blow up, and "done" becomes undefined.
|
|
11
|
+
|
|
12
|
+
## Pre-flight
|
|
13
|
+
|
|
14
|
+
- [ ] Do you have a clear user need or problem statement? If not, run `elaborate-spec` first.
|
|
15
|
+
- [ ] Does `specs/product/VISION_LATEST.yaml` exist? If yes, read it for north-star alignment.
|
|
16
|
+
- [ ] Is there an existing `SCOPE_LATEST.yaml`? If yes, you're refining, not creating from scratch.
|
|
11
17
|
|
|
12
18
|
## Process
|
|
13
19
|
|
|
14
|
-
1. Read existing `specs/` artifacts (`release-plan.yaml`, `plans/TECH_STACK_LATEST.md`, `requirements/VISION_LATEST.yaml` if any).
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
1. **Gather context** — Read existing `specs/` artifacts (`release-plan.yaml`, `plans/TECH_STACK_LATEST.md`, `requirements/VISION_LATEST.yaml` if any). Understand what the project is building and why.
|
|
21
|
+
|
|
22
|
+
2. **Interview (if needed)** — Clarify: What is the goal? Who are the users? What is definitely in scope? What is explicitly out of scope? What constraints exist (time, budget, tech)? How will success be measured?
|
|
23
|
+
|
|
24
|
+
3. **Write `specs/product/SCOPE_LATEST.yaml`** with these fields:
|
|
25
|
+
- `core_value` — one-sentence value proposition
|
|
26
|
+
- `summary` — 2-3 paragraph scope overview
|
|
27
|
+
- `in_scope[]` — list of what this initiative covers (each maps to an epic/story)
|
|
28
|
+
- `out_of_scope[]` — explicit exclusions (prevents scope creep)
|
|
29
|
+
- `constraints` — tech, time, resource boundaries
|
|
30
|
+
- `success_criteria` — observable outcomes that prove the scope is delivered
|
|
31
|
+
- `references` — links to related specs, ADRs, or documents
|
|
32
|
+
|
|
33
|
+
4. **Lightweight trade-off analysis** — For each `out_of_scope` item, note *why* it's excluded (deferred, not valuable, too risky, depends on external factor). This protects against "what about X?" questions later.
|
|
34
|
+
|
|
35
|
+
5. **Run `research-first`** if external dependencies are proposed — verify the dependency exists, is maintained, and fits the scope before committing to it.
|
|
36
|
+
|
|
37
|
+
> **HARD GATE** — Every `in_scope` item must map to a future epic/story ID or explicit deferred note in `out_of_scope`. If an item can't be mapped, the scope is too vague — refine before proceeding.
|
|
38
|
+
|
|
39
|
+
> **HARD GATE** — Do NOT include implementation details in SCOPE_LATEST.yaml. Scope is *what* and *why*, not *how*. Implementation detail belongs in epic capsules and slice-tasks.
|
|
40
|
+
|
|
41
|
+
## Common Anti-Patterns
|
|
42
|
+
|
|
43
|
+
- **"Everything is in scope"** — If nothing is out of scope, you haven't defined a scope. You've described a universe. Cut aggressively.
|
|
44
|
+
- **"We'll figure it out later"** — Ambiguity in scope propagates to every downstream decision. Resolve now or explicitly defer in writing.
|
|
45
|
+
- **Scope as architecture** — Saying "we need a PostgreSQL database" is architecture, not scope. Scope says "we need to store user profiles and transaction history."
|
|
46
|
+
|
|
47
|
+
## Output
|
|
18
48
|
|
|
19
|
-
|
|
49
|
+
`specs/product/SCOPE_LATEST.yaml` — the bounded PRD. Subsequent skills (`slice-tasks`, `plan-work`) reference this as the source of truth for what to build.
|
|
20
50
|
|
|
21
51
|
## Verify
|
|
22
52
|
|
|
@@ -4,17 +4,65 @@ description: Find the right bigpowers skill from natural-language intent using a
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
# Search Skills
|
|
7
|
-
> **HARD GATE** — **HARD GATE** — Search results must be ranked by relevance. Do NOT return all matches without prioritization. Use skill metadata (phase, purpose, frequency) to rank.
|
|
8
7
|
|
|
8
|
+
> **HARD GATE** — Search results must be ranked by relevance. Do NOT return all matches without prioritization. Use skill metadata (phase, purpose, frequency) to rank.
|
|
9
|
+
>
|
|
10
|
+
> **HARD GATE** — Do NOT use external embedding APIs or AI-based semantic search. This is a lexical-only index (ADR: zero external dependency).
|
|
9
11
|
|
|
10
|
-
Lexical search only — no embedding service (ADR: zero external dependency).
|
|
12
|
+
Lexical search only — no embedding service (ADR: zero external dependency). The index is a flat markdown file (`specs/SKILL-SEARCH-INDEX.md`) built from every SKILL.md's YAML frontmatter — name, description, and key phrases. No vector DB, no API calls, no network dependency.
|
|
13
|
+
|
|
14
|
+
## When to use
|
|
15
|
+
|
|
16
|
+
- You're unsure which skill to invoke for a user's request
|
|
17
|
+
- At the start of `research-first` to find pre-existing skills that might solve the problem
|
|
18
|
+
- When a user asks "is there a skill for X?"
|
|
19
|
+
- Before calling a skill by name, to confirm it's the right one
|
|
20
|
+
|
|
21
|
+
## Pre-flight
|
|
22
|
+
|
|
23
|
+
- [ ] Does `specs/SKILL-SEARCH-INDEX.md` exist? If not, run `bash scripts/build-skill-index.sh`.
|
|
24
|
+
- [ ] Is the index fresh? Check its timestamp — if > 24 hours old or after any SKILL.md change, regenerate.
|
|
11
25
|
|
|
12
26
|
## Process
|
|
13
27
|
|
|
14
|
-
1. Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX.md`
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
28
|
+
1. **Refresh index if stale** — Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX.md` doesn't exist or was modified before the last SKILL.md change.
|
|
29
|
+
|
|
30
|
+
2. **Search the index** — Use ripgrep on the lexical index:
|
|
31
|
+
```
|
|
32
|
+
rg -i "<keywords>" specs/SKILL-SEARCH-INDEX.md
|
|
33
|
+
```
|
|
34
|
+
The index contains each skill's name, description, phase, and key use-case phrases, so natural language queries work well even without embeddings.
|
|
35
|
+
|
|
36
|
+
3. **Rank results** — Read the top 3 matches. Evaluate by:
|
|
37
|
+
- **Exactness** — Does the description literally match the user's intent?
|
|
38
|
+
- **Phase fit** — Is the skill designed for the current lifecycle phase?
|
|
39
|
+
- **Trigger phrases** — Does the skill's "Use when" section match the situation?
|
|
40
|
+
|
|
41
|
+
4. **Recommend one skill** — Select the single best-matching skill. Provide:
|
|
42
|
+
- The skill name
|
|
43
|
+
- Why it's the best match (citing the description or trigger phrase)
|
|
44
|
+
- What it produces (artifact, dialogue, or state change)
|
|
45
|
+
|
|
46
|
+
5. **Invoke** — Call the skill directly or through the orchestrator. If no match found, suggest the closest phase-appropriate skill or `using-bigpowers` as a general entry point.
|
|
47
|
+
|
|
48
|
+
## Index Format
|
|
49
|
+
|
|
50
|
+
`specs/SKILL-SEARCH-INDEX.md` contains one section per skill:
|
|
51
|
+
```markdown
|
|
52
|
+
## <skill-name>
|
|
53
|
+
- **Description:** <from frontmatter>
|
|
54
|
+
- **Phase:** <lifecycle phase>
|
|
55
|
+
- **Triggers:** <key phrases from description>
|
|
56
|
+
- **Keywords:** <extracted terms>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Why Not Semantic Search?
|
|
60
|
+
|
|
61
|
+
- Zero network dependency — works fully offline
|
|
62
|
+
- Zero cost — no API keys, no usage limits
|
|
63
|
+
- Instant — ripgrep on a local file is sub-second
|
|
64
|
+
- Deterministic — same query always returns same results
|
|
65
|
+
- Auditable — you can read the full index
|
|
18
66
|
|
|
19
67
|
## Verify
|
|
20
68
|
|
|
@@ -9,14 +9,46 @@ description: "PLANNING SPINE STEP 2 of 3 — Slice the work: break a scoped PRD
|
|
|
9
9
|
|
|
10
10
|
Produce **epic capsule story tasks** in `specs/epics/eNN-slug/` — vertical slices, each independently deliverable and testable. Output: decoupled `eNNsYY-tasks.yaml` files with runnable verify commands. Legacy `specs/epics/ (see slice-tasks)` is deprecated; use capsule dirs + `execution-status.yaml`.
|
|
11
11
|
|
|
12
|
+
## Pre-flight
|
|
13
|
+
|
|
14
|
+
- [ ] Does `specs/product/SCOPE_LATEST.yaml` exist? If not, run `scope-work` first — you can't slice what you haven't bounded.
|
|
15
|
+
- [ ] Is the `release-plan.yaml` populated with the epics you're slicing? Epic IDs (e01, e02…) should exist before you create stories.
|
|
16
|
+
- [ ] Do you understand the difference between a horizontal layer and a vertical slice? (See anti-patterns below.)
|
|
17
|
+
|
|
12
18
|
## Process
|
|
13
19
|
|
|
14
|
-
1. Read `specs/product/SCOPE_LATEST.yaml` and/or `specs/release-plan.yaml`.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
1. **Read context** — Read `specs/product/SCOPE_LATEST.yaml` and/or `specs/release-plan.yaml`. Understand what the epic delivers end-to-end.
|
|
21
|
+
|
|
22
|
+
2. **Cut tracer-bullet slices** — Identify the thinnest possible vertical path through the stack that delivers user value. Start with this slice; it will catch integration issues first. For example:
|
|
23
|
+
- A search feature: first slice is "user types query → API returns results" (no filters, no pagination, no ranking — just the plumbing working end-to-end).
|
|
24
|
+
- A checkout flow: first slice is "user clicks buy → order created" (no payment, no inventory, no email).
|
|
25
|
+
|
|
26
|
+
3. **Assign BCPs** — For each story, estimate Business Complexity Points (1–13). A 1-BCP story is a trivial change (one file, one concept). A 13-BCP story is a major feature across multiple modules. If a story exceeds 8 BCPs, consider splitting it.
|
|
27
|
+
|
|
28
|
+
4. **Each story** writes:
|
|
29
|
+
- `eNNsYY-tasks.yaml` with `story_id`, `title`, `status`, `bcps`, `tasks[]` (each with `id`, `description`, `verify`, `status`)
|
|
30
|
+
- Story spec `.md` files are written by `plan-work` and follow countable-story-format.md
|
|
31
|
+
- The epic capsule manifest (`epic.yaml`) is updated to list the story ID and BCPs
|
|
32
|
+
|
|
33
|
+
5. **Order by WSJF** in `release-plan.yaml` epic list — highest WSJF first. Weight-shortest-job-first ensures the highest value arrives earliest.
|
|
34
|
+
|
|
35
|
+
6. **Validate slices** — Every slice must answer: "If this story ships, does a user get new value?" If the answer is "no, they need a later story too", the slice is too horizontal — cut vertically deeper.
|
|
36
|
+
|
|
37
|
+
> **HARD GATE** — No horizontal-only slices ("add all models") without a vertical path that proves integration. Every story must be independently demonstrable, even if it only handles the happy path.
|
|
38
|
+
|
|
39
|
+
> **HARD GATE** — Each task's `verify:` field must contain a runnable command (not "manually check" or "review visually"). If verification requires manual steps, prefix with `verify-script:` and write the steps in the story file.
|
|
40
|
+
|
|
41
|
+
## Anti-Patterns
|
|
42
|
+
|
|
43
|
+
- **Layer cakes** — "Week 1: all models. Week 2: all controllers. Week 3: all views." This hides integration risk until the end. Every story must cut through all layers.
|
|
44
|
+
- **Too-small slices** — If a slice takes < 30 minutes to implement, it's probably noise. Combine with adjacent slices.
|
|
45
|
+
- **Too-large slices** — If a slice takes > 3 days, it's an epic, not a story. Split further.
|
|
46
|
+
|
|
47
|
+
## Output
|
|
18
48
|
|
|
19
|
-
|
|
49
|
+
- `specs/epics/eNN-slug/eNNsYY-tasks.yaml` — per-story task breakdown with verify commands
|
|
50
|
+
- `specs/epics/eNN-slug/epic.yaml` — updated with story list and BCPs
|
|
51
|
+
- `specs/release-plan.yaml` — updated WSJF ordering (if needed)
|
|
20
52
|
|
|
21
53
|
## Verify
|
|
22
54
|
|
|
@@ -9,6 +9,8 @@ model: sonnet
|
|
|
9
9
|
|
|
10
10
|
Josef Müller-Brockmann (1914–1996), Zurich; *Grid Systems in Graphic Design* (1981) is the corpus. The grid is treated as an ethic, not decoration: **"The grid system is an aid, not a guarantee. It permits a number of possible uses and each designer can look for a solution appropriate to his personal style. But one must learn how to use the grid; it is an art that requires practice."** This skill encodes that discipline AND — the part most attempts get wrong — the front-end engineering to make the grid genuinely load-bearing on the web, plus a harness that PROVES it.
|
|
11
11
|
|
|
12
|
+
> **HARD GATE** — Do NOT ship a grid page without running `verify_grid.js` first. A visually plausible layout is not evidence of grid adherence — the harness is. Zero failing assertions is the only passing bar.
|
|
13
|
+
|
|
12
14
|
> Two real review notes this skill exists to prevent:
|
|
13
15
|
> 1. *"the grid is just slapped on top and misaligned"* → the overlay wasn't in the same content box as the content (see §2.2).
|
|
14
16
|
> 2. *"the H in the headline is off the grid"* → the headline's BOX was on the grid but its INK wasn't; large glyphs carry a side-bearing (see §2.6). **Box-on-grid ≠ ink-on-grid.**
|
|
@@ -6,22 +6,75 @@ model: sonnet
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
# Run Planning
|
|
9
|
-
> **HARD GATE** — Before running planning skills, confirm the epic capsule exists and the active story is clear. Planning without a target is noise.
|
|
10
9
|
|
|
10
|
+
> **HARD GATE** — Before running planning skills, confirm the epic capsule exists and the active story is clear. Planning without a target is noise.
|
|
11
|
+
>
|
|
11
12
|
> **Role:** DISCOVER-PHASE ADVANCER — orchestrates the discover-phase sequence; hands off to the scope-work → slice-tasks → plan-work spine for implementation planning.
|
|
12
13
|
|
|
13
|
-
Updates `specs/planning-status.yaml` as discover-phase skills complete.
|
|
14
|
+
Updates `specs/planning-status.yaml` as discover-phase skills complete. This is NOT a duplicate of plan-work — it orchestrates the *pre-coding* discovery phase only (Discover phase in the 6-phase PMBOK lifecycle), handing off to the planning spine for implementation detail.
|
|
15
|
+
|
|
16
|
+
## When to use
|
|
17
|
+
|
|
18
|
+
- Starting a brand-new feature or initiative with no prior planning artifacts
|
|
19
|
+
- Returning to a stalled initiative and needing to resume the discovery workflow
|
|
20
|
+
- After `orchestrate-project` hands off to the Discover phase
|
|
21
|
+
- When a new epic emerges from `change-request` and needs to go through full discovery
|
|
22
|
+
|
|
23
|
+
## Pre-flight
|
|
24
|
+
|
|
25
|
+
- [ ] Does `specs/planning-status.yaml` exist? If not, create it with the default workflow keys.
|
|
26
|
+
- [ ] Does `specs/state.yaml` have `active_flow: planning`? Set it if not already.
|
|
27
|
+
- [ ] Is the epic identified in `release-plan.yaml`? The epic must exist before discovery begins.
|
|
14
28
|
|
|
15
29
|
## Workflows (default keys)
|
|
16
30
|
|
|
17
31
|
- `survey-context` → `scope-work` → `research-first` → `elaborate-spec` (optional) → `plan-release` → `slice-tasks`
|
|
18
32
|
|
|
33
|
+
Each key maps to a skill invocation. Optional keys can be skipped; required keys must complete before the phase advances.
|
|
34
|
+
|
|
19
35
|
## Process
|
|
20
36
|
|
|
21
|
-
1. Read `specs/planning-status.yaml` and `specs/state.yaml`.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
37
|
+
1. **Read state** — Read `specs/planning-status.yaml` and `specs/state.yaml`. Understand where discovery stands: which workflow keys are `done`, which are `pending`, and which are `optional` (can be skipped).
|
|
38
|
+
|
|
39
|
+
2. **Find next step** — Find the first workflow key with `status: pending`. If the key is `optional`, check if the user wants to run it. If not, mark it `skipped`.
|
|
40
|
+
|
|
41
|
+
3. **Invoke the matching skill** — Run the skill that matches the workflow key:
|
|
42
|
+
- `survey-context` — where are we?
|
|
43
|
+
- `scope-work` — what's in and out?
|
|
44
|
+
- `research-first` — what already exists?
|
|
45
|
+
- `elaborate-spec` — refine the idea (optional)
|
|
46
|
+
- `plan-release` — sequence epics by WSJF
|
|
47
|
+
- `slice-tasks` — cut vertical slices
|
|
48
|
+
|
|
49
|
+
4. **Update status** — On successful completion, set `status: done` for that workflow key in `planning-status.yaml`.
|
|
50
|
+
|
|
51
|
+
5. **Advance** — Set `state.yaml` `active_flow: planning` while in this chain. When all required keys are done, set `handoff.next_skill` to `plan-work`.
|
|
52
|
+
|
|
53
|
+
## Workflow Keys Schema
|
|
54
|
+
|
|
55
|
+
In `specs/planning-status.yaml`:
|
|
56
|
+
```yaml
|
|
57
|
+
workflows:
|
|
58
|
+
survey-context:
|
|
59
|
+
required: true
|
|
60
|
+
status: done
|
|
61
|
+
scope-work:
|
|
62
|
+
required: true
|
|
63
|
+
status: pending
|
|
64
|
+
research-first:
|
|
65
|
+
required: false
|
|
66
|
+
status: optional
|
|
67
|
+
note: "Skip if no external dependencies"
|
|
68
|
+
elaborate-spec:
|
|
69
|
+
required: false
|
|
70
|
+
status: optional
|
|
71
|
+
plan-release:
|
|
72
|
+
required: true
|
|
73
|
+
status: pending
|
|
74
|
+
slice-tasks:
|
|
75
|
+
required: true
|
|
76
|
+
status: pending
|
|
77
|
+
```
|
|
25
78
|
|
|
26
79
|
## Verify
|
|
27
80
|
|
|
@@ -9,16 +9,46 @@ model: sonnet
|
|
|
9
9
|
|
|
10
10
|
> **Spine position:** Step 1 — scope-work → slice-tasks → plan-work.
|
|
11
11
|
|
|
12
|
-
Turn the current conversation into a bounded PRD at `specs/product/SCOPE_LATEST.yaml`.
|
|
12
|
+
Turn the current conversation into a bounded PRD at `specs/product/SCOPE_LATEST.yaml`. Without a scope boundary, implementation drifts — stories expand, estimates blow up, and "done" becomes undefined.
|
|
13
|
+
|
|
14
|
+
## Pre-flight
|
|
15
|
+
|
|
16
|
+
- [ ] Do you have a clear user need or problem statement? If not, run `elaborate-spec` first.
|
|
17
|
+
- [ ] Does `specs/product/VISION_LATEST.yaml` exist? If yes, read it for north-star alignment.
|
|
18
|
+
- [ ] Is there an existing `SCOPE_LATEST.yaml`? If yes, you're refining, not creating from scratch.
|
|
13
19
|
|
|
14
20
|
## Process
|
|
15
21
|
|
|
16
|
-
1. Read existing `specs/` artifacts (`release-plan.yaml`, `plans/TECH_STACK_LATEST.md`, `requirements/VISION_LATEST.yaml` if any).
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
1. **Gather context** — Read existing `specs/` artifacts (`release-plan.yaml`, `plans/TECH_STACK_LATEST.md`, `requirements/VISION_LATEST.yaml` if any). Understand what the project is building and why.
|
|
23
|
+
|
|
24
|
+
2. **Interview (if needed)** — Clarify: What is the goal? Who are the users? What is definitely in scope? What is explicitly out of scope? What constraints exist (time, budget, tech)? How will success be measured?
|
|
25
|
+
|
|
26
|
+
3. **Write `specs/product/SCOPE_LATEST.yaml`** with these fields:
|
|
27
|
+
- `core_value` — one-sentence value proposition
|
|
28
|
+
- `summary` — 2-3 paragraph scope overview
|
|
29
|
+
- `in_scope[]` — list of what this initiative covers (each maps to an epic/story)
|
|
30
|
+
- `out_of_scope[]` — explicit exclusions (prevents scope creep)
|
|
31
|
+
- `constraints` — tech, time, resource boundaries
|
|
32
|
+
- `success_criteria` — observable outcomes that prove the scope is delivered
|
|
33
|
+
- `references` — links to related specs, ADRs, or documents
|
|
34
|
+
|
|
35
|
+
4. **Lightweight trade-off analysis** — For each `out_of_scope` item, note *why* it's excluded (deferred, not valuable, too risky, depends on external factor). This protects against "what about X?" questions later.
|
|
36
|
+
|
|
37
|
+
5. **Run `research-first`** if external dependencies are proposed — verify the dependency exists, is maintained, and fits the scope before committing to it.
|
|
38
|
+
|
|
39
|
+
> **HARD GATE** — Every `in_scope` item must map to a future epic/story ID or explicit deferred note in `out_of_scope`. If an item can't be mapped, the scope is too vague — refine before proceeding.
|
|
40
|
+
|
|
41
|
+
> **HARD GATE** — Do NOT include implementation details in SCOPE_LATEST.yaml. Scope is *what* and *why*, not *how*. Implementation detail belongs in epic capsules and slice-tasks.
|
|
42
|
+
|
|
43
|
+
## Common Anti-Patterns
|
|
44
|
+
|
|
45
|
+
- **"Everything is in scope"** — If nothing is out of scope, you haven't defined a scope. You've described a universe. Cut aggressively.
|
|
46
|
+
- **"We'll figure it out later"** — Ambiguity in scope propagates to every downstream decision. Resolve now or explicitly defer in writing.
|
|
47
|
+
- **Scope as architecture** — Saying "we need a PostgreSQL database" is architecture, not scope. Scope says "we need to store user profiles and transaction history."
|
|
48
|
+
|
|
49
|
+
## Output
|
|
20
50
|
|
|
21
|
-
|
|
51
|
+
`specs/product/SCOPE_LATEST.yaml` — the bounded PRD. Subsequent skills (`slice-tasks`, `plan-work`) reference this as the source of truth for what to build.
|
|
22
52
|
|
|
23
53
|
## Verify
|
|
24
54
|
|
|
@@ -6,17 +6,65 @@ model: haiku
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
# Search Skills
|
|
9
|
-
> **HARD GATE** — **HARD GATE** — Search results must be ranked by relevance. Do NOT return all matches without prioritization. Use skill metadata (phase, purpose, frequency) to rank.
|
|
10
9
|
|
|
10
|
+
> **HARD GATE** — Search results must be ranked by relevance. Do NOT return all matches without prioritization. Use skill metadata (phase, purpose, frequency) to rank.
|
|
11
|
+
>
|
|
12
|
+
> **HARD GATE** — Do NOT use external embedding APIs or AI-based semantic search. This is a lexical-only index (ADR: zero external dependency).
|
|
11
13
|
|
|
12
|
-
Lexical search only — no embedding service (ADR: zero external dependency).
|
|
14
|
+
Lexical search only — no embedding service (ADR: zero external dependency). The index is a flat markdown file (`specs/SKILL-SEARCH-INDEX.md`) built from every SKILL.md's YAML frontmatter — name, description, and key phrases. No vector DB, no API calls, no network dependency.
|
|
15
|
+
|
|
16
|
+
## When to use
|
|
17
|
+
|
|
18
|
+
- You're unsure which skill to invoke for a user's request
|
|
19
|
+
- At the start of `research-first` to find pre-existing skills that might solve the problem
|
|
20
|
+
- When a user asks "is there a skill for X?"
|
|
21
|
+
- Before calling a skill by name, to confirm it's the right one
|
|
22
|
+
|
|
23
|
+
## Pre-flight
|
|
24
|
+
|
|
25
|
+
- [ ] Does `specs/SKILL-SEARCH-INDEX.md` exist? If not, run `bash scripts/build-skill-index.sh`.
|
|
26
|
+
- [ ] Is the index fresh? Check its timestamp — if > 24 hours old or after any SKILL.md change, regenerate.
|
|
13
27
|
|
|
14
28
|
## Process
|
|
15
29
|
|
|
16
|
-
1. Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX.md`
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
30
|
+
1. **Refresh index if stale** — Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX.md` doesn't exist or was modified before the last SKILL.md change.
|
|
31
|
+
|
|
32
|
+
2. **Search the index** — Use ripgrep on the lexical index:
|
|
33
|
+
```
|
|
34
|
+
rg -i "<keywords>" specs/SKILL-SEARCH-INDEX.md
|
|
35
|
+
```
|
|
36
|
+
The index contains each skill's name, description, phase, and key use-case phrases, so natural language queries work well even without embeddings.
|
|
37
|
+
|
|
38
|
+
3. **Rank results** — Read the top 3 matches. Evaluate by:
|
|
39
|
+
- **Exactness** — Does the description literally match the user's intent?
|
|
40
|
+
- **Phase fit** — Is the skill designed for the current lifecycle phase?
|
|
41
|
+
- **Trigger phrases** — Does the skill's "Use when" section match the situation?
|
|
42
|
+
|
|
43
|
+
4. **Recommend one skill** — Select the single best-matching skill. Provide:
|
|
44
|
+
- The skill name
|
|
45
|
+
- Why it's the best match (citing the description or trigger phrase)
|
|
46
|
+
- What it produces (artifact, dialogue, or state change)
|
|
47
|
+
|
|
48
|
+
5. **Invoke** — Call the skill directly or through the orchestrator. If no match found, suggest the closest phase-appropriate skill or `using-bigpowers` as a general entry point.
|
|
49
|
+
|
|
50
|
+
## Index Format
|
|
51
|
+
|
|
52
|
+
`specs/SKILL-SEARCH-INDEX.md` contains one section per skill:
|
|
53
|
+
```markdown
|
|
54
|
+
## <skill-name>
|
|
55
|
+
- **Description:** <from frontmatter>
|
|
56
|
+
- **Phase:** <lifecycle phase>
|
|
57
|
+
- **Triggers:** <key phrases from description>
|
|
58
|
+
- **Keywords:** <extracted terms>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Why Not Semantic Search?
|
|
62
|
+
|
|
63
|
+
- Zero network dependency — works fully offline
|
|
64
|
+
- Zero cost — no API keys, no usage limits
|
|
65
|
+
- Instant — ripgrep on a local file is sub-second
|
|
66
|
+
- Deterministic — same query always returns same results
|
|
67
|
+
- Auditable — you can read the full index
|
|
20
68
|
|
|
21
69
|
## Verify
|
|
22
70
|
|
|
@@ -11,14 +11,46 @@ model: sonnet
|
|
|
11
11
|
|
|
12
12
|
Produce **epic capsule story tasks** in `specs/epics/eNN-slug/` — vertical slices, each independently deliverable and testable. Output: decoupled `eNNsYY-tasks.yaml` files with runnable verify commands. Legacy `specs/epics/ (see slice-tasks)` is deprecated; use capsule dirs + `execution-status.yaml`.
|
|
13
13
|
|
|
14
|
+
## Pre-flight
|
|
15
|
+
|
|
16
|
+
- [ ] Does `specs/product/SCOPE_LATEST.yaml` exist? If not, run `scope-work` first — you can't slice what you haven't bounded.
|
|
17
|
+
- [ ] Is the `release-plan.yaml` populated with the epics you're slicing? Epic IDs (e01, e02…) should exist before you create stories.
|
|
18
|
+
- [ ] Do you understand the difference between a horizontal layer and a vertical slice? (See anti-patterns below.)
|
|
19
|
+
|
|
14
20
|
## Process
|
|
15
21
|
|
|
16
|
-
1. Read `specs/product/SCOPE_LATEST.yaml` and/or `specs/release-plan.yaml`.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
1. **Read context** — Read `specs/product/SCOPE_LATEST.yaml` and/or `specs/release-plan.yaml`. Understand what the epic delivers end-to-end.
|
|
23
|
+
|
|
24
|
+
2. **Cut tracer-bullet slices** — Identify the thinnest possible vertical path through the stack that delivers user value. Start with this slice; it will catch integration issues first. For example:
|
|
25
|
+
- A search feature: first slice is "user types query → API returns results" (no filters, no pagination, no ranking — just the plumbing working end-to-end).
|
|
26
|
+
- A checkout flow: first slice is "user clicks buy → order created" (no payment, no inventory, no email).
|
|
27
|
+
|
|
28
|
+
3. **Assign BCPs** — For each story, estimate Business Complexity Points (1–13). A 1-BCP story is a trivial change (one file, one concept). A 13-BCP story is a major feature across multiple modules. If a story exceeds 8 BCPs, consider splitting it.
|
|
29
|
+
|
|
30
|
+
4. **Each story** writes:
|
|
31
|
+
- `eNNsYY-tasks.yaml` with `story_id`, `title`, `status`, `bcps`, `tasks[]` (each with `id`, `description`, `verify`, `status`)
|
|
32
|
+
- Story spec `.md` files are written by `plan-work` and follow countable-story-format.md
|
|
33
|
+
- The epic capsule manifest (`epic.yaml`) is updated to list the story ID and BCPs
|
|
34
|
+
|
|
35
|
+
5. **Order by WSJF** in `release-plan.yaml` epic list — highest WSJF first. Weight-shortest-job-first ensures the highest value arrives earliest.
|
|
36
|
+
|
|
37
|
+
6. **Validate slices** — Every slice must answer: "If this story ships, does a user get new value?" If the answer is "no, they need a later story too", the slice is too horizontal — cut vertically deeper.
|
|
38
|
+
|
|
39
|
+
> **HARD GATE** — No horizontal-only slices ("add all models") without a vertical path that proves integration. Every story must be independently demonstrable, even if it only handles the happy path.
|
|
40
|
+
|
|
41
|
+
> **HARD GATE** — Each task's `verify:` field must contain a runnable command (not "manually check" or "review visually"). If verification requires manual steps, prefix with `verify-script:` and write the steps in the story file.
|
|
42
|
+
|
|
43
|
+
## Anti-Patterns
|
|
44
|
+
|
|
45
|
+
- **Layer cakes** — "Week 1: all models. Week 2: all controllers. Week 3: all views." This hides integration risk until the end. Every story must cut through all layers.
|
|
46
|
+
- **Too-small slices** — If a slice takes < 30 minutes to implement, it's probably noise. Combine with adjacent slices.
|
|
47
|
+
- **Too-large slices** — If a slice takes > 3 days, it's an epic, not a story. Split further.
|
|
48
|
+
|
|
49
|
+
## Output
|
|
20
50
|
|
|
21
|
-
|
|
51
|
+
- `specs/epics/eNN-slug/eNNsYY-tasks.yaml` — per-story task breakdown with verify commands
|
|
52
|
+
- `specs/epics/eNN-slug/epic.yaml` — updated with story list and BCPs
|
|
53
|
+
- `specs/release-plan.yaml` — updated WSJF ordering (if needed)
|
|
22
54
|
|
|
23
55
|
## Verify
|
|
24
56
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [2.7.0](https://github.com/danielvm-git/bigpowers/compare/v2.6.0...v2.7.0) (2026-06-20)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **catalog:** add lockfile regeneration and auto-generated SKILL-INDEX ([#20](https://github.com/danielvm-git/bigpowers/issues/20)) ([2437dd0](https://github.com/danielvm-git/bigpowers/commit/2437dd0cf32858809623e8cca7680224f8394020))
|
|
7
|
+
|
|
1
8
|
# [2.6.0](https://github.com/danielvm-git/bigpowers/compare/v2.5.0...v2.6.0) (2026-06-18)
|
|
2
9
|
|
|
3
10
|
|