bigpowers 2.28.0 → 2.29.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.28.0",
3
+ "version": "2.29.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"
@@ -71,6 +71,28 @@ Apply the mapping from [REFERENCE.md](./REFERENCE.md) and [REFERENCE-GSD.md](./R
71
71
  2. Ask: "Create this? [yes / edit / skip]"
72
72
  3. On yes: write to `specs/`.
73
73
 
74
+ #### ID Tracking (REQ-XX, FR-XX, UJ-XX)
75
+
76
+ When source artifacts contain IDs (REQ-XX, FR-XX, UJ-XX), emit them as **first-class YAML fields** in `in_scope` entries, not YAML comments:
77
+
78
+ ```yaml
79
+ # CORRECT — first-class id: field
80
+ in_scope:
81
+ - id: REQ-001
82
+ description: "User can register with email/password"
83
+ source: "REQUIREMENTS.md"
84
+
85
+ # DEPRECATED — comment-only
86
+ in_scope:
87
+ - "User can register with email/password" # REQ-001
88
+ ```
89
+
90
+ **When source has no IDs:** Prompt the user: "No IDs found. Assign auto-generated IDs? [yes / no]". If yes, emit `REQ-{NNN}` with `# auto-generated` annotation.
91
+
92
+ **When source has MIXED IDs:** Items with IDs get `id:` fields; items without IDs receive auto-generated `REQ-NNN` entries. Document which were auto-generated in a comment block at the top of `in_scope`.
93
+
94
+ See [REFERENCE.md — in_scope format with ID tracking](./REFERENCE.md#in_scope-format-with-id-tracking) for examples.
95
+
74
96
  > **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
75
97
  >
76
98
  > → verify: `git diff --name-only HEAD -- specs/ 2>/dev/null | head -20`
@@ -126,7 +148,7 @@ Full mapping tables: [REFERENCE-GSD.md](./REFERENCE-GSD.md) (GSD) · [REFERENCE.
126
148
 
127
149
  ## Rules
128
150
 
129
- - **Preserve source IDs** — REQ-XX, FR-XX, UJ-XX become inline comments in bigpowers targets. Never silently renumber.
151
+ - **Preserve source IDs** — REQ-XX, FR-XX, UJ-XX are emitted as first-class `id:` fields in bigpowers YAML targets (e.g., `in_scope` entries). Never silently renumber. See Step 3 ID Tracking subsection for details.
130
152
  - **Never merge contradictory docs** — if source has both `CONTEXT.md` and `architecture.md`, create sections in bigpowers `CONTEXT.md`; don't collapse them.
131
153
  - **ADRs are opt-in** — only create an ADR when: hard to reverse, surprising without context, result of a real trade-off. Lightweight decisions go to `specs/DECISION-LOG.md`.
132
154
  - **state.yaml is always regenerated** — never migrate source STATE verbatim; bigpowers state.yaml needs its own format.
@@ -184,9 +206,9 @@ Transform:
184
206
  GSD REQUIREMENTS has: REQ-XX IDs, Validated/Active/Out-of-Scope categories, traceability.
185
207
 
186
208
  Transform:
187
- - Copy REQ-XX IDs as-is (preserve for cross-referencing)
188
- - Validated requirements → `in_scope` entries
189
- - Out-of-Scope → `out_of_scope` entries
209
+ - Preserve REQ-XX IDs as **first-class `id:` fields** in `in_scope` entries (see [REFERENCE.md — ID tracking format](./REFERENCE.md#in_scope-format-with-id-tracking))
210
+ - Validated requirements → `in_scope` entries with `id:`, `description:`, `source:` fields
211
+ - Out-of-Scope → `out_of_scope` entries (preserve IDs if present)
190
212
  - Active (in-progress) → `in_scope` with status note
191
213
 
192
214
  ---
@@ -404,7 +426,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
404
426
 
405
427
  - [ ] **`specs/tech-architecture/METHODOLOGY_LATEST.md`** — Standing analytical lenses. Agents read before planning.
406
428
  - [ ] **`handoff` block in state.yaml** — Last skill, last step, required reading for next session.
407
- - [ ] **ID tracking in SCOPE_LATEST.yaml** — FR/UJ IDs for spec → plan → verification traceability.
429
+ - [x] **ID tracking in SCOPE_LATEST.yaml** — FR/UJ IDs for spec → plan → verification traceability. (adopted in Step 3 transform)
408
430
 
409
431
  ### From spec-kit
410
432
 
@@ -454,6 +476,27 @@ For lightweight decisions that don't warrant a full ADR:
454
476
  | 2026-05-19 | Use Postgres | Existing ops expertise | SQLite (limited), DynamoDB (no local dev) |
455
477
  ```
456
478
 
479
+ ### in_scope format with ID tracking
480
+
481
+ Source IDs (REQ-XX, FR-XX, UJ-XX) are emitted as first-class YAML fields:
482
+
483
+ ```yaml
484
+ in_scope:
485
+ - id: REQ-001
486
+ description: "User can register with email and password"
487
+ source: "REQUIREMENTS.md"
488
+ - id: FR-015
489
+ description: "Auth service must support OAuth2 token flow"
490
+ source: "prd.md"
491
+ - id: REQ-AUTO-002 # auto-generated when source had no ID
492
+ description: "Dashboard displays user profile"
493
+ # auto-generated: true (optional comment for tracking)
494
+ ```
495
+
496
+ **When source has no IDs:** If the user opts in, auto-generated IDs follow the `REQ-{NNN}` format with an optional `# auto-generated` comment.
497
+
498
+ **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
+
457
500
  ### `specs/state.yaml` template format
458
501
 
459
502
  Generated during Step 4 of migration. Regenerate from scratch in bigpowers format:
@@ -57,9 +57,13 @@ Every task must have a `verify:` command. No verify command = not a task.
57
57
 
58
58
  ### 4. Save specs/release-plan.yaml
59
59
 
60
+ > **Do NOT hand-track the real version.** semantic-release decides it at merge. `version` here is a
61
+ > non-authoritative mirror/label only — read the real number with `gh release view`. Set `bump_hint`
62
+ > (the expectation), not a number you intend to enforce.
63
+
60
64
  ```yaml
61
65
  release:
62
- version: "3.0.0"
66
+ version: "2.29.0" # mirror of next expected tag, NOT authoritative — gh release view wins
63
67
  codename: "Feature Name"
64
68
  status: planning # planning | in_progress | released
65
69
  semantic_release: true
@@ -108,8 +108,8 @@ active_epic_id: e02
108
108
  active_story_id: e02s01 # required when epic mode: folder
109
109
  active_bug_id: null # BUG-2026-06-01T143022 when fix_bug
110
110
  release:
111
- target_version: "3.0.0"
112
- last_tag: null
111
+ target_version: null # NOT tracked manually — semantic-release decides at merge
112
+ last_tag: v2.28.0 # mirror of `gh release view`, reference only
113
113
  last_publish: null
114
114
  epic_cycle:
115
115
  current_step: develop-tdd
@@ -73,6 +73,28 @@ Apply the mapping from [REFERENCE.md](./REFERENCE.md) and [REFERENCE-GSD.md](./R
73
73
  2. Ask: "Create this? [yes / edit / skip]"
74
74
  3. On yes: write to `specs/`.
75
75
 
76
+ #### ID Tracking (REQ-XX, FR-XX, UJ-XX)
77
+
78
+ When source artifacts contain IDs (REQ-XX, FR-XX, UJ-XX), emit them as **first-class YAML fields** in `in_scope` entries, not YAML comments:
79
+
80
+ ```yaml
81
+ # CORRECT — first-class id: field
82
+ in_scope:
83
+ - id: REQ-001
84
+ description: "User can register with email/password"
85
+ source: "REQUIREMENTS.md"
86
+
87
+ # DEPRECATED — comment-only
88
+ in_scope:
89
+ - "User can register with email/password" # REQ-001
90
+ ```
91
+
92
+ **When source has no IDs:** Prompt the user: "No IDs found. Assign auto-generated IDs? [yes / no]". If yes, emit `REQ-{NNN}` with `# auto-generated` annotation.
93
+
94
+ **When source has MIXED IDs:** Items with IDs get `id:` fields; items without IDs receive auto-generated `REQ-NNN` entries. Document which were auto-generated in a comment block at the top of `in_scope`.
95
+
96
+ See [REFERENCE.md — in_scope format with ID tracking](./REFERENCE.md#in_scope-format-with-id-tracking) for examples.
97
+
76
98
  > **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
77
99
  >
78
100
  > → verify: `git diff --name-only HEAD -- specs/ 2>/dev/null | head -20`
@@ -128,7 +150,7 @@ Full mapping tables: [REFERENCE-GSD.md](./REFERENCE-GSD.md) (GSD) · [REFERENCE.
128
150
 
129
151
  ## Rules
130
152
 
131
- - **Preserve source IDs** — REQ-XX, FR-XX, UJ-XX become inline comments in bigpowers targets. Never silently renumber.
153
+ - **Preserve source IDs** — REQ-XX, FR-XX, UJ-XX are emitted as first-class `id:` fields in bigpowers YAML targets (e.g., `in_scope` entries). Never silently renumber. See Step 3 ID Tracking subsection for details.
132
154
  - **Never merge contradictory docs** — if source has both `CONTEXT.md` and `architecture.md`, create sections in bigpowers `CONTEXT.md`; don't collapse them.
133
155
  - **ADRs are opt-in** — only create an ADR when: hard to reverse, surprising without context, result of a real trade-off. Lightweight decisions go to `specs/DECISION-LOG.md`.
134
156
  - **state.yaml is always regenerated** — never migrate source STATE verbatim; bigpowers state.yaml needs its own format.
@@ -186,9 +208,9 @@ Transform:
186
208
  GSD REQUIREMENTS has: REQ-XX IDs, Validated/Active/Out-of-Scope categories, traceability.
187
209
 
188
210
  Transform:
189
- - Copy REQ-XX IDs as-is (preserve for cross-referencing)
190
- - Validated requirements → `in_scope` entries
191
- - Out-of-Scope → `out_of_scope` entries
211
+ - Preserve REQ-XX IDs as **first-class `id:` fields** in `in_scope` entries (see [REFERENCE.md — ID tracking format](./REFERENCE.md#in_scope-format-with-id-tracking))
212
+ - Validated requirements → `in_scope` entries with `id:`, `description:`, `source:` fields
213
+ - Out-of-Scope → `out_of_scope` entries (preserve IDs if present)
192
214
  - Active (in-progress) → `in_scope` with status note
193
215
 
194
216
  ---
@@ -406,7 +428,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
406
428
 
407
429
  - [ ] **`specs/tech-architecture/METHODOLOGY_LATEST.md`** — Standing analytical lenses. Agents read before planning.
408
430
  - [ ] **`handoff` block in state.yaml** — Last skill, last step, required reading for next session.
409
- - [ ] **ID tracking in SCOPE_LATEST.yaml** — FR/UJ IDs for spec → plan → verification traceability.
431
+ - [x] **ID tracking in SCOPE_LATEST.yaml** — FR/UJ IDs for spec → plan → verification traceability. (adopted in Step 3 transform)
410
432
 
411
433
  ### From spec-kit
412
434
 
@@ -456,6 +478,27 @@ For lightweight decisions that don't warrant a full ADR:
456
478
  | 2026-05-19 | Use Postgres | Existing ops expertise | SQLite (limited), DynamoDB (no local dev) |
457
479
  ```
458
480
 
481
+ ### in_scope format with ID tracking
482
+
483
+ Source IDs (REQ-XX, FR-XX, UJ-XX) are emitted as first-class YAML fields:
484
+
485
+ ```yaml
486
+ in_scope:
487
+ - id: REQ-001
488
+ description: "User can register with email and password"
489
+ source: "REQUIREMENTS.md"
490
+ - id: FR-015
491
+ description: "Auth service must support OAuth2 token flow"
492
+ source: "prd.md"
493
+ - id: REQ-AUTO-002 # auto-generated when source had no ID
494
+ description: "Dashboard displays user profile"
495
+ # auto-generated: true (optional comment for tracking)
496
+ ```
497
+
498
+ **When source has no IDs:** If the user opts in, auto-generated IDs follow the `REQ-{NNN}` format with an optional `# auto-generated` comment.
499
+
500
+ **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
+
459
502
  ### `specs/state.yaml` template format
460
503
 
461
504
  Generated during Step 4 of migration. Regenerate from scratch in bigpowers format:
@@ -59,9 +59,13 @@ Every task must have a `verify:` command. No verify command = not a task.
59
59
 
60
60
  ### 4. Save specs/release-plan.yaml
61
61
 
62
+ > **Do NOT hand-track the real version.** semantic-release decides it at merge. `version` here is a
63
+ > non-authoritative mirror/label only — read the real number with `gh release view`. Set `bump_hint`
64
+ > (the expectation), not a number you intend to enforce.
65
+
62
66
  ```yaml
63
67
  release:
64
- version: "3.0.0"
68
+ version: "2.29.0" # mirror of next expected tag, NOT authoritative — gh release view wins
65
69
  codename: "Feature Name"
66
70
  status: planning # planning | in_progress | released
67
71
  semantic_release: true
@@ -110,8 +110,8 @@ active_epic_id: e02
110
110
  active_story_id: e02s01 # required when epic mode: folder
111
111
  active_bug_id: null # BUG-2026-06-01T143022 when fix_bug
112
112
  release:
113
- target_version: "3.0.0"
114
- last_tag: null
113
+ target_version: null # NOT tracked manually — semantic-release decides at merge
114
+ last_tag: v2.28.0 # mirror of `gh release view`, reference only
115
115
  last_publish: null
116
116
  epic_cycle:
117
117
  current_step: develop-tdd
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [2.29.0](https://github.com/danielvm-git/bigpowers/compare/v2.28.0...v2.29.0) (2026-06-26)
2
+
3
+
4
+ ### Features
5
+
6
+ * **migrate-spec:** promote ID tracking from comments to first-class YAML fields ([f1c8d73](https://github.com/danielvm-git/bigpowers/commit/f1c8d73a5140175fc0067a191f119eea70395075)), closes [#22](https://github.com/danielvm-git/bigpowers/issues/22)
7
+
1
8
  # [2.28.0](https://github.com/danielvm-git/bigpowers/compare/v2.27.0...v2.28.0) (2026-06-22)
2
9
 
3
10
 
package/CONVENTIONS.md CHANGED
@@ -96,11 +96,16 @@ Epic IDs: `e01`, `e30`. Story IDs: `e01s01`. One FR in SCOPE may span multiple e
96
96
 
97
97
  When planning closes, copy to `specs/product/snapshots/release-<version>/` (`release-plan.yaml`, `SCOPE_LATEST.yaml`, `VISION_LATEST.yaml`). No separate `baselines/` folder.
98
98
 
99
- ### Semantic-release — three places
99
+ ### Semantic-release — the real version is never hand-tracked
100
100
 
101
- 1. **Planning intent** `specs/release-plan.yaml` `release.version`, `release.bump_hint` (minor/patch/major expectation).
102
- 2. **Published version** repo root: `package.json`, git tag `vX.Y.Z`, `CHANGELOG.md` (CI semantic-release; not hand-edited in specs).
103
- 3. **Dashboard optional** `specs/state.yaml` `release.last_tag`, `release.last_publish` (from tags/CI).
101
+ > **The authority is `gh release view` / git tags.** semantic-release decides the version
102
+ > at merge from Conventional Commits. Never hand-maintain a `target_version` to "predict" it
103
+ > that field drifts from reality every release. The specs only *mirror* the real tag for reference.
104
+
105
+ 1. **Planning intent (codename only)** — `specs/release-plan.yaml` → `release.version`, `release.bump_hint`.
106
+ Treat `version` as a non-authoritative label; if you write a number, mark it "mirror, not the authority".
107
+ 2. **Published version (authority)** — repo root `package.json`, git tag `vX.Y.Z`, `CHANGELOG.md` (CI semantic-release; not hand-edited in specs). Read with `gh release view`.
108
+ 3. **Dashboard mirror** — `specs/state.yaml` → `release.last_tag`, `release.last_publish` (copied from `gh release view`; `target_version` is `null` — not tracked manually).
104
109
 
105
110
  ### Guardrails and other artifacts
106
111
 
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-22T13:26:01Z
6
+ **Generated:** 2026-06-26T22:20:53Z
7
7
  **Skills:** 70
8
8
 
9
9
  ---
@@ -48,9 +48,9 @@ Transform:
48
48
  GSD REQUIREMENTS has: REQ-XX IDs, Validated/Active/Out-of-Scope categories, traceability.
49
49
 
50
50
  Transform:
51
- - Copy REQ-XX IDs as-is (preserve for cross-referencing)
52
- - Validated requirements → `in_scope` entries
53
- - Out-of-Scope → `out_of_scope` entries
51
+ - Preserve REQ-XX IDs as **first-class `id:` fields** in `in_scope` entries (see [REFERENCE.md — ID tracking format](./REFERENCE.md#in_scope-format-with-id-tracking))
52
+ - Validated requirements → `in_scope` entries with `id:`, `description:`, `source:` fields
53
+ - Out-of-Scope → `out_of_scope` entries (preserve IDs if present)
54
54
  - Active (in-progress) → `in_scope` with status note
55
55
 
56
56
  ---
@@ -134,7 +134,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
134
134
 
135
135
  - [ ] **`specs/tech-architecture/METHODOLOGY_LATEST.md`** — Standing analytical lenses. Agents read before planning.
136
136
  - [ ] **`handoff` block in state.yaml** — Last skill, last step, required reading for next session.
137
- - [ ] **ID tracking in SCOPE_LATEST.yaml** — FR/UJ IDs for spec → plan → verification traceability.
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
140
140
 
@@ -184,6 +184,27 @@ For lightweight decisions that don't warrant a full ADR:
184
184
  | 2026-05-19 | Use Postgres | Existing ops expertise | SQLite (limited), DynamoDB (no local dev) |
185
185
  ```
186
186
 
187
+ ### in_scope format with ID tracking
188
+
189
+ Source IDs (REQ-XX, FR-XX, UJ-XX) are emitted as first-class YAML fields:
190
+
191
+ ```yaml
192
+ in_scope:
193
+ - id: REQ-001
194
+ description: "User can register with email and password"
195
+ source: "REQUIREMENTS.md"
196
+ - id: FR-015
197
+ description: "Auth service must support OAuth2 token flow"
198
+ source: "prd.md"
199
+ - id: REQ-AUTO-002 # auto-generated when source had no ID
200
+ description: "Dashboard displays user profile"
201
+ # auto-generated: true (optional comment for tracking)
202
+ ```
203
+
204
+ **When source has no IDs:** If the user opts in, auto-generated IDs follow the `REQ-{NNN}` format with an optional `# auto-generated` comment.
205
+
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
+
187
208
  ### `specs/state.yaml` template format
188
209
 
189
210
  Generated during Step 4 of migration. Regenerate from scratch in bigpowers format:
@@ -74,6 +74,28 @@ Apply the mapping from [REFERENCE.md](./REFERENCE.md) and [REFERENCE-GSD.md](./R
74
74
  2. Ask: "Create this? [yes / edit / skip]"
75
75
  3. On yes: write to `specs/`.
76
76
 
77
+ #### ID Tracking (REQ-XX, FR-XX, UJ-XX)
78
+
79
+ When source artifacts contain IDs (REQ-XX, FR-XX, UJ-XX), emit them as **first-class YAML fields** in `in_scope` entries, not YAML comments:
80
+
81
+ ```yaml
82
+ # CORRECT — first-class id: field
83
+ in_scope:
84
+ - id: REQ-001
85
+ description: "User can register with email/password"
86
+ source: "REQUIREMENTS.md"
87
+
88
+ # DEPRECATED — comment-only
89
+ in_scope:
90
+ - "User can register with email/password" # REQ-001
91
+ ```
92
+
93
+ **When source has no IDs:** Prompt the user: "No IDs found. Assign auto-generated IDs? [yes / no]". If yes, emit `REQ-{NNN}` with `# auto-generated` annotation.
94
+
95
+ **When source has MIXED IDs:** Items with IDs get `id:` fields; items without IDs receive auto-generated `REQ-NNN` entries. Document which were auto-generated in a comment block at the top of `in_scope`.
96
+
97
+ See [REFERENCE.md — in_scope format with ID tracking](./REFERENCE.md#in_scope-format-with-id-tracking) for examples.
98
+
77
99
  > **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
78
100
  >
79
101
  > → verify: `git diff --name-only HEAD -- specs/ 2>/dev/null | head -20`
@@ -131,7 +153,7 @@ Full mapping tables: [REFERENCE-GSD.md](./REFERENCE-GSD.md) (GSD) · [REFERENCE.
131
153
 
132
154
  ## Rules
133
155
 
134
- - **Preserve source IDs** — REQ-XX, FR-XX, UJ-XX become inline comments in bigpowers targets. Never silently renumber.
156
+ - **Preserve source IDs** — REQ-XX, FR-XX, UJ-XX are emitted as first-class `id:` fields in bigpowers YAML targets (e.g., `in_scope` entries). Never silently renumber. See Step 3 ID Tracking subsection for details.
135
157
  - **Never merge contradictory docs** — if source has both `CONTEXT.md` and `architecture.md`, create sections in bigpowers `CONTEXT.md`; don't collapse them.
136
158
  - **ADRs are opt-in** — only create an ADR when: hard to reverse, surprising without context, result of a real trade-off. Lightweight decisions go to `specs/DECISION-LOG.md`.
137
159
  - **state.yaml is always regenerated** — never migrate source STATE verbatim; bigpowers state.yaml needs its own format.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.28.0",
3
+ "version": "2.29.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": {
@@ -58,9 +58,13 @@ Every task must have a `verify:` command. No verify command = not a task.
58
58
 
59
59
  ### 4. Save specs/release-plan.yaml
60
60
 
61
+ > **Do NOT hand-track the real version.** semantic-release decides it at merge. `version` here is a
62
+ > non-authoritative mirror/label only — read the real number with `gh release view`. Set `bump_hint`
63
+ > (the expectation), not a number you intend to enforce.
64
+
61
65
  ```yaml
62
66
  release:
63
- version: "3.0.0"
67
+ version: "2.29.0" # mirror of next expected tag, NOT authoritative — gh release view wins
64
68
  codename: "Feature Name"
65
69
  status: planning # planning | in_progress | released
66
70
  semantic_release: true
@@ -37,6 +37,9 @@ for folder in sorted(epics_dir.glob("e*/")):
37
37
  em = re.search(r"^id:\s*(e\d+)", text, re.M)
38
38
  if em:
39
39
  keys.setdefault(em.group(1), "backlog")
40
+ # Parse inline story IDs from capsule epic.yaml (same pattern as flat files)
41
+ for sm in re.finditer(r"^\s+- id:\s*(e\d+s\d+)", text, re.M):
42
+ keys.setdefault(sm.group(1), "backlog")
40
43
  for story in (folder / "stories").glob("e*s*.md"):
41
44
  m = re.match(r"(e\d+s\d+)", story.name)
42
45
  if m:
@@ -109,8 +109,8 @@ active_epic_id: e02
109
109
  active_story_id: e02s01 # required when epic mode: folder
110
110
  active_bug_id: null # BUG-2026-06-01T143022 when fix_bug
111
111
  release:
112
- target_version: "3.0.0"
113
- last_tag: null
112
+ target_version: null # NOT tracked manually — semantic-release decides at merge
113
+ last_tag: v2.28.0 # mirror of `gh release view`, reference only
114
114
  last_publish: null
115
115
  epic_cycle:
116
116
  current_step: develop-tdd
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": "912299321559a5e2",
166
+ "sha256": "3570ec13243de9b8",
167
167
  "path": "migrate-spec/SKILL.md"
168
168
  },
169
169
  "model-domain": {
@@ -188,7 +188,7 @@
188
188
  },
189
189
  "plan-release": {
190
190
  "description": "\"RELEASE-INDEX BUILDER — Sequence elaborated epics into specs/release-plan.yaml with WSJF ordering and BCP baselines. NOT a planning-spine substitute: it does not scope work (scope-work) or write story tasks (plan-work). Use after elaborate-spec when the user wants a versioned release index of epics.\"",
191
- "sha256": "4eeb65607ca2f799",
191
+ "sha256": "352d54fe911757ad",
192
192
  "path": "plan-release/SKILL.md"
193
193
  },
194
194
  "plan-work": {
@@ -263,7 +263,7 @@
263
263
  },
264
264
  "session-state": {
265
265
  "description": "Track implementation decisions and progress in specs/state.yaml to prevent context rot. Use at the start of a session to load context, and whenever a significant decision is made or a milestone is reached.",
266
- "sha256": "4efd54a453e3e2cd",
266
+ "sha256": "0141daaed69b05dc",
267
267
  "path": "session-state/SKILL.md"
268
268
  },
269
269
  "setup-environment": {