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 +1 -1
- package/.pi/prompts/migrate-spec.md +48 -5
- package/.pi/prompts/plan-release.md +5 -1
- package/.pi/prompts/session-state.md +2 -2
- package/.pi/skills/migrate-spec/SKILL.md +48 -5
- package/.pi/skills/plan-release/SKILL.md +5 -1
- package/.pi/skills/session-state/SKILL.md +2 -2
- package/CHANGELOG.md +7 -0
- package/CONVENTIONS.md +9 -4
- package/SKILL-INDEX.md +1 -1
- package/migrate-spec/REFERENCE-GSD.md +3 -3
- package/migrate-spec/REFERENCE.md +22 -1
- package/migrate-spec/SKILL.md +23 -1
- package/package.json +1 -1
- package/plan-release/SKILL.md +5 -1
- package/scripts/sync-status-from-epics.sh +3 -0
- package/session-state/SKILL.md +2 -2
- package/skills-lock.json +3 -3
package/.pi/package.json
CHANGED
|
@@ -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
|
|
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
|
-
-
|
|
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
|
-
- [
|
|
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: "
|
|
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:
|
|
112
|
-
last_tag:
|
|
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
|
|
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
|
-
-
|
|
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
|
-
- [
|
|
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: "
|
|
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:
|
|
114
|
-
last_tag:
|
|
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 —
|
|
99
|
+
### Semantic-release — the real version is never hand-tracked
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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-
|
|
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
|
-
-
|
|
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
|
-
- [
|
|
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:
|
package/migrate-spec/SKILL.md
CHANGED
|
@@ -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
|
|
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
package/plan-release/SKILL.md
CHANGED
|
@@ -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: "
|
|
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:
|
package/session-state/SKILL.md
CHANGED
|
@@ -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:
|
|
113
|
-
last_tag:
|
|
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": "
|
|
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": "
|
|
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": "
|
|
266
|
+
"sha256": "0141daaed69b05dc",
|
|
267
267
|
"path": "session-state/SKILL.md"
|
|
268
268
|
},
|
|
269
269
|
"setup-environment": {
|