bigpowers 2.29.0 → 2.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.pi/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.29.0",
3
+ "version": "2.31.0",
4
4
  "description": "70 skills — 61 agent skills for spec-driven, test-first software development by solo developers",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -93,6 +93,31 @@ in_scope:
93
93
 
94
94
  See [REFERENCE.md — in_scope format with ID tracking](./REFERENCE.md#in_scope-format-with-id-tracking) for examples.
95
95
 
96
+ #### Traceability Output (FR-XX, UJ-XX)
97
+
98
+ When source has FR-XX or UJ-XX IDs, emit `specs/product/REQUIREMENTS_TRACE.yaml` for end-to-end requirement traceability:
99
+
100
+ ```yaml
101
+ trace:
102
+ - id: FR-001
103
+ type: functional_requirement
104
+ description: "User can register with email/password"
105
+ epic: e02-auth-ui
106
+ story: e02s01
107
+ verify: "grep -q 'FR-001' specs/product/SCOPE_LATEST.yaml && echo OK"
108
+ - id: UJ-001
109
+ type: user_journey
110
+ description: "New user completes registration flow"
111
+ epic: e02-auth-ui
112
+ story: e02s01
113
+ ```
114
+
115
+ **Existing trace file:** If `REQUIREMENTS_TRACE.yaml` already exists, prompt: "REQUIREMENTS_TRACE.yaml exists. [overwrite / merge / skip]"
116
+
117
+ **No FR-XX/UJ-XX found:** Skip trace file; add note to state.yaml handoff: "No FR-XX/UJ-XX IDs found — traceability file skipped".
118
+
119
+ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirements_traceyaml-format) for the complete schema.
120
+
96
121
  > **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
97
122
  >
98
123
  > → verify: `git diff --name-only HEAD -- specs/ 2>/dev/null | head -20`
@@ -101,19 +126,38 @@ See [REFERENCE.md — in_scope format with ID tracking](./REFERENCE.md#in_scope-
101
126
 
102
127
  ### Step 4 — Generate state.yaml
103
128
 
104
- Always regenerate `specs/state.yaml` from scratch in bigpowers format (see REFERENCE.md for template):
129
+ Always regenerate `specs/state.yaml` from scratch in bigpowers YAML format (see REFERENCE.md for template). The **handoff block is mandatory** and must include all four fields:
105
130
 
106
- ```markdown
107
- # Session State: <project name>
108
- ## Current Milestone
109
- Migrated from <framework> on <date>. Next: review generated specs and run plan-work.
110
- ## Pending Releases
111
- - [ ] Review migrated specs
112
- - [ ] Run elaborate-spec to validate scope
113
- - [ ] Run plan-work to produce first release plan
131
+ ```yaml
132
+ active_flow: null
133
+ active_epic_id: null
134
+ active_story_id: null
135
+
136
+ # ... other state fields ...
137
+
138
+ handoff:
139
+ last_step_completed: "Migrated from <framework> on <date>"
140
+ open_decisions:
141
+ - "decision text here"
142
+ required_reading:
143
+ - specs/product/VISION_LATEST.yaml
144
+ - specs/product/SCOPE_LATEST.yaml
145
+ - specs/tech-architecture/TECH_STACK_LATEST.md
146
+ - specs/release-plan.yaml
147
+ next_skill: survey-context
114
148
  ```
115
149
 
116
- verify: `[ -f specs/state.yaml ] && echo "ok" || echo "MISSING: specs/state.yaml not created"`
150
+ If no open decisions were found during migration, the `open_decisions` list may be empty with an explanatory comment:
151
+
152
+ ```yaml
153
+ handoff:
154
+ last_step_completed: "..."
155
+ open_decisions: [] # None — all decisions resolved during migration
156
+ required_reading: [...]
157
+ next_skill: survey-context
158
+ ```
159
+
160
+ → verify: `grep -q 'handoff:' specs/state.yaml && grep -q 'last_step_completed' specs/state.yaml && echo "ok" || echo "MISSING or INCOMPLETE: handoff block"`
117
161
 
118
162
  ### Step 5 — Surface learnings (optional)
119
163
 
@@ -425,7 +469,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
425
469
  ### From GSD
426
470
 
427
471
  - [ ] **`specs/tech-architecture/METHODOLOGY_LATEST.md`** — Standing analytical lenses. Agents read before planning.
428
- - [ ] **`handoff` block in state.yaml** — Last skill, last step, required reading for next session.
472
+ - [x] **`handoff` block in state.yaml** — Last skill, last step, required reading for next session. (adopted: mandatory in Step 4 output)
429
473
  - [x] **ID tracking in SCOPE_LATEST.yaml** — FR/UJ IDs for spec → plan → verification traceability. (adopted in Step 3 transform)
430
474
 
431
475
  ### From spec-kit
@@ -436,7 +480,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
436
480
 
437
481
  ### From BMAD
438
482
 
439
- - [ ] **FR-XX + UJ-XX in SCOPE_LATEST.yaml** — Rigorous traceability.
483
+ - [x] **FR-XX + UJ-XX in SCOPE_LATEST.yaml** — Rigorous traceability. (adopted: REQUIREMENTS_TRACE.yaml emitted on migration)
440
484
  - [ ] **`specs/DECISION-LOG.md`** — Lightweight decisions below ADR threshold.
441
485
  - [ ] **Adversarial review pass** — Critique epic shard before `develop-tdd`.
442
486
 
@@ -497,29 +541,86 @@ in_scope:
497
541
 
498
542
  **When source has mixed IDs:** Entries with source IDs get `id:` fields; entries without IDs receive auto-generated IDs. A comment block at the top of `in_scope` documents which IDs were auto-generated.
499
543
 
500
- ### `specs/state.yaml` template format
501
-
502
- Generated during Step 4 of migration. Regenerate from scratch in bigpowers format:
503
-
504
- ```markdown
505
- # Session State: <project name>
544
+ ### REQUIREMENTS_TRACE.yaml format
506
545
 
507
- ## Current Milestone
546
+ Emitted when source has FR-XX (functional requirement) or UJ-XX (user journey) IDs. Maps source requirements to bigpowers epic/story structure and verification commands:
508
547
 
509
- Migrated from <framework> on <date>. Next: review generated specs and run plan-work.
548
+ ```yaml
549
+ trace:
550
+ # Functional Requirements
551
+ - id: FR-001
552
+ type: functional_requirement
553
+ description: "User can register with email/password"
554
+ source_artifact: "prd.md"
555
+ epic: "e02-auth-ui"
556
+ story: "e02s01"
557
+ verify: "grep -q 'FR-001' specs/product/SCOPE_LATEST.yaml && echo OK"
558
+
559
+ # User Journeys
560
+ - id: UJ-001
561
+ type: user_journey
562
+ description: "New user completes registration flow"
563
+ source_artifact: "epic-auth-ui.md"
564
+ epic: "e02-auth-ui"
565
+ story: "e02s01"
566
+ verify: "grep -q 'UJ-001' specs/epics/e02-auth-ui/epic.yaml && echo OK"
567
+
568
+ metadata:
569
+ source_framework: "BMAD"
570
+ migrated_at: "2026-06-26T12:00:00Z"
571
+ total_requirements: 2
572
+ coverage: "All FR-XX and UJ-XX IDs from source mapped"
573
+ ```
510
574
 
511
- ## Git Metadata
575
+ **When source has no FR-XX/UJ-XX:** Skip REQUIREMENTS_TRACE.yaml. Add note to `state.yaml` handoff: "No FR-XX/UJ-XX IDs found — traceability file skipped".
512
576
 
513
- - **Branch**: <current branch>
514
- - **Hash**: <git rev-parse HEAD>
577
+ **Existing trace file:** If REQUIREMENTS_TRACE.yaml exists, prompt user: "Overwrite? [yes / merge / skip]". Merge appends new entries; skip leaves existing file intact.
515
578
 
516
- ## Completed Releases
579
+ ### `specs/state.yaml` template format
517
580
 
518
- (none migration starting point)
581
+ Generated during Step 4 of migration. Regenerate from scratch in bigpowers YAML format. The **handoff block is mandatory**:
519
582
 
520
- ## Pending Releases
583
+ ```yaml
584
+ active_flow: null
585
+ active_epic_id: null
586
+ active_story_id: null
587
+ completed_epic: false
588
+
589
+ epic_cycle:
590
+ current_step: null
591
+ next_skill: null
592
+ story_bcps: null
593
+ completed_steps: []
594
+ audit_result: null
595
+
596
+ bug_cycle:
597
+ current_step: null
598
+ completed_steps: []
599
+
600
+ release:
601
+ target_version: null
602
+ last_tag: null
603
+ last_publish: null
604
+ ci_verified: false
605
+
606
+ metrics:
607
+ story_start: null
608
+ story_end: null
609
+ cycle_minutes: null
610
+ bcp_per_hour: null
611
+
612
+ git:
613
+ branch: <current branch>
614
+ hash: <git rev-parse HEAD>
615
+ pushed: false
521
616
 
522
- - [ ] Review migrated specs
523
- - [ ] Run elaborate-spec to validate scope
524
- - [ ] Run plan-work to produce first release plan
617
+ handoff:
618
+ last_step_completed: "Migrated from <framework> on <date>"
619
+ open_decisions: [] # Empty if all decisions resolved during migration
620
+ required_reading:
621
+ - specs/product/VISION_LATEST.yaml
622
+ - specs/product/SCOPE_LATEST.yaml
623
+ - specs/tech-architecture/TECH_STACK_LATEST.md
624
+ - specs/release-plan.yaml
625
+ next_skill: survey-context
525
626
  ```
@@ -95,6 +95,31 @@ in_scope:
95
95
 
96
96
  See [REFERENCE.md — in_scope format with ID tracking](./REFERENCE.md#in_scope-format-with-id-tracking) for examples.
97
97
 
98
+ #### Traceability Output (FR-XX, UJ-XX)
99
+
100
+ When source has FR-XX or UJ-XX IDs, emit `specs/product/REQUIREMENTS_TRACE.yaml` for end-to-end requirement traceability:
101
+
102
+ ```yaml
103
+ trace:
104
+ - id: FR-001
105
+ type: functional_requirement
106
+ description: "User can register with email/password"
107
+ epic: e02-auth-ui
108
+ story: e02s01
109
+ verify: "grep -q 'FR-001' specs/product/SCOPE_LATEST.yaml && echo OK"
110
+ - id: UJ-001
111
+ type: user_journey
112
+ description: "New user completes registration flow"
113
+ epic: e02-auth-ui
114
+ story: e02s01
115
+ ```
116
+
117
+ **Existing trace file:** If `REQUIREMENTS_TRACE.yaml` already exists, prompt: "REQUIREMENTS_TRACE.yaml exists. [overwrite / merge / skip]"
118
+
119
+ **No FR-XX/UJ-XX found:** Skip trace file; add note to state.yaml handoff: "No FR-XX/UJ-XX IDs found — traceability file skipped".
120
+
121
+ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirements_traceyaml-format) for the complete schema.
122
+
98
123
  > **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
99
124
  >
100
125
  > → verify: `git diff --name-only HEAD -- specs/ 2>/dev/null | head -20`
@@ -103,19 +128,38 @@ See [REFERENCE.md — in_scope format with ID tracking](./REFERENCE.md#in_scope-
103
128
 
104
129
  ### Step 4 — Generate state.yaml
105
130
 
106
- Always regenerate `specs/state.yaml` from scratch in bigpowers format (see REFERENCE.md for template):
131
+ Always regenerate `specs/state.yaml` from scratch in bigpowers YAML format (see REFERENCE.md for template). The **handoff block is mandatory** and must include all four fields:
107
132
 
108
- ```markdown
109
- # Session State: <project name>
110
- ## Current Milestone
111
- Migrated from <framework> on <date>. Next: review generated specs and run plan-work.
112
- ## Pending Releases
113
- - [ ] Review migrated specs
114
- - [ ] Run elaborate-spec to validate scope
115
- - [ ] Run plan-work to produce first release plan
133
+ ```yaml
134
+ active_flow: null
135
+ active_epic_id: null
136
+ active_story_id: null
137
+
138
+ # ... other state fields ...
139
+
140
+ handoff:
141
+ last_step_completed: "Migrated from <framework> on <date>"
142
+ open_decisions:
143
+ - "decision text here"
144
+ required_reading:
145
+ - specs/product/VISION_LATEST.yaml
146
+ - specs/product/SCOPE_LATEST.yaml
147
+ - specs/tech-architecture/TECH_STACK_LATEST.md
148
+ - specs/release-plan.yaml
149
+ next_skill: survey-context
116
150
  ```
117
151
 
118
- verify: `[ -f specs/state.yaml ] && echo "ok" || echo "MISSING: specs/state.yaml not created"`
152
+ If no open decisions were found during migration, the `open_decisions` list may be empty with an explanatory comment:
153
+
154
+ ```yaml
155
+ handoff:
156
+ last_step_completed: "..."
157
+ open_decisions: [] # None — all decisions resolved during migration
158
+ required_reading: [...]
159
+ next_skill: survey-context
160
+ ```
161
+
162
+ → verify: `grep -q 'handoff:' specs/state.yaml && grep -q 'last_step_completed' specs/state.yaml && echo "ok" || echo "MISSING or INCOMPLETE: handoff block"`
119
163
 
120
164
  ### Step 5 — Surface learnings (optional)
121
165
 
@@ -427,7 +471,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
427
471
  ### From GSD
428
472
 
429
473
  - [ ] **`specs/tech-architecture/METHODOLOGY_LATEST.md`** — Standing analytical lenses. Agents read before planning.
430
- - [ ] **`handoff` block in state.yaml** — Last skill, last step, required reading for next session.
474
+ - [x] **`handoff` block in state.yaml** — Last skill, last step, required reading for next session. (adopted: mandatory in Step 4 output)
431
475
  - [x] **ID tracking in SCOPE_LATEST.yaml** — FR/UJ IDs for spec → plan → verification traceability. (adopted in Step 3 transform)
432
476
 
433
477
  ### From spec-kit
@@ -438,7 +482,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
438
482
 
439
483
  ### From BMAD
440
484
 
441
- - [ ] **FR-XX + UJ-XX in SCOPE_LATEST.yaml** — Rigorous traceability.
485
+ - [x] **FR-XX + UJ-XX in SCOPE_LATEST.yaml** — Rigorous traceability. (adopted: REQUIREMENTS_TRACE.yaml emitted on migration)
442
486
  - [ ] **`specs/DECISION-LOG.md`** — Lightweight decisions below ADR threshold.
443
487
  - [ ] **Adversarial review pass** — Critique epic shard before `develop-tdd`.
444
488
 
@@ -499,29 +543,86 @@ in_scope:
499
543
 
500
544
  **When source has mixed IDs:** Entries with source IDs get `id:` fields; entries without IDs receive auto-generated IDs. A comment block at the top of `in_scope` documents which IDs were auto-generated.
501
545
 
502
- ### `specs/state.yaml` template format
503
-
504
- Generated during Step 4 of migration. Regenerate from scratch in bigpowers format:
505
-
506
- ```markdown
507
- # Session State: <project name>
546
+ ### REQUIREMENTS_TRACE.yaml format
508
547
 
509
- ## Current Milestone
548
+ Emitted when source has FR-XX (functional requirement) or UJ-XX (user journey) IDs. Maps source requirements to bigpowers epic/story structure and verification commands:
510
549
 
511
- Migrated from <framework> on <date>. Next: review generated specs and run plan-work.
550
+ ```yaml
551
+ trace:
552
+ # Functional Requirements
553
+ - id: FR-001
554
+ type: functional_requirement
555
+ description: "User can register with email/password"
556
+ source_artifact: "prd.md"
557
+ epic: "e02-auth-ui"
558
+ story: "e02s01"
559
+ verify: "grep -q 'FR-001' specs/product/SCOPE_LATEST.yaml && echo OK"
560
+
561
+ # User Journeys
562
+ - id: UJ-001
563
+ type: user_journey
564
+ description: "New user completes registration flow"
565
+ source_artifact: "epic-auth-ui.md"
566
+ epic: "e02-auth-ui"
567
+ story: "e02s01"
568
+ verify: "grep -q 'UJ-001' specs/epics/e02-auth-ui/epic.yaml && echo OK"
569
+
570
+ metadata:
571
+ source_framework: "BMAD"
572
+ migrated_at: "2026-06-26T12:00:00Z"
573
+ total_requirements: 2
574
+ coverage: "All FR-XX and UJ-XX IDs from source mapped"
575
+ ```
512
576
 
513
- ## Git Metadata
577
+ **When source has no FR-XX/UJ-XX:** Skip REQUIREMENTS_TRACE.yaml. Add note to `state.yaml` handoff: "No FR-XX/UJ-XX IDs found — traceability file skipped".
514
578
 
515
- - **Branch**: <current branch>
516
- - **Hash**: <git rev-parse HEAD>
579
+ **Existing trace file:** If REQUIREMENTS_TRACE.yaml exists, prompt user: "Overwrite? [yes / merge / skip]". Merge appends new entries; skip leaves existing file intact.
517
580
 
518
- ## Completed Releases
581
+ ### `specs/state.yaml` template format
519
582
 
520
- (none migration starting point)
583
+ Generated during Step 4 of migration. Regenerate from scratch in bigpowers YAML format. The **handoff block is mandatory**:
521
584
 
522
- ## Pending Releases
585
+ ```yaml
586
+ active_flow: null
587
+ active_epic_id: null
588
+ active_story_id: null
589
+ completed_epic: false
590
+
591
+ epic_cycle:
592
+ current_step: null
593
+ next_skill: null
594
+ story_bcps: null
595
+ completed_steps: []
596
+ audit_result: null
597
+
598
+ bug_cycle:
599
+ current_step: null
600
+ completed_steps: []
601
+
602
+ release:
603
+ target_version: null
604
+ last_tag: null
605
+ last_publish: null
606
+ ci_verified: false
607
+
608
+ metrics:
609
+ story_start: null
610
+ story_end: null
611
+ cycle_minutes: null
612
+ bcp_per_hour: null
613
+
614
+ git:
615
+ branch: <current branch>
616
+ hash: <git rev-parse HEAD>
617
+ pushed: false
523
618
 
524
- - [ ] Review migrated specs
525
- - [ ] Run elaborate-spec to validate scope
526
- - [ ] Run plan-work to produce first release plan
619
+ handoff:
620
+ last_step_completed: "Migrated from <framework> on <date>"
621
+ open_decisions: [] # Empty if all decisions resolved during migration
622
+ required_reading:
623
+ - specs/product/VISION_LATEST.yaml
624
+ - specs/product/SCOPE_LATEST.yaml
625
+ - specs/tech-architecture/TECH_STACK_LATEST.md
626
+ - specs/release-plan.yaml
627
+ next_skill: survey-context
527
628
  ```
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [2.31.0](https://github.com/danielvm-git/bigpowers/compare/v2.30.0...v2.31.0) (2026-06-26)
2
+
3
+
4
+ ### Features
5
+
6
+ * **migrate-spec:** make handoff block mandatory in Step 4 output ([1f05663](https://github.com/danielvm-git/bigpowers/commit/1f0566320356d8de4d3c2775ddebc3b17cf27fe6))
7
+
8
+ # [2.30.0](https://github.com/danielvm-git/bigpowers/compare/v2.29.0...v2.30.0) (2026-06-26)
9
+
10
+
11
+ ### Features
12
+
13
+ * **migrate-spec:** emit REQUIREMENTS_TRACE.yaml for FR-XX/UJ-XX IDs ([955a1fd](https://github.com/danielvm-git/bigpowers/commit/955a1fd37b898ec70a86895d8772f0ec6fb8a0fa))
14
+
1
15
  # [2.29.0](https://github.com/danielvm-git/bigpowers/compare/v2.28.0...v2.29.0) (2026-06-26)
2
16
 
3
17
 
@@ -0,0 +1,34 @@
1
+ # Proposed Commit Message
2
+
3
+ ## Type and Scope
4
+ `feat(migrate-spec)` — Minor version bump
5
+
6
+ ## Title
7
+ ```
8
+ feat(migrate-spec): make handoff block mandatory in Step 4 output
9
+ ```
10
+
11
+ ## Body
12
+ ```
13
+ The handoff block (last_step_completed, open_decisions, required_reading,
14
+ next_skill) is now a mandatory part of state.yaml generation, not optional.
15
+
16
+ During real migrations, the handoff block proved immediately useful — the next
17
+ agent reads it first to understand context, decisions, and required reading.
18
+ Promoting it from optional to mandatory ensures every migration output includes
19
+ this metadata.
20
+
21
+ Changes:
22
+ - SKILL.md Step 4: updated to mandate handoff block with YAML format example
23
+ - REFERENCE.md: added complete state.yaml YAML template with handoff structure
24
+ - Learnings table: marked handoff as adopted (from GSD learning set)
25
+ ```
26
+
27
+ ## Release Impact
28
+ - **Bump Type:** `minor` (X.Y.z)
29
+ - **Rationale:** New mandatory output structure in migrate-spec skill
30
+
31
+ ## Notes
32
+ - Documentation-only change (no code changes)
33
+ - All verify commands pass
34
+ - Audit gate: PASS (10/10 items)
package/SKILL-INDEX.md CHANGED
@@ -3,7 +3,7 @@
3
3
  > **DO NOT EDIT** — This file is auto-generated by `scripts/generate-skill-index.sh`.
4
4
  > Edit `SKILL.md` source files or `skills-lock.json` instead. Run `bash scripts/sync-skills.sh` to regenerate.
5
5
 
6
- **Generated:** 2026-06-26T22:20:53Z
6
+ **Generated:** 2026-06-26T22:57:50Z
7
7
  **Skills:** 70
8
8
 
9
9
  ---
@@ -133,7 +133,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
133
133
  ### From GSD
134
134
 
135
135
  - [ ] **`specs/tech-architecture/METHODOLOGY_LATEST.md`** — Standing analytical lenses. Agents read before planning.
136
- - [ ] **`handoff` block in state.yaml** — Last skill, last step, required reading for next session.
136
+ - [x] **`handoff` block in state.yaml** — Last skill, last step, required reading for next session. (adopted: mandatory in Step 4 output)
137
137
  - [x] **ID tracking in SCOPE_LATEST.yaml** — FR/UJ IDs for spec → plan → verification traceability. (adopted in Step 3 transform)
138
138
 
139
139
  ### From spec-kit
@@ -144,7 +144,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
144
144
 
145
145
  ### From BMAD
146
146
 
147
- - [ ] **FR-XX + UJ-XX in SCOPE_LATEST.yaml** — Rigorous traceability.
147
+ - [x] **FR-XX + UJ-XX in SCOPE_LATEST.yaml** — Rigorous traceability. (adopted: REQUIREMENTS_TRACE.yaml emitted on migration)
148
148
  - [ ] **`specs/DECISION-LOG.md`** — Lightweight decisions below ADR threshold.
149
149
  - [ ] **Adversarial review pass** — Critique epic shard before `develop-tdd`.
150
150
 
@@ -205,29 +205,86 @@ in_scope:
205
205
 
206
206
  **When source has mixed IDs:** Entries with source IDs get `id:` fields; entries without IDs receive auto-generated IDs. A comment block at the top of `in_scope` documents which IDs were auto-generated.
207
207
 
208
- ### `specs/state.yaml` template format
209
-
210
- Generated during Step 4 of migration. Regenerate from scratch in bigpowers format:
211
-
212
- ```markdown
213
- # Session State: <project name>
214
-
215
- ## Current Milestone
208
+ ### REQUIREMENTS_TRACE.yaml format
216
209
 
217
- Migrated from <framework> on <date>. Next: review generated specs and run plan-work.
210
+ Emitted when source has FR-XX (functional requirement) or UJ-XX (user journey) IDs. Maps source requirements to bigpowers epic/story structure and verification commands:
218
211
 
219
- ## Git Metadata
212
+ ```yaml
213
+ trace:
214
+ # Functional Requirements
215
+ - id: FR-001
216
+ type: functional_requirement
217
+ description: "User can register with email/password"
218
+ source_artifact: "prd.md"
219
+ epic: "e02-auth-ui"
220
+ story: "e02s01"
221
+ verify: "grep -q 'FR-001' specs/product/SCOPE_LATEST.yaml && echo OK"
222
+
223
+ # User Journeys
224
+ - id: UJ-001
225
+ type: user_journey
226
+ description: "New user completes registration flow"
227
+ source_artifact: "epic-auth-ui.md"
228
+ epic: "e02-auth-ui"
229
+ story: "e02s01"
230
+ verify: "grep -q 'UJ-001' specs/epics/e02-auth-ui/epic.yaml && echo OK"
231
+
232
+ metadata:
233
+ source_framework: "BMAD"
234
+ migrated_at: "2026-06-26T12:00:00Z"
235
+ total_requirements: 2
236
+ coverage: "All FR-XX and UJ-XX IDs from source mapped"
237
+ ```
220
238
 
221
- - **Branch**: <current branch>
222
- - **Hash**: <git rev-parse HEAD>
239
+ **When source has no FR-XX/UJ-XX:** Skip REQUIREMENTS_TRACE.yaml. Add note to `state.yaml` handoff: "No FR-XX/UJ-XX IDs found — traceability file skipped".
223
240
 
224
- ## Completed Releases
241
+ **Existing trace file:** If REQUIREMENTS_TRACE.yaml exists, prompt user: "Overwrite? [yes / merge / skip]". Merge appends new entries; skip leaves existing file intact.
225
242
 
226
- (none migration starting point)
243
+ ### `specs/state.yaml` template format
227
244
 
228
- ## Pending Releases
245
+ Generated during Step 4 of migration. Regenerate from scratch in bigpowers YAML format. The **handoff block is mandatory**:
229
246
 
230
- - [ ] Review migrated specs
231
- - [ ] Run elaborate-spec to validate scope
232
- - [ ] Run plan-work to produce first release plan
247
+ ```yaml
248
+ active_flow: null
249
+ active_epic_id: null
250
+ active_story_id: null
251
+ completed_epic: false
252
+
253
+ epic_cycle:
254
+ current_step: null
255
+ next_skill: null
256
+ story_bcps: null
257
+ completed_steps: []
258
+ audit_result: null
259
+
260
+ bug_cycle:
261
+ current_step: null
262
+ completed_steps: []
263
+
264
+ release:
265
+ target_version: null
266
+ last_tag: null
267
+ last_publish: null
268
+ ci_verified: false
269
+
270
+ metrics:
271
+ story_start: null
272
+ story_end: null
273
+ cycle_minutes: null
274
+ bcp_per_hour: null
275
+
276
+ git:
277
+ branch: <current branch>
278
+ hash: <git rev-parse HEAD>
279
+ pushed: false
280
+
281
+ handoff:
282
+ last_step_completed: "Migrated from <framework> on <date>"
283
+ open_decisions: [] # Empty if all decisions resolved during migration
284
+ required_reading:
285
+ - specs/product/VISION_LATEST.yaml
286
+ - specs/product/SCOPE_LATEST.yaml
287
+ - specs/tech-architecture/TECH_STACK_LATEST.md
288
+ - specs/release-plan.yaml
289
+ next_skill: survey-context
233
290
  ```
@@ -96,6 +96,31 @@ in_scope:
96
96
 
97
97
  See [REFERENCE.md — in_scope format with ID tracking](./REFERENCE.md#in_scope-format-with-id-tracking) for examples.
98
98
 
99
+ #### Traceability Output (FR-XX, UJ-XX)
100
+
101
+ When source has FR-XX or UJ-XX IDs, emit `specs/product/REQUIREMENTS_TRACE.yaml` for end-to-end requirement traceability:
102
+
103
+ ```yaml
104
+ trace:
105
+ - id: FR-001
106
+ type: functional_requirement
107
+ description: "User can register with email/password"
108
+ epic: e02-auth-ui
109
+ story: e02s01
110
+ verify: "grep -q 'FR-001' specs/product/SCOPE_LATEST.yaml && echo OK"
111
+ - id: UJ-001
112
+ type: user_journey
113
+ description: "New user completes registration flow"
114
+ epic: e02-auth-ui
115
+ story: e02s01
116
+ ```
117
+
118
+ **Existing trace file:** If `REQUIREMENTS_TRACE.yaml` already exists, prompt: "REQUIREMENTS_TRACE.yaml exists. [overwrite / merge / skip]"
119
+
120
+ **No FR-XX/UJ-XX found:** Skip trace file; add note to state.yaml handoff: "No FR-XX/UJ-XX IDs found — traceability file skipped".
121
+
122
+ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirements_traceyaml-format) for the complete schema.
123
+
99
124
  > **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
100
125
  >
101
126
  > → verify: `git diff --name-only HEAD -- specs/ 2>/dev/null | head -20`
@@ -104,19 +129,38 @@ See [REFERENCE.md — in_scope format with ID tracking](./REFERENCE.md#in_scope-
104
129
 
105
130
  ### Step 4 — Generate state.yaml
106
131
 
107
- Always regenerate `specs/state.yaml` from scratch in bigpowers format (see REFERENCE.md for template):
132
+ Always regenerate `specs/state.yaml` from scratch in bigpowers YAML format (see REFERENCE.md for template). The **handoff block is mandatory** and must include all four fields:
108
133
 
109
- ```markdown
110
- # Session State: <project name>
111
- ## Current Milestone
112
- Migrated from <framework> on <date>. Next: review generated specs and run plan-work.
113
- ## Pending Releases
114
- - [ ] Review migrated specs
115
- - [ ] Run elaborate-spec to validate scope
116
- - [ ] Run plan-work to produce first release plan
134
+ ```yaml
135
+ active_flow: null
136
+ active_epic_id: null
137
+ active_story_id: null
138
+
139
+ # ... other state fields ...
140
+
141
+ handoff:
142
+ last_step_completed: "Migrated from <framework> on <date>"
143
+ open_decisions:
144
+ - "decision text here"
145
+ required_reading:
146
+ - specs/product/VISION_LATEST.yaml
147
+ - specs/product/SCOPE_LATEST.yaml
148
+ - specs/tech-architecture/TECH_STACK_LATEST.md
149
+ - specs/release-plan.yaml
150
+ next_skill: survey-context
151
+ ```
152
+
153
+ If no open decisions were found during migration, the `open_decisions` list may be empty with an explanatory comment:
154
+
155
+ ```yaml
156
+ handoff:
157
+ last_step_completed: "..."
158
+ open_decisions: [] # None — all decisions resolved during migration
159
+ required_reading: [...]
160
+ next_skill: survey-context
117
161
  ```
118
162
 
119
- → verify: `[ -f specs/state.yaml ] && echo "ok" || echo "MISSING: specs/state.yaml not created"`
163
+ → verify: `grep -q 'handoff:' specs/state.yaml && grep -q 'last_step_completed' specs/state.yaml && echo "ok" || echo "MISSING or INCOMPLETE: handoff block"`
120
164
 
121
165
  ### Step 5 — Surface learnings (optional)
122
166
 
@@ -0,0 +1,28 @@
1
+ # Auto-generated from {{source_framework}} FR-XX / UJ-XX IDs during migration
2
+ # Maps source requirements to bigpowers epic/story structure and verification commands.
3
+
4
+ trace:
5
+ # Functional Requirements (FR-XX)
6
+ - id: FR-001
7
+ type: functional_requirement
8
+ description: "User can register with email/password"
9
+ source_artifact: "{{source_file}}"
10
+ epic: "e02-auth-ui"
11
+ story: "e02s01"
12
+ verify: "grep -q 'FR-001' specs/product/SCOPE_LATEST.yaml && echo OK || echo FAIL"
13
+
14
+ # User Journeys (UJ-XX)
15
+ - id: UJ-001
16
+ type: user_journey
17
+ description: "New user completes registration flow"
18
+ source_artifact: "{{source_file}}"
19
+ epic: "e02-auth-ui"
20
+ story: "e02s01"
21
+ verify: "grep -q 'UJ-001' specs/epics/e02-auth-ui/epic.yaml && echo OK || echo FAIL"
22
+
23
+ # Metadata
24
+ metadata:
25
+ source_framework: "{{source_framework}}" # e.g., BMAD, GSD, spec-kit
26
+ migrated_at: "{{timestamp}}"
27
+ total_requirements: "{{count}}"
28
+ coverage: "All FR-XX and UJ-XX IDs from source mapped to bigpowers artifacts"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.29.0",
3
+ "version": "2.31.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": {
package/skills-lock.json CHANGED
@@ -163,7 +163,7 @@
163
163
  },
164
164
  "migrate-spec": {
165
165
  "description": "Detect GSD, spec-kit, or BMAD spec artifacts and transform them into bigpowers YAML layout (state.yaml, release-plan.yaml, epics/, requirements/, plans/, ADRs). Use when migrating foreign spec docs.",
166
- "sha256": "3570ec13243de9b8",
166
+ "sha256": "897baa6f0f37ea68",
167
167
  "path": "migrate-spec/SKILL.md"
168
168
  },
169
169
  "model-domain": {