bigpowers 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/SKILL-INDEX.md +2 -2
  3. package/assess-impact/SKILL.md +2 -2
  4. package/build-epic/SKILL.md +5 -5
  5. package/change-request/SKILL.md +4 -4
  6. package/dashboard/src/loaders/reader.js +2 -1
  7. package/dashboard/src/tui/filesystem.js +4 -5
  8. package/dashboard/src/tui/index.js +2 -2
  9. package/dashboard/src/tui/ledger.js +3 -5
  10. package/dashboard/src/tui/state-yaml.js +5 -7
  11. package/deepen-architecture/SKILL.md +6 -6
  12. package/define-success/SKILL.md +1 -1
  13. package/develop-tdd/SKILL.md +3 -3
  14. package/elaborate-spec/SKILL.md +7 -7
  15. package/execute-plan/SKILL.md +4 -4
  16. package/investigate-bug/SKILL.md +1 -1
  17. package/kickoff-branch/SKILL.md +1 -1
  18. package/map-codebase/SKILL.md +4 -4
  19. package/migrate-spec/SKILL.md +8 -8
  20. package/model-domain/SKILL.md +8 -8
  21. package/orchestrate-project/SKILL.md +2 -2
  22. package/package.json +1 -1
  23. package/plan-release/SKILL.md +73 -27
  24. package/plan-work/SKILL.md +23 -7
  25. package/release-branch/SKILL.md +15 -0
  26. package/research-first/SKILL.md +2 -2
  27. package/run-evals/SKILL.md +2 -2
  28. package/run-planning/SKILL.md +1 -1
  29. package/scope-work/SKILL.md +4 -4
  30. package/scripts/land-branch.sh +28 -0
  31. package/seed-conventions/SKILL.md +37 -6
  32. package/session-state/SKILL.md +34 -3
  33. package/slice-tasks/SKILL.md +4 -4
  34. package/survey-context/SKILL.md +2 -2
  35. package/trace-requirement/SKILL.md +6 -6
  36. package/verify-work/SKILL.md +35 -2
  37. package/write-document/SKILL.md +1 -1
  38. package/dashboard/src/data/gate-status.js +0 -32
  39. package/dashboard/src/data/metrics.js +0 -89
  40. package/dashboard/src/data/pipeline-map.js +0 -32
  41. package/dashboard/src/data/reader.js +0 -122
  42. package/dashboard/src/data/watcher.js +0 -108
package/CHANGELOG.md CHANGED
@@ -1,3 +1,38 @@
1
+ # [2.0.0](https://github.com/danielvm-git/bigpowers/compare/v1.5.1...v2.0.0) (2026-06-11)
2
+
3
+
4
+ * feat(skills)!: evolve to capsule-dir structure (50/50 SDD adequacy) ([77a4e88](https://github.com/danielvm-git/bigpowers/commit/77a4e88ceeb3d454079a5a499362e53c0f904379))
5
+
6
+
7
+ ### BREAKING CHANGES
8
+
9
+ * Renames specs/requirements/ → specs/product/,
10
+ specs/plans/ → specs/tech-architecture/. Epics use capsule
11
+ directories (epic.yaml + story .md + -tasks.yaml). Adds
12
+ specs/verifications/, state.yaml.lock, epic archive, bug registry.
13
+
14
+ - 30 SKILL.md files updated across 8 change themes
15
+ - Path renames (A+B): 10 skills for product/, 10 for tech-architecture/
16
+ - Capsule dirs (C): 17 skills — epic.yaml manifests, countable-story
17
+ .md specs, decoupled -tasks.yaml
18
+ - Verification ledger (D): verify-work + run-evals → specs/verifications/
19
+ - State lock (E): session-state + 6 skills acquire/release state.yaml.lock
20
+ - Bug registry (F): BUG-NNN-slug.md naming, registry.yaml
21
+ - ADR split (G): epic-local adr/ vs global specs/adr/
22
+ - Scripts: land-branch.sh epic archive, sync-skills.sh regeneration
23
+ - HARD GATES: 73 callouts across 61 skills (100% coverage confirmed)
24
+
25
+ Source: projected-structure-bigpowers-evolved.md (50.0/50.0 in SDD
26
+ adequacy), sdd-adequacy-ranking.md (22-method comparison).
27
+ Plan: specs/plans/PLAN-evolve-harmonized.md
28
+
29
+ ## [1.5.1](https://github.com/danielvm-git/bigpowers/compare/v1.5.0...v1.5.1) (2026-06-11)
30
+
31
+
32
+ ### Bug Fixes
33
+
34
+ * **dashboard:** correct require path typo in test files ([8f7e8eb](https://github.com/danielvm-git/bigpowers/commit/8f7e8ebf02b43495c9698f4e4832b8894977d066))
35
+
1
36
  # [1.5.0](https://github.com/danielvm-git/bigpowers/compare/v1.4.0...v1.5.0) (2026-06-11)
2
37
 
3
38
 
package/SKILL-INDEX.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Purpose:** One canonical reference for all bigpowers skills. Referenced by README.md, RELEASE-PLAN.md, and CONVENTIONS.md. Updated per-release.
4
4
 
5
- **Last updated:** 2026-06-10 (v3.1.0 — YAML cockpit; 61 active, 0 planned; 18 sub-ops absorbed into parent skills)
5
+ **Last updated:** 2026-06-11 (v3.1.0 — verified 61 active skills; 18 sub-op concepts absorbed as sub-sections into parent SKILL.md files; count confirmed accurate)
6
6
 
7
7
  ---
8
8
 
@@ -95,7 +95,7 @@
95
95
  | 60 | Build | `run-planning` | Discover-phase workflow tracker | planning-status.yaml | ✅ Active |
96
96
  | 61 | Bug | `fix-bug` | Bug fix orchestrator | bugs/BUG-*.md | ✅ Active |
97
97
 
98
- **Total: 61 Active, 0 📋 Planned.**
98
+ **Total: 61 active skills.** 18 sub-op concepts (zoom-out, slopcheck, red-phase, green-phase, refactor-phase, cold-start-smoke, gaps-loop, plan-work-fast, commit-message-fix, release-branch-hotfix, audit-code-quick, verify-work-smoke, show-state, reset-state, compact-state, list-epics, check-gates) are documented as sub-sections within parent SKILL.md files; none were standalone SKILL.md directories, so the count remains 61.
99
99
 
100
100
  ---
101
101
 
@@ -27,9 +27,9 @@ git log --oneline -10 -- [file-path]
27
27
 
28
28
  ### 3. Map to release plan stories
29
29
 
30
- Read `specs/release-plan.yaml + epic shards` (if it exists). For each dependent found in Step 2, identify which story owns that module. List stories that will be affected by the change.
30
+ Read `specs/release-plan.yaml + epic capsule directories` (if it exists). For each dependent found in Step 2, identify which story owns that module. List stories that will be affected by the change.
31
31
 
32
- → verify: `grep -c "Story" specs/release-plan.yaml + epic shards 2>/dev/null || echo "no release plan"`
32
+ → verify: `grep -c "Story" specs/release-plan.yaml + epic capsule directories 2>/dev/null || echo "no release plan"`
33
33
 
34
34
  ### 4. List test coverage
35
35
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: build-epic
3
3
  model: sonnet
4
- description: Eight-step epic build cycle — reads state.yaml, execution-status.yaml, and one epic shard; updates status via bp-yaml-set or direct edit. Resume mode runs one step per invocation. Use instead of ad-hoc execute-plan for release work.
4
+ description: Eight-step epic build cycle — reads state.yaml, execution-status.yaml, and one epic capsule; updates status via bp-yaml-set or direct edit. Resume mode runs one step per invocation. Use instead of ad-hoc execute-plan for release work.
5
5
  ---
6
6
 
7
7
  # Build Epic
@@ -19,7 +19,7 @@ Orchestrates the **build** flow for a single epic: survey → plan tasks → kic
19
19
  | Step | Skill / action |
20
20
  |------|----------------|
21
21
  | 1 | `survey-context` — confirm epic + story |
22
- | 2 | `plan-work` — flesh out story `tasks[]` in `specs/epics/eNN-*.yaml` |
22
+ | 2 | `plan-work` — flesh out story `tasks[]` in `specs/epics/eNN-slug/epic.yaml` |
23
23
  | 3 | `kickoff-branch` — feature branch + clean baseline |
24
24
  | 4 | `develop-tdd` — red-green per task |
25
25
  | 5 | `verify-work` — UAT + mechanical gates |
@@ -29,8 +29,8 @@ Orchestrates the **build** flow for a single epic: survey → plan tasks → kic
29
29
 
30
30
  ## Process
31
31
 
32
- 1. Read `specs/state.yaml`, `specs/execution-status.yaml`, `specs/release-plan.yaml`, active `specs/epics/eNN-*.yaml`.
33
- 2. **BCP Tracking (Step 2):** After `plan-work` completes, read the `bcps:` count from the epic shard and carry it into `state.yaml` as `epic_cycle.story_bcps = N`.
32
+ 1. Read `specs/state.yaml`, `specs/execution-status.yaml`, `specs/release-plan.yaml`, active `specs/epics/eNN-slug/epic.yaml`.
33
+ 2. **BCP Tracking (Step 2):** After `plan-work` completes, read the `bcps:` count from the epic capsule and carry it into `state.yaml` as `epic_cycle.story_bcps = N`.
34
34
  3. If `epic_cycle.step` missing, set to `1`.
35
35
  4. Run **only the current step** (resume mode) unless user asked for full auto-run.
36
36
  5. After step verify passes, increment `epic_cycle.step` in `state.yaml` (or `bash scripts/bp-yaml-set.sh` if available).
@@ -42,4 +42,4 @@ Write `handoff.next_skill` and `handoff.context` in `state.yaml` when pausing mi
42
42
 
43
43
  ## Verify
44
44
 
45
- → verify: `grep -q 'active_flow: build_epic' specs/state.yaml && test -f specs/epics/*.yaml`
45
+ → verify: `grep -q 'active_flow: build_epic' specs/state.yaml && test -f specs/epics/*/epic.yaml`
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: change-request
3
3
  model: sonnet
4
- description: Add a new requirement or reorder epics by WSJF against specs/release-plan.yaml and epic shards. Modes Add and Reorder. Use when a new requirement arrives mid-release or the plan needs prioritization.
4
+ description: Add a new requirement or reorder epics by WSJF against specs/release-plan.yaml and epic capsule directories. Modes Add and Reorder. Use when a new requirement arrives mid-release or the plan needs prioritization.
5
5
  ---
6
6
 
7
7
  # Change Request
@@ -19,10 +19,10 @@ Intake a new requirement mid-flight without disrupting work in progress.
19
19
  1. **Capture**: What is the change? What problem does it solve?
20
20
  2. **Locate**: Which existing stories in `specs/epics/` does it affect or replace?
21
21
  3. **Draft**: Add story + `tasks[]` with Gherkin-style AC in epic YAML (each task has `verify`).
22
- 4. **Place**: Append story under existing epic shard, or create `specs/epics/eNN-slug.yaml` and register in `release-plan.yaml` `epics[]`.
22
+ 4. **Place**: Append story under existing epic capsule, or create `specs/epics/eNN-slug.yaml` and register in `release-plan.yaml` `epics[]`.
23
23
  5. **Score**: Compute WSJF; note if it outranks in-progress work.
24
24
 
25
- → verify: `grep -c 'stories:' specs/epics/*.yaml`
25
+ → verify: `grep -c 'stories:' specs/epics/*/epic.yaml`
26
26
 
27
27
  ## Mode B — Reorder
28
28
 
@@ -36,7 +36,7 @@ See [REFERENCE.md](REFERENCE.md) for the full WSJF scoring rubric.
36
36
  4. **Update** `specs/release-plan.yaml` and epic `wsjf` keys with rationale.
37
37
  5. **Report** the delta.
38
38
 
39
- → verify: `grep -c 'wsjf' specs/release-plan.yaml specs/epics/*.yaml`
39
+ → verify: `grep -c 'wsjf' specs/release-plan.yaml specs/epics/*/epic.yaml`
40
40
 
41
41
  ## After either mode
42
42
 
@@ -103,10 +103,11 @@ function readCycleTimes(projectRoot) {
103
103
  const stories = data.stories || [];
104
104
  return stories.map(s => ({
105
105
  id: s.id || null,
106
+ epic: s.epic || null,
106
107
  bcps: s.bcps || 0,
107
108
  start: s.start || null,
108
109
  end: s.end || null,
109
- cycleMin: s.cycle_min || 0,
110
+ cycleMin: s.cycle_minutes || 0,
110
111
  bcpPerHour: s.bcp_per_hour || 0
111
112
  }));
112
113
  } catch (err) {
@@ -1,6 +1,5 @@
1
1
  const fs = require('fs');
2
2
  const path = require('path');
3
- const chalk = require('chalk');
4
3
 
5
4
  function renderFilesystem(box, projectRoot) {
6
5
  if (!box || typeof box.setContent !== 'function') {
@@ -10,7 +9,7 @@ function renderFilesystem(box, projectRoot) {
10
9
  const specsPath = path.join(projectRoot, 'specs');
11
10
 
12
11
  if (!fs.existsSync(specsPath)) {
13
- box.setContent(chalk.dim('{center}specs/ not found{/center}'));
12
+ box.setContent('{center}{dim}specs/ not found{/dim}{/center}');
14
13
  return;
15
14
  }
16
15
 
@@ -58,7 +57,7 @@ function renderFilesystem(box, projectRoot) {
58
57
  let displayName = entry.name;
59
58
 
60
59
  if (entry.isDirectory()) {
61
- displayName = chalk.blue(displayName);
60
+ displayName = `{blue-fg}${displayName}{/blue-fg}`;
62
61
  lines.push(prefix + connector + displayName);
63
62
 
64
63
  if (depth < 1) {
@@ -73,7 +72,7 @@ function renderFilesystem(box, projectRoot) {
73
72
  const age = now - mtime;
74
73
 
75
74
  if (age < 60000) {
76
- displayName = chalk.yellow(displayName + ' ');
75
+ displayName = `{yellow-fg}${displayName}{/yellow-fg}`;
77
76
  }
78
77
 
79
78
  lines.push(prefix + connector + displayName);
@@ -86,7 +85,7 @@ function renderFilesystem(box, projectRoot) {
86
85
 
87
86
  buildTree(specsPath);
88
87
  } catch (err) {
89
- lines.push(chalk.dim('Error reading specs/'));
88
+ lines.push('{dim}Error reading specs/{/dim}');
90
89
  }
91
90
 
92
91
  box.setContent(lines.join('\n'));
@@ -1,7 +1,7 @@
1
1
  const path = require('path');
2
2
  const { watch } = require('../loaders/watcher');
3
3
  const { readStateYaml, readExecutionStatus, readEpicShards, readCycleTimes } = require('../loaders/reader');
4
- const { getMetrics } = require('../loaders/metrics');
4
+ const { computeProjectMetrics } = require('../loaders/metrics');
5
5
  const { renderPipeline } = require('./pipeline');
6
6
  const { renderEpicQueue } = require('./epic-queue');
7
7
  const { renderMetricsBar } = require('./metrics-bar');
@@ -126,7 +126,7 @@ function start(projectRoot) {
126
126
  const executionStatus = readExecutionStatus(projectRoot);
127
127
  const epics = readEpicShards(projectRoot);
128
128
  const cycleTimes = readCycleTimes(projectRoot);
129
- const metrics = getMetrics(cycleTimes);
129
+ const metrics = computeProjectMetrics(cycleTimes);
130
130
 
131
131
  renderMetricsBar(metricsBar, metrics, stateData);
132
132
  renderPipeline(pipeline, stateData);
@@ -1,12 +1,10 @@
1
- const chalk = require('chalk');
2
-
3
1
  function renderLedger(box, cycleTimes) {
4
2
  if (!box || typeof box.setContent !== 'function') {
5
3
  return;
6
4
  }
7
5
 
8
6
  if (!cycleTimes || cycleTimes.length === 0) {
9
- box.setContent(chalk.dim('{center}no completed stories yet{/center}'));
7
+ box.setContent('{center}{dim}no completed stories yet{/dim}{/center}');
10
8
  return;
11
9
  }
12
10
 
@@ -30,10 +28,10 @@ function renderLedger(box, cycleTimes) {
30
28
 
31
29
  // Data rows
32
30
  cycleTimes.forEach((cycle) => {
33
- const storyId = cycle.story_id || '—';
31
+ const storyId = cycle.id || '—';
34
32
  const epicPrefix = cycle.epic || '—';
35
33
  const bcps = cycle.bcps || 0;
36
- const minutes = cycle.cycle_minutes || 0;
34
+ const minutes = cycle.cycleMin || 0;
37
35
  const bcpPerHour = minutes > 0 ? ((bcps * 60) / minutes).toFixed(1) : '—';
38
36
 
39
37
  totalBCPs += bcps;
@@ -1,12 +1,10 @@
1
- const chalk = require('chalk');
2
-
3
1
  function renderStateYaml(box, stateData) {
4
2
  if (!box || typeof box.setContent !== 'function') {
5
3
  return;
6
4
  }
7
5
 
8
6
  if (!stateData) {
9
- box.setContent(chalk.dim('{center}state.yaml not found{/center}'));
7
+ box.setContent('{center}state.yaml not found{/center}');
10
8
  return;
11
9
  }
12
10
 
@@ -27,17 +25,17 @@ function renderStateYaml(box, stateData) {
27
25
  pairs.forEach(({ key, value }) => {
28
26
  let displayValue = String(value || '—');
29
27
 
30
- // Color rules
28
+ // Color rules: use blessed markup, not chalk
31
29
  if (key === 'git.branch') {
32
30
  if (displayValue === 'main') {
33
- displayValue = chalk.green(displayValue);
31
+ displayValue = `{green-fg}${displayValue}{/green-fg}`;
34
32
  } else if (displayValue.startsWith('feat/')) {
35
- displayValue = chalk.yellow(displayValue);
33
+ displayValue = `{yellow-fg}${displayValue}{/yellow-fg}`;
36
34
  }
37
35
  }
38
36
 
39
37
  if (key === 'next_skill' && value) {
40
- displayValue = chalk.green(displayValue);
38
+ displayValue = `{green-fg}${displayValue}{/green-fg}`;
41
39
  }
42
40
 
43
41
  lines.push(` {dim}${key}:{/dim} ${displayValue}`);
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: deepen-architecture
3
3
  model: sonnet
4
- description: Find deepening opportunities in a codebase, informed by the domain language in specs/plans/TECH_STACK_LATEST.md and the decisions in specs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable.
4
+ description: Find deepening opportunities in a codebase, informed by the domain language in specs/tech-architecture/tech-stack.md and the decisions in specs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable.
5
5
  ---
6
6
 
7
7
  # Deepen Architecture
@@ -29,7 +29,7 @@ Key principles (see [LANGUAGE.md](LANGUAGE.md) for the full list):
29
29
  - **The interface is the test surface.**
30
30
  - **One adapter = hypothetical seam. Two adapters = real seam.**
31
31
 
32
- This skill is _informed_ by the project's domain model — `specs/plans/TECH_STACK_LATEST.md` and any `specs/adr/`. The domain language gives names to good seams; ADRs record decisions the skill should not re-litigate. See [CONTEXT-FORMAT.md](../model-domain/CONTEXT-FORMAT.md) and [ADR-FORMAT.md](../model-domain/ADR-FORMAT.md).
32
+ This skill is _informed_ by the project's domain model — `specs/tech-architecture/tech-stack.md` and any `specs/adr/`. The domain language gives names to good seams; ADRs record decisions the skill should not re-litigate. See [CONTEXT-FORMAT.md](../model-domain/CONTEXT-FORMAT.md) and [ADR-FORMAT.md](../model-domain/ADR-FORMAT.md).
33
33
 
34
34
  ## Process
35
35
 
@@ -37,7 +37,7 @@ This skill is _informed_ by the project's domain model — `specs/plans/TECH_STA
37
37
 
38
38
  Read existing documentation first:
39
39
 
40
- - `specs/plans/TECH_STACK_LATEST.md` (or `specs/CONTEXT-MAP.md` + each `specs/plans/TECH_STACK_LATEST.md` in a multi-context repo)
40
+ - `specs/tech-architecture/tech-stack.md` (or `specs/tech-architecture/tech-stack.md` + each `specs/tech-architecture/tech-stack.md` in a multi-context repo)
41
41
  - Relevant ADRs in `specs/adr/`
42
42
 
43
43
  If any of these files don't exist, proceed silently — don't flag their absence or suggest creating them upfront.
@@ -73,7 +73,7 @@ Present a numbered list of deepening opportunities. For each candidate:
73
73
  - **Solution** — plain English description of what would change
74
74
  - **Benefits** — explained in terms of locality and leverage, and how tests would improve
75
75
 
76
- **Use `specs/plans/TECH_STACK_LATEST.md` vocabulary for the domain, and [LANGUAGE.md](LANGUAGE.md) vocabulary for the architecture.**
76
+ **Use `specs/tech-architecture/tech-stack.md` vocabulary for the domain, and [LANGUAGE.md](LANGUAGE.md) vocabulary for the architecture.**
77
77
 
78
78
  **ADR conflicts**: if a candidate contradicts an existing ADR, only surface it when the friction is real enough to warrant revisiting the ADR. Mark it clearly. Don't list every theoretical refactor an ADR forbids.
79
79
 
@@ -85,7 +85,7 @@ Once the user picks a candidate, drop into a grilling conversation. Walk the des
85
85
 
86
86
  Side effects happen inline as decisions crystallize:
87
87
 
88
- - **Naming a deepened module after a concept not in `specs/plans/TECH_STACK_LATEST.md`?** Add the term to `specs/plans/TECH_STACK_LATEST.md` — same discipline as `model-domain` (see [CONTEXT-FORMAT.md](../model-domain/CONTEXT-FORMAT.md)). Create the file lazily if it doesn't exist.
89
- - **Sharpening a fuzzy term during the conversation?** Update `specs/plans/TECH_STACK_LATEST.md` right there.
88
+ - **Naming a deepened module after a concept not in `specs/tech-architecture/tech-stack.md`?** Add the term to `specs/tech-architecture/tech-stack.md` — same discipline as `model-domain` (see [CONTEXT-FORMAT.md](../model-domain/CONTEXT-FORMAT.md)). Create the file lazily if it doesn't exist.
89
+ - **Sharpening a fuzzy term during the conversation?** Update `specs/tech-architecture/tech-stack.md` right there.
90
90
  - **User rejects the candidate with a load-bearing reason?** Offer an ADR, framed as: _"Want me to record this as an ADR so future architecture reviews don't re-suggest it?"_ Only offer when the reason would actually be needed by a future explorer. See [ADR-FORMAT.md](../model-domain/ADR-FORMAT.md).
91
91
  - **Want to explore alternative interfaces for the deepened module?** See [INTERFACE-DESIGN.md](INTERFACE-DESIGN.md).
@@ -20,7 +20,7 @@ Transform "do X" into "step → verify: <cmd>" pairs. This is the pre-flight che
20
20
 
21
21
  ### 1. Read the task statement
22
22
 
23
- Take the task as stated (from conversation, or from `specs/epics/ (see slice-tasks)`, or from `specs/requirements/SCOPE_LATEST.yaml`).
23
+ Take the task as stated (from conversation, or from `specs/epics/ (see slice-tasks)`, or from `specs/product/SCOPE_LATEST.yaml`).
24
24
 
25
25
  ### 2. Break into observable outcomes
26
26
 
@@ -8,7 +8,7 @@ description: Test-driven development with red-green-refactor loop using vertical
8
8
 
9
9
  > **HARD GATE** — Do NOT proceed if on `main` or `master`. Run `kickoff-branch` first to create a feature branch or worktree.
10
10
  >
11
- > **HARD GATE** — Do NOT write code before you have a plan. New feature: `plan-work` → epic shard tasks. Bug: `investigate-bug` → `specs/bugs/BUG-*.md` (or use `fix-bug` orchestrator).
11
+ > **HARD GATE** — Do NOT write code before you have a plan. New feature: `plan-work` → epic capsule tasks. Bug: `investigate-bug` → `specs/bugs/BUG-*.md` (or use `fix-bug` orchestrator).
12
12
  >
13
13
  > **RECURSIVE DISCIPLINE** — This lifecycle apply to EVERY task, including updating these skills. Never skip planning because a task is "meta" or "just documentation."
14
14
 
@@ -65,7 +65,7 @@ If you find yourself thinking these things, you are likely deviating from produc
65
65
 
66
66
  Before writing any code:
67
67
 
68
- - [ ] Read active `specs/epics/*.yaml` story tasks or `specs/bugs/BUG-*.md` — understand verify steps
68
+ - [ ] Read active `specs/epics/*/epic.yaml` story tasks or `specs/bugs/BUG-*.md` — understand verify steps
69
69
  - [ ] Confirm with user what interface changes are needed
70
70
  - [ ] Confirm with user which behaviors to test (prioritize)
71
71
  - [ ] Identify opportunities for [deep modules](deep-modules.md) (small interface, deep implementation)
@@ -141,7 +141,7 @@ After every behavior cycle, run the verify command from the active epic task if
141
141
  ### 6. Manual Verification Handover
142
142
 
143
143
  Once the story is complete and all tests pass:
144
- 1. Locate the **Verification Script** in the active epic shard (`specs/epics/`) for this story.
144
+ 1. Locate the **Verification Script** in the active epic capsule (`specs/epics/`) for this story.
145
145
  2. Present the script to the user as a step-by-step guide.
146
146
  3. Wait for the user to confirm the behavioral correctness before moving to the next story or declaring the task done.
147
147
 
@@ -63,12 +63,12 @@ Once the user has answered the main questions, probe for assumptions:
63
63
 
64
64
  ### 4. Synthesize and confirm
65
65
 
66
- Summarize your understanding in 3–5 bullet points:
67
- - The problem
68
- - The solution
69
- - The key constraints
70
- - The success criteria
71
- - What's out of scope
66
+ Summarize your understanding in 3–5 bullet points aligned with [countable-story-format.md](file:///Users/danielvm/Developer/bigpowers/countable-story-format.md):
67
+ - The problem (feeds into §1 Business narrative)
68
+ - The solution and main flow (feeds into §5)
69
+ - The key constraints and alternative flows (feeds into §6)
70
+ - The success criteria (feeds into §17 Gherkin)
71
+ - What's out of scope (feeds into §18)
72
72
 
73
73
  Ask: "Is this an accurate summary? Anything missing or wrong?"
74
74
 
@@ -76,7 +76,7 @@ Ask: "Is this an accurate summary? Anything missing or wrong?"
76
76
 
77
77
  Once the spec is clear, recommend the next step:
78
78
  - If domain model needs work → `model-domain`
79
- - If ready to plan → `plan-release` then `plan-work` per story
79
+ - If ready to plan → `plan-release` (creates epic capsules with `epic.yaml` + story `.md` + `-tasks.yaml`) then `plan-work` per story
80
80
  - If a spike is needed first → `spike-prototype`
81
81
  - If architecture decisions are needed → `deepen-architecture` or `grill-me`
82
82
  - If the plan depends on a specific library or API → `grill-me` in docs mode
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: execute-plan
3
3
  model: haiku
4
- description: Batch-execute tasks from the active epic shard sequentially, with a human checkpoint after each step. Use when user has an approved plan and wants step-by-step oversight.
4
+ description: Batch-execute tasks from the active epic capsule sequentially, with a human checkpoint after each step. Use when user has an approved plan and wants step-by-step oversight.
5
5
  ---
6
6
 
7
7
  # Execute Plan
8
8
 
9
- Execute tasks from the **active epic** (`specs/epics/eNN-*.yaml` story `tasks[]`) one at a time, showing evidence after each step before proceeding.
9
+ Execute tasks from the **active epic** (`specs/epics/eNN-slug/epic.yaml` story `tasks[]`) one at a time, showing evidence after each step before proceeding.
10
10
 
11
11
  > **HARD GATE** — Do NOT proceed if on `main` or `master`. Run `kickoff-branch` first.
12
12
  >
@@ -16,7 +16,7 @@ Execute tasks from the **active epic** (`specs/epics/eNN-*.yaml` story `tasks[]`
16
16
 
17
17
  ### 1. Read the plan
18
18
 
19
- Read `specs/state.yaml` (`active_epic`, `active_story`) and the matching `specs/epics/*.yaml`. Parse `depends-on` in task descriptions for execution waves.
19
+ Read `specs/state.yaml` (`active_epic`, `active_story`) and the matching `specs/epics/*/epic.yaml`. Parse `depends-on` in task descriptions for execution waves.
20
20
 
21
21
  > **CONTEXT ISOLATION** — Spawn each skill with a **fresh context window**. Pass decisions only through `specs/state.yaml` `handoff` — never rely on prior chat history.
22
22
 
@@ -44,7 +44,7 @@ Update `specs/execution-status.yaml` when a story/epic completes (`bash scripts/
44
44
 
45
45
  ### 3. Blockers
46
46
 
47
- Report blocker; ask skip/adapt/stop; update epic shard if plan changes.
47
+ Report blocker; ask skip/adapt/stop; update epic capsule if plan changes.
48
48
 
49
49
  ### 4. Final report
50
50
 
@@ -69,7 +69,7 @@ Rules:
69
69
 
70
70
  ### 5. Write the bug file
71
71
 
72
- Save the investigation and fix plan to `specs/bugs/BUG-YYYY-MM-DDTHHMMSS.md`. Create the `specs/bugs/` directory if it doesn't exist.
72
+ Save the investigation and fix plan to `specs/bugs/BUG-NNN-slug.md`. Create the `specs/bugs/` directory if it doesn't exist.
73
73
 
74
74
  After writing, append a row to `specs/bugs/registry.yaml` with: bug_id (same timestamp), date, severity, priority, scope, summary, and file path. Create `specs/bugs/registry.yaml` if it doesn't exist.
75
75
 
@@ -92,7 +92,7 @@ Worktree: ../<task-slug>
92
92
  Ready to develop.
93
93
  ```
94
94
 
95
- Suggest next skill: `develop-tdd` to start the TDD loop, or `execute-plan` if `specs/release-plan.yaml + epic shards` already exists.
95
+ Suggest next skill: `develop-tdd` to start the TDD loop, or `execute-plan` if `specs/release-plan.yaml + epic capsule directories` already exists.
96
96
 
97
97
  ## Handoff
98
98
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: map-codebase
3
3
  model: sonnet
4
- description: "High-fidelity codebase surveying — analyzes stack, architecture, and gray areas (error handling, API shapes) and persists them into specs/plans/TECH_STACK_LATEST.md. Goes beyond survey-context by identifying 'signals' for planning."
4
+ description: "High-fidelity codebase surveying — analyzes stack, architecture, and gray areas (error handling, API shapes) and persists them into specs/tech-architecture/tech-stack.md. Goes beyond survey-context by identifying 'signals' for planning."
5
5
  ---
6
6
 
7
7
  # Map Codebase
@@ -38,8 +38,8 @@ Look for signals that will influence upcoming plans:
38
38
  - **Integration Points:** "We need to talk to the Stripe API, but there's no wrapper yet."
39
39
  - **Conventions:** "The team always uses functional components over classes."
40
40
 
41
- ### 5. Persist to specs/plans/TECH_STACK_LATEST.md
42
- Compile all findings into `specs/plans/TECH_STACK_LATEST.md`. This file serves as the project's "Long-Term Memory".
41
+ ### 5. Persist to specs/tech-architecture/tech-stack.md
42
+ Compile all findings into `specs/tech-architecture/tech-stack.md`. This file serves as the project's "Long-Term Memory".
43
43
 
44
44
  ```markdown
45
45
  # Project Context
@@ -66,4 +66,4 @@ Compile all findings into `specs/plans/TECH_STACK_LATEST.md`. This file serves a
66
66
  - When first joining a project.
67
67
  - Before a major refactor or architectural change.
68
68
  - When `survey-context` reveals a lack of domain knowledge.
69
- - To refresh `specs/plans/TECH_STACK_LATEST.md` after significant changes.
69
+ - To refresh `specs/tech-architecture/tech-stack.md` after significant changes.
@@ -126,15 +126,15 @@ Full mapping tables: [REFERENCE-GSD.md](./REFERENCE-GSD.md) (GSD) · [REFERENCE.
126
126
  | Source | Target |
127
127
  |--------|--------|
128
128
  | GSD `ROADMAP.md` | `specs/release-plan.yaml + epic shards` |
129
- | GSD `REQUIREMENTS.md` | `specs/requirements/SCOPE_LATEST.yaml` |
130
- | GSD `CONTEXT.md` (phases) | `specs/plans/TECH_STACK_LATEST.md` + `specs/adr/` |
131
- | GSD `PLAN.md` | `specs/epics/eNN-*.yaml` (tasks with verify) |
132
- | GSD `METHODOLOGY.md` | `specs/plans/METHODOLOGY_LATEST.md` |
133
- | spec-kit `spec.md` | `specs/requirements/SCOPE_LATEST.yaml` + `specs/plans/TECH_STACK_LATEST.md` |
134
- | spec-kit `plan.md` | `specs/plans/TECH_STACK_LATEST.md` + `specs/release-plan.yaml` + `specs/epics/` |
129
+ | GSD `REQUIREMENTS.md` | `specs/product/SCOPE_LATEST.yaml` |
130
+ | GSD `CONTEXT.md` (phases) | `specs/tech-architecture/tech-stack.md` + `specs/adr/` |
131
+ | GSD `PLAN.md` | `specs/epics/eNN-slug/epic.yaml` (tasks with verify in `-tasks.yaml`) |
132
+ | GSD `METHODOLOGY.md` | `specs/tech-architecture/tech-stack.md` |
133
+ | spec-kit `spec.md` | `specs/product/SCOPE_LATEST.yaml` + `specs/tech-architecture/tech-stack.md` |
134
+ | spec-kit `plan.md` | `specs/tech-architecture/tech-stack.md` + `specs/release-plan.yaml` + `specs/epics/` |
135
135
  | spec-kit `tasks.md` | `specs/epics/ (see slice-tasks)` |
136
- | BMAD `prd.md` | `specs/requirements/SCOPE_LATEST.yaml` |
137
- | BMAD `architecture.md` | `specs/plans/TECH_STACK_LATEST.md` + `specs/adr/` |
136
+ | BMAD `prd.md` | `specs/product/SCOPE_LATEST.yaml` |
137
+ | BMAD `architecture.md` | `specs/tech-architecture/tech-stack.md` + `specs/adr/` |
138
138
  | BMAD `epic-*.md` | `specs/release-plan.yaml + epic shards` |
139
139
  | BMAD `story-*.md` | `specs/epics/ (see slice-tasks)` |
140
140
  | BMAD `project-context.md` | `CLAUDE.md` (append project-specific section) |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: model-domain
3
3
  model: sonnet
4
- description: Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates specs/plans/TECH_STACK_LATEST.md and specs/adr/ inline as decisions crystallise. Use when user wants to stress-test a plan against their project's domain language and documented decisions.
4
+ description: Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates specs/tech-architecture/tech-stack.md and specs/adr/ inline as decisions crystallise. Use when user wants to stress-test a plan against their project's domain language and documented decisions.
5
5
  ---
6
6
 
7
7
  # Model Domain
@@ -32,7 +32,7 @@ Most repos have a single context:
32
32
  └── src/
33
33
  ```
34
34
 
35
- If a `specs/CONTEXT-MAP.md` exists, the repo has multiple contexts. The map points to where each one lives:
35
+ If a `specs/tech-architecture/tech-stack.md` exists, the repo has multiple contexts. The map points to where each one lives:
36
36
 
37
37
  ```
38
38
  /
@@ -50,13 +50,13 @@ If a `specs/CONTEXT-MAP.md` exists, the repo has multiple contexts. The map poin
50
50
  └── adr/
51
51
  ```
52
52
 
53
- Create files lazily — only when you have something to write. If no `specs/plans/TECH_STACK_LATEST.md` exists, create it when the first term is resolved. If no `specs/adr/` exists, create it when the first ADR is needed.
53
+ Create files lazily — only when you have something to write. If no `specs/tech-architecture/tech-stack.md` exists, create it when the first term is resolved. If no `specs/adr/` exists, create it when the first ADR is needed.
54
54
 
55
55
  ## During the session
56
56
 
57
57
  ### Challenge against the glossary
58
58
 
59
- When the user uses a term that conflicts with the existing language in `specs/plans/TECH_STACK_LATEST.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"
59
+ When the user uses a term that conflicts with the existing language in `specs/tech-architecture/tech-stack.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"
60
60
 
61
61
  ### Sharpen fuzzy language
62
62
 
@@ -70,11 +70,11 @@ When domain relationships are being discussed, stress-test them with specific sc
70
70
 
71
71
  When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?"
72
72
 
73
- ### Update specs/plans/TECH_STACK_LATEST.md inline
73
+ ### Update specs/tech-architecture/tech-stack.md inline
74
74
 
75
- When a term is resolved, update `specs/plans/TECH_STACK_LATEST.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).
75
+ When a term is resolved, update `specs/tech-architecture/tech-stack.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).
76
76
 
77
- Don't couple `specs/plans/TECH_STACK_LATEST.md` to implementation details. Only include terms that are meaningful to domain experts.
77
+ Don't couple `specs/tech-architecture/tech-stack.md` to implementation details. Only include terms that are meaningful to domain experts.
78
78
 
79
79
  ### Offer ADRs sparingly
80
80
 
@@ -93,4 +93,4 @@ When the plan touches shared state, async, or multi-threaded code:
93
93
  - [ ] List every **shared mutable** location (globals, singletons, module-level caches).
94
94
  - [ ] For each: who reads, who writes, synchronization mechanism (lock, actor, immutable copy).
95
95
  - [ ] Flag **race risks** (check-then-act, non-atomic read-modify-write) with severity.
96
- - [ ] Record findings in `specs/plans/TECH_STACK_LATEST.md` under `## Concurrency` or in an ADR if architectural.
96
+ - [ ] Record findings in `specs/tech-architecture/tech-stack.md` under `## Concurrency` or in an ADR if architectural.
@@ -38,7 +38,7 @@ See [REFERENCE.md](REFERENCE.md) for detailed phase specifications and gate type
38
38
 
39
39
  1. **Maintains state.yaml** — Tracks current phase, `active_epic`, `active_flow`, decisions, risks.
40
40
  2. **Spawns appropriate skills** — Routes by `model:` frontmatter. Decisions pass only via `specs/state.yaml` `handoff` between spawns.
41
- 3. **Methodology lenses** — If `specs/plans/TEST_PLAN_LATEST.md` or ADRs exist, apply at phase gates.
41
+ 3. **Methodology lenses** — If `specs/tech-architecture/test.md` or ADRs exist, apply at phase gates.
42
42
  4. **Enforces gates** — Hard stops if success criteria not met.
43
43
  5. **The Gatekeeper** — Between stories in BUILD: read `specs/execution-status.yaml`; previous story must be `done` before starting the next; use `build-epic` for the 8-step epic cycle.
44
44
  6. **Pauses for confirmation** — After each phase, asks "Ready to proceed?".
@@ -56,5 +56,5 @@ See [REFERENCE.md](REFERENCE.md) for full mode behaviors.
56
56
 
57
57
  All phases complete with artifacts:
58
58
  ```bash
59
- verify: test -f specs/state.yaml && test -f specs/release-plan.yaml && test -f specs/requirements/SCOPE_LATEST.yaml && ls specs/epics/*.yaml 1>/dev/null && echo "✅ All phases complete"
59
+ verify: test -f specs/state.yaml && test -f specs/release-plan.yaml && test -f specs/product/SCOPE_LATEST.yaml && ls specs/epics/*.yaml 1>/dev/null && echo "✅ All phases complete"
60
60
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "1.5.0",
3
+ "version": "2.0.0",
4
4
  "description": "61 agent skills for spec-driven, test-first software development by solo developers",
5
5
  "main": "index.js",
6
6
  "scripts": {