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 +1 -1
- package/.pi/prompts/migrate-spec.md +130 -29
- package/.pi/skills/migrate-spec/SKILL.md +130 -29
- package/CHANGELOG.md +14 -0
- package/COMMIT-MESSAGE.md +34 -0
- package/SKILL-INDEX.md +1 -1
- package/migrate-spec/REFERENCE.md +77 -20
- package/migrate-spec/SKILL.md +54 -10
- package/migrate-spec/templates/REQUIREMENTS_TRACE.yaml +28 -0
- package/package.json +1 -1
- package/skills-lock.json +1 -1
package/.pi/package.json
CHANGED
|
@@ -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
|
-
```
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
579
|
+
### `specs/state.yaml` template format
|
|
517
580
|
|
|
518
|
-
|
|
581
|
+
Generated during Step 4 of migration. Regenerate from scratch in bigpowers YAML format. The **handoff block is mandatory**:
|
|
519
582
|
|
|
520
|
-
|
|
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
|
-
|
|
523
|
-
|
|
524
|
-
|
|
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
|
-
```
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
581
|
+
### `specs/state.yaml` template format
|
|
519
582
|
|
|
520
|
-
|
|
583
|
+
Generated during Step 4 of migration. Regenerate from scratch in bigpowers YAML format. The **handoff block is mandatory**:
|
|
521
584
|
|
|
522
|
-
|
|
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
|
-
|
|
525
|
-
|
|
526
|
-
|
|
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:
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
243
|
+
### `specs/state.yaml` template format
|
|
227
244
|
|
|
228
|
-
|
|
245
|
+
Generated during Step 4 of migration. Regenerate from scratch in bigpowers YAML format. The **handoff block is mandatory**:
|
|
229
246
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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
|
```
|
package/migrate-spec/SKILL.md
CHANGED
|
@@ -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
|
-
```
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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: `
|
|
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
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": "
|
|
166
|
+
"sha256": "897baa6f0f37ea68",
|
|
167
167
|
"path": "migrate-spec/SKILL.md"
|
|
168
168
|
},
|
|
169
169
|
"model-domain": {
|