bigpowers 2.6.0 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.pi/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.6.0",
3
+ "version": "2.7.1",
4
4
  "description": "62 skills — 61 agent skills for spec-driven, test-first software development by solo developers",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -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
- 2. Find first workflow with `status: pending` or `optional` not yet run.
21
- 3. Invoke the matching skill; on success set `status: done` for that workflow key.
22
- 4. Set `state.yaml` `active_flow: planning` while in this chain.
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
- 2. Interview (if needed): goal, users, in-scope, out-of-scope, constraints, success metrics.
16
- 3. Write `specs/product/SCOPE_LATEST.yaml` with: `core_value`, `summary`, `in_scope[]`, `out_of_scope[]`, `constraints`, `success_criteria`, `references`.
17
- 4. Run `research-first` if external dependencies are proposed.
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
- > **HARD GATE** Every `in_scope` item must map to a future epic/story ID or explicit deferred note in `out_of_scope`.
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` is stale.
15
- 2. Search index: `rg -i "<keywords>" specs/SKILL-SEARCH-INDEX.md`
16
- 3. Read top 3 matches' `description` and "Use when" triggers.
17
- 4. Recommend one skill with rationale; invoke via orchestrator or direct call.
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
- 2. Cut **tracer-bullet slices** (thin end-to-end paths first, then depth).
16
- 3. Each story: writes `eNNsYY-tasks.yaml` with `story_id`, `title`, `status`, `bcps`, `tasks[]` (each with `id`, `description`, `verify`, `status`). Story spec `.md` files are written by `plan-work` and follow [countable-story-format.md](file:///Users/danielvm/Developer/bigpowers/countable-story-format.md).
17
- 4. Order by WSJF in `release-plan.yaml` epic list.
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
- > **HARD GATE** No horizontal-only slices ("add all models") without a vertical path that proves integration.
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
- 2. Find first workflow with `status: pending` or `optional` not yet run.
23
- 3. Invoke the matching skill; on success set `status: done` for that workflow key.
24
- 4. Set `state.yaml` `active_flow: planning` while in this chain.
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
- 2. Interview (if needed): goal, users, in-scope, out-of-scope, constraints, success metrics.
18
- 3. Write `specs/product/SCOPE_LATEST.yaml` with: `core_value`, `summary`, `in_scope[]`, `out_of_scope[]`, `constraints`, `success_criteria`, `references`.
19
- 4. Run `research-first` if external dependencies are proposed.
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
- > **HARD GATE** Every `in_scope` item must map to a future epic/story ID or explicit deferred note in `out_of_scope`.
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` is stale.
17
- 2. Search index: `rg -i "<keywords>" specs/SKILL-SEARCH-INDEX.md`
18
- 3. Read top 3 matches' `description` and "Use when" triggers.
19
- 4. Recommend one skill with rationale; invoke via orchestrator or direct call.
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
- 2. Cut **tracer-bullet slices** (thin end-to-end paths first, then depth).
18
- 3. Each story: writes `eNNsYY-tasks.yaml` with `story_id`, `title`, `status`, `bcps`, `tasks[]` (each with `id`, `description`, `verify`, `status`). Story spec `.md` files are written by `plan-work` and follow [countable-story-format.md](file:///Users/danielvm/Developer/bigpowers/countable-story-format.md).
19
- 4. Order by WSJF in `release-plan.yaml` epic list.
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
- > **HARD GATE** No horizontal-only slices ("add all models") without a vertical path that proves integration.
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,17 @@
1
+ ## [2.7.1](https://github.com/danielvm-git/bigpowers/compare/v2.7.0...v2.7.1) (2026-06-20)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **release-branch:** add solo-local fallback for missing land-branch.sh ([764983c](https://github.com/danielvm-git/bigpowers/commit/764983c1ca069541b79837d0ae6cb1873d86a3e1))
7
+
8
+ # [2.7.0](https://github.com/danielvm-git/bigpowers/compare/v2.6.0...v2.7.0) (2026-06-20)
9
+
10
+
11
+ ### Features
12
+
13
+ * **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))
14
+
1
15
  # [2.6.0](https://github.com/danielvm-git/bigpowers/compare/v2.5.0...v2.6.0) (2026-06-18)
2
16
 
3
17