bigpowers 2.0.0 → 2.0.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/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [2.0.1](https://github.com/danielvm-git/bigpowers/compare/v2.0.0...v2.0.1) (2026-06-11)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **dashboard/tui:** render blessed tags and improve layout ([ca3a161](https://github.com/danielvm-git/bigpowers/commit/ca3a1617a341d05dacf3b571abf58cb6c0cfceeb))
7
+
1
8
  # [2.0.0](https://github.com/danielvm-git/bigpowers/compare/v1.5.1...v2.0.0) (2026-06-11)
2
9
 
3
10
 
package/CONVENTIONS.md CHANGED
@@ -49,13 +49,29 @@ Every skill that produces written output writes to `specs/` at the project root.
49
49
 
50
50
  | Layer | File | Answers |
51
51
  |-------|------|---------|
52
- | Session | `specs/state.yaml` | Active flow, epic/bug, ship-epic step, git |
53
- | Release index | `specs/release-plan.yaml` | Target semver, WSJF epic list, pointers to `epics/` |
52
+ | Session | `specs/state.yaml` | Active flow, epic/bug, ship-epic step, git, `handoff.next_skill`, `metrics.story_start` |
53
+ | Release index | `specs/release-plan.yaml` | Target semver, WSJF epic list, BCP baseline per story |
54
54
  | Progress | `specs/execution-status.yaml` | Flat status keys (`e01`, `e01s01`) — sole SoT for story state |
55
+ | Cycle-time ledger | `specs/metrics/cycle-times.yaml` | Per-story: BCPs, start, end, cycle minutes, BCP/hr **(v2.0.0)** |
55
56
  | Planning UI | `specs/planning-status.yaml` | Discover-phase workflow checklist (optional) |
56
57
 
57
58
  **Do not** put story status in `release-plan.yaml`. **Do not** duplicate the release plan inside `state.yaml`.
58
59
 
60
+ ### BCP accounting mandate (v2.0.0)
61
+
62
+ Every task written by `plan-work` MUST be labeled `[BCP N]` where N is the estimated Build Commit Points for that task. The story total is summed and written to `state.yaml` as `epic_cycle.story_bcps`. The BCP baseline for each story MUST appear in `specs/release-plan.yaml` before implementation begins. `release-branch` automatically appends a row to `specs/metrics/cycle-times.yaml` with the final BCP/hr after the story lands.
63
+
64
+ ### Timestamp mandate (v2.0.0)
65
+
66
+ - `survey-context` MUST write `metrics.story_start` (ISO 8601) to `specs/state.yaml` at the start of every story.
67
+ - `release-branch` MUST write `metrics.story_end`, `metrics.cycle_minutes`, and `metrics.bcp_per_hour` to `specs/state.yaml` and append a row to `specs/metrics/cycle-times.yaml` when the story lands.
68
+
69
+ Missing timestamps are a gate violation — do not advance past `release-branch` without them.
70
+
71
+ ### next_skill signaling mandate (v2.0.0)
72
+
73
+ Every critical-path skill (survey-context, plan-work, kickoff-branch, develop-tdd, verify-work, audit-code, commit-message, release-branch) MUST write `handoff.next_skill` to `specs/state.yaml` as its last action. Agents MUST read `state.yaml` and follow `handoff.next_skill` before asking "what comes next?".
74
+
59
75
  ### Intent vs delivery vs execution
60
76
 
61
77
  | Question | File | Format |
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  `bigpowers` provides a prescriptive, vertical-slice methodology for building software with AI agents (Claude Code, Gemini CLI, Cursor). It bridges the gap between raw LLM capabilities and professional engineering standards.
10
10
 
11
- Published on npm: [bigpowers@1.0.0](https://www.npmjs.com/package/bigpowers)
11
+ Published on npm: [bigpowers@2.0.0](https://www.npmjs.com/package/bigpowers)
12
12
 
13
13
  ---
14
14
 
@@ -96,16 +96,39 @@ bigpowers
96
96
 
97
97
  ---
98
98
 
99
- ## 🏗 The BMAD Lifecycle
99
+ ## 🏗 The v2.0.0 Lifecycle
100
100
 
101
- Every task in `bigpowers` follows a prescriptive lifecycle (see `SKILL-INDEX.md`):
101
+ Every project follows the **orchestrate-project 6-phase model** (full SOP: [`docs/WORKFLOW-SOP-v2.md`](docs/WORKFLOW-SOP-v2.md)):
102
102
 
103
- 1. **Discover**: survey-context, research-first, elaborate-spec.
104
- 2. **Elaborate / Plan**: scope-work, plan-work, slice-tasks.
105
- 3. **Build**: develop-tdd, execute-plan.
106
- 4. **Verify**: verify-work, run-evals — prove it works before review.
107
- 5. **Review / Release**: audit-code, request-review, release-branch.
108
- 6. **Sustain**: stocktake-skills, evolve-skill (benchmark-gated).
103
+ ```
104
+ ONE TIME seed-conventions (CLAUDE.md, .claude/, .gemini/, agents/, skill sync)
105
+
106
+ ONCE/PROJECT orchestrate-project
107
+
108
+ ├─ Ph1 DISCOVER survey-context, research-first, elaborate-spec
109
+ ├─ Ph2 ELABORATE model-domain, grill-me, define-language, deepen-architecture
110
+ ├─ Ph3 PLAN scope-work, slice-tasks, plan-work → release-plan.yaml (BCP baseline)
111
+ ├─ Ph4 BUILD build-epic × N stories
112
+
113
+ │ Per story — 8-step build-epic cycle:
114
+ │ 1. survey-context ← stamps story_start in state.yaml
115
+ │ 2. plan-work ← [BCP N] tasks + verify: commands
116
+ │ 3. kickoff-branch ← worktree + feature branch
117
+ │ 4. develop-tdd ← RED → GREEN → REFACTOR
118
+ │ 5. verify-work ← UAT gate
119
+ │ 6. audit-code ← quality gate ≥ 94%
120
+ │ 7. commit-message ← Conventional Commits + semver
121
+ │ 8. release-branch ← land to main; writes story_end + cycle-times.yaml
122
+
123
+ ├─ Ph5 VERIFY run-evals, verify-work (project-level)
124
+ └─ Ph6 RELEASE semantic-release → v1.0.0 MVP tag
125
+ ```
126
+
127
+ **Semver:** projects start at `0.0.0-β`; each `feat:` story → minor bump; developer declares MVP → `1.0.0`.
128
+
129
+ **BCP accounting:** every task labeled `[BCP N]`; story total in `state.yaml`; BCP/hr logged to `specs/metrics/cycle-times.yaml`.
130
+
131
+ **next_skill signaling:** each critical-path skill writes `handoff.next_skill` to `state.yaml`. Call `survey-context` after any interruption to resume exactly where you left off.
109
132
 
110
133
  ---
111
134
 
@@ -118,8 +141,9 @@ Every task in `bigpowers` follows a prescriptive lifecycle (see `SKILL-INDEX.md`
118
141
  | **Scope** | `specs/requirements/SCOPE_LATEST.yaml` | In-scope / out-of-scope and success criteria. |
119
142
  | **Vision** | `specs/requirements/VISION_LATEST.yaml` | North star and initiative success criteria. |
120
143
  | **Decisions** | `specs/adr/` | Architectural Decision Records (irreversible choices). |
121
- | **Roadmap** | `specs/release-plan.yaml` + `specs/epics/` | WSJF-prioritized epics and stories. |
122
- | **Current** | `specs/state.yaml` | Session flow, active epic, handoff. |
144
+ | **Roadmap** | `specs/release-plan.yaml` + `specs/epics/` | WSJF-prioritized epics and stories with BCP baseline. |
145
+ | **Current** | `specs/state.yaml` | Session flow, active epic, `handoff.next_skill`, timestamps. |
146
+ | **Metrics** | `specs/metrics/cycle-times.yaml` | Per-story BCPs, cycle minutes, BCP/hr (v2.0.0). |
123
147
  | **Index** | `SKILL-INDEX.md` | Canonical list of all active skills. |
124
148
  | **Style** | `CONVENTIONS.md` | Coding, testing, and naming standards. |
125
149
 
@@ -128,8 +152,10 @@ Every task in `bigpowers` follows a prescriptive lifecycle (see `SKILL-INDEX.md`
128
152
  ## 📁 Project Structure
129
153
 
130
154
  - `scripts/`: Installation, syncing, and compliance tools.
131
- - `specs/`: The "Brain" of your project all planning and decisions live here (YAML cockpit: `state.yaml`, `release-plan.yaml`, `epics/`, `requirements/`).
132
- - `specs/wiki/`: Deprecated Obsidian layeruse `visual-dashboard` HTTP cockpit instead of `maintain-wiki`.
155
+ - `specs/`: YAML cockpit — `state.yaml`, `release-plan.yaml`, `epics/`, `execution-status.yaml`, `requirements/`.
156
+ - `specs/metrics/`: Cycle-time ledger (`cycle-times.yaml`)per-story BCPs, timestamps, BCP/hr (v2.0.0).
157
+ - `dashboard/`: Live monitoring tool — TUI (`npm run dashboard`) and web (`npm run dashboard:web`, port 7742).
158
+ - `docs/`: Guides including `WORKFLOW-SOP-v2.md` (full SDLC SOP) and `using-bigpowers.md`.
133
159
  - `docs/references/`: Theoretical foundations (Uncle Bob, Ousterhout, Karpathy, etc.).
134
160
  - `[skill-name]/`: Source files for each of the 61 skills.
135
161
 
package/RELEASE.md CHANGED
@@ -48,12 +48,27 @@ npm view bigpowers
48
48
  # GitHub → Releases
49
49
  ```
50
50
 
51
+ ## Per-Project Semver Convention (v2.0.0)
52
+
53
+ When using bigpowers to build a *project* (not the bigpowers package itself), the recommended semver lifecycle is:
54
+
55
+ | Stage | Version | How |
56
+ |-------|---------|-----|
57
+ | Pre-delivery | `0.0.0-β` | Initial state after `seed-conventions` |
58
+ | Each `feat:` story lands | `0.1.0`, `0.2.0`, … | `semantic-release` minor bump |
59
+ | Developer declares MVP | `1.0.0` | Allow the `1.0.0` tag in release config |
60
+ | Post-MVP features | `1.1.0`, `1.2.0`, … | Normal semver from Conventional Commits |
61
+
62
+ > This keeps all pre-MVP work in the `0.x.x` range, making the `1.0.0` tag a meaningful project milestone rather than an arbitrary number.
63
+
64
+ ---
65
+
51
66
  ## Commit Message Format
52
67
 
53
68
  **Required for automatic releases:**
54
69
 
55
70
  ```
56
- feat(scope): description # Minor version bump (1.0.0 → 1.1.0)
71
+ feat(scope): description # Minor version bump (0.1.0 → 0.2.0 or 1.0.0 → 1.1.0)
57
72
  fix(scope): description # Patch version bump (1.0.0 → 1.0.1)
58
73
  docs: description # No version bump
59
74
  ```
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-11 (v3.1.0 — verified 61 active skills; 18 sub-op concepts absorbed as sub-sections into parent SKILL.md files; count confirmed accurate)
5
+ **Last updated:** 2026-06-11 (v2.0.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
 
@@ -84,7 +84,7 @@
84
84
  | 49 | Utility | `edit-document` | Edit documents in specs/ | specs/<name>.md | ✅ Active |
85
85
  | 50 | Utility | `session-state` | Track decisions in state.yaml; absorbs show-state, reset-state, compact-state, list-epics, check-gates | state.yaml | ✅ Active |
86
86
  | 51 | Utility | `migrate-spec` | Migrate foreign spec formats | specs/ | ✅ Active |
87
- | 52 | Utility | `visual-dashboard` | Browser dashboard | .bigpowers/dashboard/ | ✅ Active |
87
+ | 52 | Utility | `visual-dashboard` | Browser dashboard (HTTP cockpit) | `npm run visual-dashboard` → GET /cockpit.html | ✅ Active |
88
88
  | 53 | Utility | `write-document` | BMAD technical documents | specs/<name>.md | ✅ Active |
89
89
  | 54 | Utility | `setup-environment` | Pre-install deps before work | (.env, packages) | ✅ Active |
90
90
  | 55 | Utility | `reset-baseline` | Restore clean known state | (clean tree) | ✅ Active |
@@ -11,6 +11,8 @@ function renderEpicQueue(box, epics, executionStatus) {
11
11
  }
12
12
 
13
13
  let lines = [];
14
+ lines.push('{bold}EPIC QUEUE{/bold}');
15
+ lines.push('');
14
16
  let totalBcps = 0;
15
17
 
16
18
  epics.forEach(epic => {
@@ -15,7 +15,7 @@ function renderFilesystem(box, projectRoot) {
15
15
 
16
16
  const now = Date.now();
17
17
  const lines = [];
18
- lines.push('{bold}{cyan}Filesystem{/cyan}{/bold}');
18
+ lines.push('{bold}FILE SYSTEM{/bold}');
19
19
 
20
20
  let fileCount = 0;
21
21
 
@@ -9,6 +9,9 @@ const { renderStateYaml } = require('./state-yaml');
9
9
  const { renderFilesystem } = require('./filesystem');
10
10
  const { renderLedger } = require('./ledger');
11
11
 
12
+ // Blessed box defaults — tags must be enabled for markup to render
13
+ const BOX_DEFAULTS = { tags: true };
14
+
12
15
  let blessed;
13
16
  try {
14
17
  blessed = require('blessed');
@@ -41,6 +44,7 @@ function start(projectRoot) {
41
44
  height: 10,
42
45
  content: '{center}Terminal must be at least 120x30{/center}\n{center}Please resize and try again{/center}',
43
46
  border: 'line',
47
+ tags: true,
44
48
  style: { border: { fg: 'yellow' } }
45
49
  });
46
50
  screen.render();
@@ -48,75 +52,92 @@ function start(projectRoot) {
48
52
  }
49
53
 
50
54
  // Create layout zones
51
- const metricsBar = blessed.box({
55
+ const titleBar = blessed.box({
52
56
  parent: screen,
53
57
  top: 0,
54
58
  left: 0,
55
59
  width: '100%',
60
+ height: 1,
61
+ border: 'line',
62
+ tags: true,
63
+ style: { border: { fg: 'magenta' } }
64
+ });
65
+
66
+ const metricsBar = blessed.box({
67
+ parent: screen,
68
+ top: 1,
69
+ left: 0,
70
+ width: '100%',
56
71
  height: 3,
57
72
  border: 'line',
73
+ tags: true,
58
74
  style: { border: { fg: 'blue' } }
59
75
  });
60
76
 
61
77
  const pipeline = blessed.box({
62
78
  parent: screen,
63
- top: 3,
79
+ top: 4,
64
80
  left: 0,
65
81
  width: '100%',
66
82
  height: 5,
67
83
  border: 'line',
84
+ tags: true,
68
85
  style: { border: { fg: 'cyan' } }
69
86
  });
70
87
 
71
88
  const epicQueue = blessed.box({
72
89
  parent: screen,
73
- top: 8,
90
+ top: 9,
74
91
  left: 0,
75
92
  width: '33%',
76
- height: screen.height - 20,
93
+ height: screen.height - 21,
77
94
  border: 'line',
78
95
  scrollable: true,
79
96
  mouse: true,
80
97
  keys: true,
98
+ tags: true,
81
99
  style: { border: { fg: 'green' } }
82
100
  });
83
101
 
84
102
  const actionLog = blessed.box({
85
103
  parent: screen,
86
- top: 8,
104
+ top: 9,
87
105
  left: '33%',
88
106
  width: '33%',
89
- height: screen.height - 20,
107
+ height: screen.height - 21,
90
108
  border: 'line',
91
109
  scrollable: true,
92
110
  mouse: true,
93
111
  keys: true,
112
+ tags: true,
94
113
  style: { border: { fg: 'yellow' } }
95
114
  });
96
115
 
97
116
  const fsPanel = blessed.box({
98
117
  parent: screen,
99
- top: 8,
118
+ top: 9,
100
119
  left: '66%',
101
120
  width: '34%',
102
- height: screen.height - 20,
121
+ height: screen.height - 21,
103
122
  border: 'line',
104
123
  scrollable: true,
105
124
  mouse: true,
106
125
  keys: true,
126
+ tags: true,
107
127
  style: { border: { fg: 'magenta' } }
108
128
  });
109
129
 
110
130
  const ledger = blessed.box({
111
131
  parent: screen,
112
- top: screen.height - 12,
132
+ top: screen.height - 11,
113
133
  left: 0,
114
134
  width: '100%',
115
- height: 12,
135
+ height: 11,
116
136
  border: 'line',
117
137
  scrollable: true,
118
138
  mouse: true,
119
139
  keys: true,
140
+ tags: true,
120
141
  style: { border: { fg: 'white' } }
121
142
  });
122
143
 
@@ -128,7 +149,12 @@ function start(projectRoot) {
128
149
  const cycleTimes = readCycleTimes(projectRoot);
129
150
  const metrics = computeProjectMetrics(cycleTimes);
130
151
 
131
- renderMetricsBar(metricsBar, metrics, stateData);
152
+ // Render title bar
153
+ const epicTitle = stateData?.active_epic || '—';
154
+ const stepNum = stateData?.epicCycle?.current_step ? (stateData.epicCycle.completed_steps?.length || 0) + 1 : 0;
155
+ titleBar.setContent(`{bold}{magenta}bigpowers factory{/magenta}{/bold} — ${epicTitle} — step ${stepNum} / 8`);
156
+
157
+ renderMetricsBar(metricsBar, metrics, stateData, epics);
132
158
  renderPipeline(pipeline, stateData);
133
159
  renderEpicQueue(epicQueue, epics, executionStatus);
134
160
  renderStateYaml(actionLog, stateData);
@@ -1,9 +1,26 @@
1
- function renderMetricsBar(box, projectMetrics, stateData) {
1
+ function renderMetricsBar(box, projectMetrics, stateData, epics) {
2
2
  if (!box || typeof box.setContent !== 'function') {
3
3
  return;
4
4
  }
5
5
 
6
- const totalBcps = projectMetrics?.totalBcps ?? '-';
6
+ // Count epics and stories
7
+ let epicCount = 0;
8
+ let storyCount = 0;
9
+ let targetBcps = 0;
10
+
11
+ if (epics && Array.isArray(epics)) {
12
+ epicCount = epics.length;
13
+ epics.forEach(epic => {
14
+ if (epic.stories && Array.isArray(epic.stories)) {
15
+ storyCount += epic.stories.length;
16
+ epic.stories.forEach(story => {
17
+ targetBcps += story.bcps || 0;
18
+ });
19
+ }
20
+ });
21
+ }
22
+
23
+ const deliveredBcps = projectMetrics?.totalBcps ?? '-';
7
24
  const totalMin = projectMetrics?.totalMin ?? '-';
8
25
  const avgBcpPerHour = projectMetrics?.avgBcpPerHour ?? '-';
9
26
  const version = stateData?.release?.target_version ?? '-';
@@ -22,7 +39,7 @@ function renderMetricsBar(box, projectMetrics, stateData) {
22
39
  const avgCycleTime = totalMin === '-' ? '-' : `${totalMin}m`;
23
40
  const bcpHrDisplay = typeof avgBcpPerHour === 'number' ? avgBcpPerHour.toFixed(2) : avgBcpPerHour;
24
41
 
25
- const line = `BCPs: ${totalBcps} | Cycle: ${avgCycleTime} | {${bcpHrColor}}BCP/hr: ${bcpHrDisplay}{/${bcpHrColor}} | v${version}`;
42
+ const line = `epics: ${epicCount} | stories: ${storyCount} | BCPs: ${deliveredBcps}/${targetBcps} | cycle: ${avgCycleTime} | {${bcpHrColor}}BCP/hr: ${bcpHrDisplay}{/${bcpHrColor}} | v${version}`;
26
43
 
27
44
  box.setContent(line);
28
45
  }
@@ -13,32 +13,28 @@ function renderPipeline(box, stateData) {
13
13
  const currentStep = stateData.epicCycle?.current_step || null;
14
14
  const completedSteps = stateData.epicCycle?.completed_steps || [];
15
15
 
16
- // Build pipeline visualization
17
- const lines = [];
18
- lines.push('{bold}{cyan}Pipeline{/cyan}{/bold}');
19
- lines.push('');
20
-
21
- // Create step display
22
- const stepDisplay = STEPS.map((step, index) => {
16
+ // Build horizontal pipeline strip
17
+ const steps = STEPS.map((step, index) => {
23
18
  const isCompleted = completedSteps.includes(step);
24
19
  const isCurrent = step === currentStep;
25
20
 
26
- let display = ` ${index + 1}. ${step}`;
21
+ let display = `${index + 1} ${step}`;
27
22
 
28
23
  if (isCurrent) {
29
- display = `{reverse}{bold}${display}{/bold}{/reverse}`;
24
+ display = `{reverse}${display}{/reverse}`;
30
25
  } else if (isCompleted) {
31
26
  display = `{green-fg}${display}{/green-fg}`;
32
27
  } else {
33
- display = `{gray-fg}${display}{/gray-fg}`;
28
+ display = `{dim}${display}{/dim}`;
34
29
  }
35
30
 
36
31
  return display;
37
- }).join('\n');
32
+ }).join(' {bold}›{/bold} ');
38
33
 
39
- lines.push(stepDisplay);
34
+ const lines = [];
35
+ lines.push(`{bold}{cyan}Pipeline{/cyan}{/bold} step ${STEPS.indexOf(currentStep) + 1} / ${STEPS.length}`);
40
36
  lines.push('');
41
- lines.push(`{dim}Current: ${currentStep || '—'}{/dim}`);
37
+ lines.push(steps);
42
38
 
43
39
  box.setContent(lines.join('\n'));
44
40
  }
@@ -9,7 +9,7 @@ function renderStateYaml(box, stateData) {
9
9
  }
10
10
 
11
11
  const lines = [];
12
- lines.push('{bold}{cyan}state.yaml{/cyan}{/bold}');
12
+ lines.push('{bold}CURRENT ACTION{/bold}');
13
13
  lines.push('');
14
14
 
15
15
  const pairs = [
@@ -23,10 +23,14 @@ Detailed documentation for the `orchestrate-project` meta-skill.
23
23
  - **Gate**: Quality (request-review ≥94%) + slopcheck [SUS]/[SLOP].
24
24
 
25
25
  ### PHASE 4: BUILD
26
- - **Goal**: Execute the plan step-by-step using TDD and vertical slices.
27
- - **Deliverables**: Code; `execution-status.yaml` updated per story.
28
- - **Skills**: `kickoff-branch`, `develop-tdd`, `delegate-task`, `execute-plan`.
29
- - **Gate**: Integration tests PASS.
26
+ - **Goal**: Execute the plan story-by-story using the 8-step `build-epic` cycle with TDD and vertical slices.
27
+ - **Deliverables**: Code; `execution-status.yaml` updated per story; `specs/metrics/cycle-times.yaml` row per story.
28
+ - **Skills**: `build-epic` (conductor) → per-story: `survey-context`, `plan-work`, `kickoff-branch`, `develop-tdd`, `verify-work`, `audit-code`, `commit-message`, `release-branch`.
29
+ - **BCP tracking**: `plan-work` labels every task `[BCP N]`; total written to `state.yaml` as `epic_cycle.story_bcps`. BCP baseline must exist in `release-plan.yaml` before starting.
30
+ - **Timestamps**: `survey-context` stamps `metrics.story_start`; `release-branch` stamps `metrics.story_end` and writes BCP/hr to `specs/metrics/cycle-times.yaml`.
31
+ - **next_skill**: Each critical-path skill writes `handoff.next_skill` to `state.yaml`. Agents resume by reading `state.yaml` — no guessing.
32
+ - **Dashboard**: `npm run dashboard` (TUI) or `npm run dashboard:web` (browser, port 7742) shows live pipeline, epic queue, BCP metrics, and cycle-time ledger.
33
+ - **Gate**: Integration tests PASS; all 8 build-epic steps completed per story.
30
34
 
31
35
  ### PHASE 5: VERIFY
32
36
  - **Goal**: Validate success criteria and ensure production readiness.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "61 agent skills for spec-driven, test-first software development by solo developers",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -203,7 +203,7 @@ touch specs/tech-architecture/design.md
203
203
  touch specs/tech-architecture/REFACTOR_LATEST.md
204
204
  touch specs/tech-architecture/IMPACT_LATEST.md
205
205
  touch specs/bugs/registry.yaml
206
- echo "# Specs\n\nAll planning documents for this project. Evolved bigpowers structure (v4.0.0+)." > specs/README.md
206
+ echo "# Specs\n\nAll planning documents for this project. Evolved bigpowers structure (v2.0.0+)." > specs/README.md
207
207
  ```
208
208
 
209
209
  **Note:** `specs/state.yaml.lock` is NOT pre-created — it is acquired and released dynamically during writes to prevent concurrency conflicts.