bigpowers 2.40.0 → 2.42.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.
Files changed (42) hide show
  1. package/.pi/package.json +1 -1
  2. package/.pi/prompts/assess-impact.md +3 -3
  3. package/.pi/prompts/audit-plan.md +2 -2
  4. package/.pi/prompts/define-language.md +5 -5
  5. package/.pi/prompts/inspect-quality.md +2 -2
  6. package/.pi/prompts/investigate-bug.md +2 -0
  7. package/.pi/prompts/migrate-spec.md +5 -5
  8. package/.pi/prompts/plan-refactor.md +4 -4
  9. package/.pi/prompts/research-first.md +1 -1
  10. package/.pi/prompts/search-skills.md +6 -6
  11. package/.pi/prompts/trace-requirement.md +3 -3
  12. package/.pi/prompts/validate-fix.md +5 -0
  13. package/.pi/skills/assess-impact/SKILL.md +3 -3
  14. package/.pi/skills/audit-plan/SKILL.md +2 -2
  15. package/.pi/skills/define-language/SKILL.md +5 -5
  16. package/.pi/skills/inspect-quality/SKILL.md +2 -2
  17. package/.pi/skills/investigate-bug/SKILL.md +2 -0
  18. package/.pi/skills/migrate-spec/SKILL.md +5 -5
  19. package/.pi/skills/plan-refactor/SKILL.md +4 -4
  20. package/.pi/skills/research-first/SKILL.md +1 -1
  21. package/.pi/skills/search-skills/SKILL.md +6 -6
  22. package/.pi/skills/trace-requirement/SKILL.md +3 -3
  23. package/.pi/skills/validate-fix/SKILL.md +5 -0
  24. package/.releaserc.json +1 -1
  25. package/CHANGELOG.md +14 -0
  26. package/GEMINI.md +21 -0
  27. package/SKILL-INDEX.md +1 -1
  28. package/assess-impact/SKILL.md +3 -3
  29. package/audit-plan/SKILL.md +2 -2
  30. package/define-language/SKILL.md +5 -5
  31. package/inspect-quality/SKILL.md +2 -2
  32. package/investigate-bug/SKILL.md +2 -0
  33. package/migrate-spec/REFERENCE-GSD.md +1 -1
  34. package/migrate-spec/REFERENCE.md +4 -4
  35. package/package.json +2 -2
  36. package/plan-refactor/SKILL.md +4 -4
  37. package/research-first/REFERENCE.md +1 -1
  38. package/scripts/build-skill-index.sh +1 -1
  39. package/search-skills/SKILL.md +6 -6
  40. package/skills-lock.json +13 -13
  41. package/trace-requirement/SKILL.md +3 -3
  42. package/validate-fix/SKILL.md +5 -0
package/.pi/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.40.0",
3
+ "version": "2.42.0",
4
4
  "description": "71 skills — 70 agent skills for spec-driven, test-first software development by solo developers",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks "what does this break?".
2
+ description: Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT_LATEST.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks "what does this break?".
3
3
  ---
4
4
 
5
5
 
@@ -53,7 +53,7 @@ grep -rn "[symbol-name]" . --include="*.test.*" --include="*.spec.*"
53
53
  | Medium | 3–10 callers, partial test coverage |
54
54
  | High | > 10 callers, or shared API/interface, or no tests |
55
55
 
56
- ### 6. Write specs/IMPACT.md
56
+ ### 6. Write specs/IMPACT_LATEST.md
57
57
 
58
58
  ```
59
59
  ## Target
@@ -76,7 +76,7 @@ grep -rn "[symbol-name]" . --include="*.test.*" --include="*.spec.*"
76
76
  [Proceed / Add tests first / Discuss design]
77
77
  ```
78
78
 
79
- → verify: `grep "Risk:" specs/IMPACT.md`
79
+ → verify: `grep "Risk:" specs/IMPACT_LATEST.md`
80
80
 
81
81
  Suggest `plan-work` once risk is understood and any test gaps are noted.
82
82
 
@@ -48,7 +48,7 @@ Assess an incoming project plan for alignment with bigpowers principles, identif
48
48
 
49
49
  3. **Close gaps conversationally** — for each ❌ or ⚠️, ask one question at a time. Record each answer before moving to the next.
50
50
 
51
- 4. **Write `specs/PLAN-AUDIT.md`**:
51
+ 4. **Write `specs/PLAN-AUDIT_LATEST.md`**:
52
52
 
53
53
  ```markdown
54
54
  # Plan Audit — <project>
@@ -85,4 +85,4 @@ NOT READY — N gaps remain; close before proceeding
85
85
 
86
86
  ## Verify
87
87
 
88
- → verify: `test -f specs/PLAN-AUDIT.md && grep -q 'Verdict' specs/PLAN-AUDIT.md && echo OK || echo FAIL`
88
+ → verify: `test -f specs/PLAN-AUDIT_LATEST.md && grep -q 'Verdict' specs/PLAN-AUDIT_LATEST.md && echo OK || echo FAIL`
@@ -1,11 +1,11 @@
1
1
  ---
2
- description: Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD".
2
+ description: Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE_LATEST.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD".
3
3
  ---
4
4
 
5
5
 
6
6
  # Define Language
7
7
 
8
- Extract and formalize domain terminology from the current conversation into a consistent glossary, saved to `specs/UBIQUITOUS_LANGUAGE.md`.
8
+ Extract and formalize domain terminology from the current conversation into a consistent glossary, saved to `specs/UBIQUITOUS_LANGUAGE_LATEST.md`.
9
9
 
10
10
  **Distinct from `model-domain` and `deepen-architecture`:** Use this skill to produce a canonical glossary of terms (words and definitions). Use `model-domain` to stress-test a plan through an interview that resolves domain model decisions. Use `deepen-architecture` to find module-level refactoring opportunities in the codebase.
11
11
 
@@ -19,12 +19,12 @@ Extract and formalize domain terminology from the current conversation into a co
19
19
  - Different words used for the same concept (synonyms)
20
20
  - Vague or overloaded terms
21
21
  3. **Propose a canonical glossary** with opinionated term choices
22
- 4. **Write to `specs/UBIQUITOUS_LANGUAGE.md`** in the working directory using the format below
22
+ 4. **Write to `specs/UBIQUITOUS_LANGUAGE_LATEST.md`** in the working directory using the format below
23
23
  5. **Output a summary** inline in the conversation
24
24
 
25
25
  ## Output Format
26
26
 
27
- Write a `specs/UBIQUITOUS_LANGUAGE.md` file with this structure:
27
+ Write a `specs/UBIQUITOUS_LANGUAGE_LATEST.md` file with this structure:
28
28
 
29
29
  ```md
30
30
  # Ubiquitous Language
@@ -72,7 +72,7 @@ Write a `specs/UBIQUITOUS_LANGUAGE.md` file with this structure:
72
72
 
73
73
  When invoked again in the same conversation:
74
74
 
75
- 1. Read the existing `specs/UBIQUITOUS_LANGUAGE.md`
75
+ 1. Read the existing `specs/UBIQUITOUS_LANGUAGE_LATEST.md`
76
76
  2. Incorporate any new terms from subsequent discussion
77
77
  3. Update definitions if understanding has evolved
78
78
  4. Re-flag any new ambiguities
@@ -25,7 +25,7 @@ Do NOT over-interview. If the description is clear enough to log, move on.
25
25
 
26
26
  Kick off an Agent (subagent_type=Explore) to understand the relevant area. The goal is NOT to find a fix — it's to:
27
27
 
28
- - Learn the domain language used in that area (check `specs/UBIQUITOUS_LANGUAGE.md` if present)
28
+ - Learn the domain language used in that area (check `specs/UBIQUITOUS_LANGUAGE_LATEST.md` if present)
29
29
  - Understand what the feature is supposed to do
30
30
  - Identify the user-facing behavior boundary
31
31
 
@@ -96,7 +96,7 @@ For each bug, also append a detail section:
96
96
 
97
97
  - **bug_id** uses full timestamp: `BUG-YYYY-MM-DDTHHMMSS` — matches the individual bug file name in `specs/bugs/`
98
98
  - **No file paths or line numbers** — these go stale
99
- - **Use the project's domain language** (check `specs/UBIQUITOUS_LANGUAGE.md` if it exists)
99
+ - **Use the project's domain language** (check `specs/UBIQUITOUS_LANGUAGE_LATEST.md` if it exists)
100
100
  - **Describe behaviors, not code** — "the sync service fails to apply the patch" not "applyPatch() throws"
101
101
  - **Reproduction steps are mandatory** — if you can't determine them, ask the user
102
102
 
@@ -25,6 +25,8 @@ Get a brief description of the issue from the user. If they haven't provided one
25
25
 
26
26
  Do NOT ask follow-up questions yet. Start investigating immediately.
27
27
 
28
+ > **Security-impact assessment** — After capturing the problem, assess and document: `Security impact: NONE / LOW / MEDIUM / HIGH / CRITICAL`. If HIGH or CRITICAL, assign bug severity HIGH and document the exploit path in findings. If MEDIUM+, include exploit path in the bug file. Document "no security exploit path identified" for NONE/LOW.
29
+
28
30
  ### 2. Explore and diagnose (4-phase RCA)
29
31
 
30
32
  Run the 4-phase root-cause analysis via the `diagnose-root` skill (Reproduce → Isolate → Hypothesize → Verify). That skill is the canonical RCA engine — do not re-implement the phases here.
@@ -165,7 +165,7 @@ GSD CONTEXT.md has 6 sections: domain, decisions, canonical_refs, code_context,
165
165
 
166
166
  Transform:
167
167
  - `domain` → `plans/TECH_STACK_LATEST.md` Domain section
168
- - `decisions` → scan each: if hard-to-reverse + surprising → `specs/adr/NNNN-{slug}.md`; if lightweight → `specs/DECISION-LOG.md`
168
+ - `decisions` → scan each: if hard-to-reverse + surprising → `specs/adr/NNNN-{slug}.md`; if lightweight → `specs/DECISION-LOG_LATEST.md`
169
169
  - `canonical_refs` → Reference links in TECH_STACK
170
170
  - `code_context` → Architecture section
171
171
  - `deferred` → `SCOPE_LATEST.yaml` `out_of_scope` (with "(deferred from GSD)" note)
@@ -338,11 +338,11 @@ Transform:
338
338
  - `[ASSUMPTION: ...]` inline tags → collected in scope YAML
339
339
  - Out-of-scope features → `out_of_scope`
340
340
 
341
- ### `addendum.md` + `decision-log.md` → `specs/adr/` + `specs/DECISION-LOG.md`
341
+ ### `addendum.md` + `decision-log.md` → `specs/adr/` + `specs/DECISION-LOG_LATEST.md`
342
342
 
343
343
  Transform:
344
344
  - Hard, irreversible, surprising decisions → individual `specs/adr/NNNN-{slug}.md`
345
- - Lightweight decisions → `specs/DECISION-LOG.md` (date | decision | rationale)
345
+ - Lightweight decisions → `specs/DECISION-LOG_LATEST.md` (date | decision | rationale)
346
346
  - `addendum.md` change signals → note in `SCOPE_LATEST.yaml` metadata
347
347
 
348
348
  ### `architecture.md` → `specs/tech-architecture/TECH_STACK_LATEST.md` + `specs/adr/`
@@ -385,7 +385,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
385
385
  ### From BMAD
386
386
 
387
387
  - [x] **FR-XX + UJ-XX in SCOPE_LATEST.yaml** — Rigorous traceability. (adopted: REQUIREMENTS_TRACE.yaml emitted on migration)
388
- - [ ] **`specs/DECISION-LOG.md`** — Lightweight decisions below ADR threshold.
388
+ - [ ] **`specs/DECISION-LOG_LATEST.md`** — Lightweight decisions below ADR threshold.
389
389
  - [x] **Adversarial review pass** — Critique epic shard before `develop-tdd`. (adopted: optional Step 6 in migration)
390
390
 
391
391
  ---
@@ -782,7 +782,7 @@ Full mapping tables: [REFERENCE-GSD.md](./REFERENCE-GSD.md) (GSD) · [REFERENCE.
782
782
 
783
783
  - **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.
784
784
  - **Never merge contradictory docs** — if source has both `CONTEXT.md` and `architecture.md`, create sections in bigpowers `CONTEXT.md`; don't collapse them.
785
- - **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`.
785
+ - **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_LATEST.md`.
786
786
  - **state.yaml is always regenerated** — never migrate source STATE verbatim; bigpowers state.yaml needs its own format.
787
787
  - **specs/ is the only output location** — no files are created outside `specs/` and `CLAUDE.md`.
788
788
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps.
2
+ description: Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR_LATEST.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps.
3
3
  ---
4
4
 
5
5
 
@@ -7,7 +7,7 @@ description: Create a detailed refactor plan with tiny commits via user intervie
7
7
  > **HARD GATE** — **HARD GATE** — Before refactoring, document the current behavior and why it is wrong. Extract one invariant that must be preserved. If you skip this, you will break things you don't expect.
8
8
 
9
9
 
10
- Create a detailed refactor plan through a user interview. Save output to `specs/REFACTOR.md`.
10
+ Create a detailed refactor plan through a user interview. Save output to `specs/REFACTOR_LATEST.md`.
11
11
 
12
12
  ## Steps
13
13
 
@@ -25,7 +25,7 @@ Create a detailed refactor plan through a user interview. Save output to `specs/
25
25
 
26
26
  7. Break the implementation into a plan of tiny commits. Remember Martin Fowler's advice: "make each refactoring step as small as possible, so that you can always see the program working."
27
27
 
28
- 8. Save the refactor plan to `specs/REFACTOR.md`. Create the `specs/` directory if it doesn't exist.
28
+ 8. Save the refactor plan to `specs/REFACTOR_LATEST.md`. Create the `specs/` directory if it doesn't exist.
29
29
 
30
30
  <refactor-plan-template>
31
31
 
@@ -74,4 +74,4 @@ Any further notes about the refactor.
74
74
 
75
75
  </refactor-plan-template>
76
76
 
77
- After writing `specs/REFACTOR.md`, suggest running `kickoff-branch` next to create a refactor branch.
77
+ After writing `specs/REFACTOR_LATEST.md`, suggest running `kickoff-branch` next to create a refactor branch.
@@ -68,7 +68,7 @@ cat package.json | jq '.dependencies,.devDependencies' 2>/dev/null
68
68
  ## Registry checklist
69
69
 
70
70
  - [ ] npm / PyPI / crates.io (if applicable)
71
- - [ ] Existing bigpowers skill (`bash scripts/build-skill-index.sh && rg "<intent>" specs/SKILL-SEARCH-INDEX.md`)
71
+ - [ ] Existing bigpowers skill (`bash scripts/build-skill-index.sh && rg "<intent>" specs/SKILL-SEARCH-INDEX_LATEST.md`)
72
72
  - [ ] Project `docs/` and `specs/adr/`
73
73
  - [ ] Official library documentation (quote one API detail)
74
74
 
@@ -9,7 +9,7 @@ description: Find the right bigpowers skill from natural-language intent using a
9
9
  >
10
10
  > **HARD GATE** — Do NOT use external embedding APIs or AI-based semantic search. This is a lexical-only index (ADR: zero external dependency).
11
11
 
12
- Lexical search only — no embedding service (ADR: zero external dependency). The index is a flat markdown file (`specs/SKILL-SEARCH-INDEX.md`) built from every SKILL.md's YAML frontmatter — name, description, and key phrases. No vector DB, no API calls, no network dependency.
12
+ Lexical search only — no embedding service (ADR: zero external dependency). The index is a flat markdown file (`specs/SKILL-SEARCH-INDEX_LATEST.md`) built from every SKILL.md's YAML frontmatter — name, description, and key phrases. No vector DB, no API calls, no network dependency.
13
13
 
14
14
  ## When to use
15
15
 
@@ -20,16 +20,16 @@ Lexical search only — no embedding service (ADR: zero external dependency). Th
20
20
 
21
21
  ## Pre-flight
22
22
 
23
- - [ ] Does `specs/SKILL-SEARCH-INDEX.md` exist? If not, run `bash scripts/build-skill-index.sh`.
23
+ - [ ] Does `specs/SKILL-SEARCH-INDEX_LATEST.md` exist? If not, run `bash scripts/build-skill-index.sh`.
24
24
  - [ ] Is the index fresh? Check its timestamp — if > 24 hours old or after any SKILL.md change, regenerate.
25
25
 
26
26
  ## Process
27
27
 
28
- 1. **Refresh index if stale** — Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX.md` doesn't exist or was modified before the last SKILL.md change.
28
+ 1. **Refresh index if stale** — Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX_LATEST.md` doesn't exist or was modified before the last SKILL.md change.
29
29
 
30
30
  2. **Search the index** — Use ripgrep on the lexical index:
31
31
  ```
32
- rg -i "<keywords>" specs/SKILL-SEARCH-INDEX.md
32
+ rg -i "<keywords>" specs/SKILL-SEARCH-INDEX_LATEST.md
33
33
  ```
34
34
  The index contains each skill's name, description, phase, and key use-case phrases, so natural language queries work well even without embeddings.
35
35
 
@@ -47,7 +47,7 @@ Lexical search only — no embedding service (ADR: zero external dependency). Th
47
47
 
48
48
  ## Index Format
49
49
 
50
- `specs/SKILL-SEARCH-INDEX.md` contains one section per skill:
50
+ `specs/SKILL-SEARCH-INDEX_LATEST.md` contains one section per skill:
51
51
  ```markdown
52
52
  ## <skill-name>
53
53
  - **Description:** <from frontmatter>
@@ -66,4 +66,4 @@ Lexical search only — no embedding service (ADR: zero external dependency). Th
66
66
 
67
67
  ## Verify
68
68
 
69
- → verify: `test -f specs/SKILL-SEARCH-INDEX.md && echo OK || (bash scripts/build-skill-index.sh && test -f specs/SKILL-SEARCH-INDEX.md && echo OK)`
69
+ → verify: `test -f specs/SKILL-SEARCH-INDEX_LATEST.md && echo OK || (bash scripts/build-skill-index.sh && test -f specs/SKILL-SEARCH-INDEX_LATEST.md && echo OK)`
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find "dark" stories with no code.
2
+ description: Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY_LATEST.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find "dark" stories with no code.
3
3
  ---
4
4
 
5
5
 
@@ -43,7 +43,7 @@ For each story ID:
43
43
  For each tagged file with no matching story ID in release-plan.yaml:
44
44
  - **Orphan**: code exists but story was removed or never planned — flag for cleanup
45
45
 
46
- ### 4. Write specs/TRACEABILITY.md
46
+ ### 4. Write specs/TRACEABILITY_LATEST.md
47
47
 
48
48
  ```
49
49
  ## Story Coverage
@@ -63,6 +63,6 @@ For each tagged file with no matching story ID in release-plan.yaml:
63
63
  Stories: [X] covered / [Y] dark / [Z] total
64
64
  ```
65
65
 
66
- → verify: `grep -c "Covered\|Dark" specs/TRACEABILITY.md`
66
+ → verify: `grep -c "Covered\|Dark" specs/TRACEABILITY_LATEST.md`
67
67
 
68
68
  Suggest `plan-work` for each dark story found.
@@ -60,6 +60,11 @@ For every bug fixed, add at least one prevention layer:
60
60
  - [ ] At least one hardening mechanism added
61
61
  - [ ] Hardening mechanism is tested
62
62
 
63
+ > **Security recurrence hardening** — If the bug's security-impact assessment (from investigate-bug) was MEDIUM or higher, additionally check:
64
+ > - [ ] Security regression test added (covers the exploit path)
65
+ > - [ ] False-positive exclusion rule added (if applicable)
66
+ > - [ ] Threat model updated (if impact was HIGH+)
67
+
63
68
  ### 6. Update the bug file and registry.yaml
64
69
 
65
70
  Find the most recent `specs/bugs/BUG-*.md` file and append the resolution:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: assess-impact
3
- description: "Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks \"what does this break?\"."
3
+ description: "Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT_LATEST.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks \"what does this break?\"."
4
4
  model: sonnet
5
5
  ---
6
6
 
@@ -55,7 +55,7 @@ grep -rn "[symbol-name]" . --include="*.test.*" --include="*.spec.*"
55
55
  | Medium | 3–10 callers, partial test coverage |
56
56
  | High | > 10 callers, or shared API/interface, or no tests |
57
57
 
58
- ### 6. Write specs/IMPACT.md
58
+ ### 6. Write specs/IMPACT_LATEST.md
59
59
 
60
60
  ```
61
61
  ## Target
@@ -78,7 +78,7 @@ grep -rn "[symbol-name]" . --include="*.test.*" --include="*.spec.*"
78
78
  [Proceed / Add tests first / Discuss design]
79
79
  ```
80
80
 
81
- → verify: `grep "Risk:" specs/IMPACT.md`
81
+ → verify: `grep "Risk:" specs/IMPACT_LATEST.md`
82
82
 
83
83
  Suggest `plan-work` once risk is understood and any test gaps are noted.
84
84
 
@@ -50,7 +50,7 @@ Assess an incoming project plan for alignment with bigpowers principles, identif
50
50
 
51
51
  3. **Close gaps conversationally** — for each ❌ or ⚠️, ask one question at a time. Record each answer before moving to the next.
52
52
 
53
- 4. **Write `specs/PLAN-AUDIT.md`**:
53
+ 4. **Write `specs/PLAN-AUDIT_LATEST.md`**:
54
54
 
55
55
  ```markdown
56
56
  # Plan Audit — <project>
@@ -87,4 +87,4 @@ NOT READY — N gaps remain; close before proceeding
87
87
 
88
88
  ## Verify
89
89
 
90
- → verify: `test -f specs/PLAN-AUDIT.md && grep -q 'Verdict' specs/PLAN-AUDIT.md && echo OK || echo FAIL`
90
+ → verify: `test -f specs/PLAN-AUDIT_LATEST.md && grep -q 'Verdict' specs/PLAN-AUDIT_LATEST.md && echo OK || echo FAIL`
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: define-language
3
- description: "Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions \"domain model\" or \"DDD\"."
3
+ description: "Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE_LATEST.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions \"domain model\" or \"DDD\"."
4
4
  model: sonnet
5
5
  ---
6
6
 
7
7
 
8
8
  # Define Language
9
9
 
10
- Extract and formalize domain terminology from the current conversation into a consistent glossary, saved to `specs/UBIQUITOUS_LANGUAGE.md`.
10
+ Extract and formalize domain terminology from the current conversation into a consistent glossary, saved to `specs/UBIQUITOUS_LANGUAGE_LATEST.md`.
11
11
 
12
12
  **Distinct from `model-domain` and `deepen-architecture`:** Use this skill to produce a canonical glossary of terms (words and definitions). Use `model-domain` to stress-test a plan through an interview that resolves domain model decisions. Use `deepen-architecture` to find module-level refactoring opportunities in the codebase.
13
13
 
@@ -21,12 +21,12 @@ Extract and formalize domain terminology from the current conversation into a co
21
21
  - Different words used for the same concept (synonyms)
22
22
  - Vague or overloaded terms
23
23
  3. **Propose a canonical glossary** with opinionated term choices
24
- 4. **Write to `specs/UBIQUITOUS_LANGUAGE.md`** in the working directory using the format below
24
+ 4. **Write to `specs/UBIQUITOUS_LANGUAGE_LATEST.md`** in the working directory using the format below
25
25
  5. **Output a summary** inline in the conversation
26
26
 
27
27
  ## Output Format
28
28
 
29
- Write a `specs/UBIQUITOUS_LANGUAGE.md` file with this structure:
29
+ Write a `specs/UBIQUITOUS_LANGUAGE_LATEST.md` file with this structure:
30
30
 
31
31
  ```md
32
32
  # Ubiquitous Language
@@ -74,7 +74,7 @@ Write a `specs/UBIQUITOUS_LANGUAGE.md` file with this structure:
74
74
 
75
75
  When invoked again in the same conversation:
76
76
 
77
- 1. Read the existing `specs/UBIQUITOUS_LANGUAGE.md`
77
+ 1. Read the existing `specs/UBIQUITOUS_LANGUAGE_LATEST.md`
78
78
  2. Incorporate any new terms from subsequent discussion
79
79
  3. Update definitions if understanding has evolved
80
80
  4. Re-flag any new ambiguities
@@ -27,7 +27,7 @@ Do NOT over-interview. If the description is clear enough to log, move on.
27
27
 
28
28
  Kick off an Agent (subagent_type=Explore) to understand the relevant area. The goal is NOT to find a fix — it's to:
29
29
 
30
- - Learn the domain language used in that area (check `specs/UBIQUITOUS_LANGUAGE.md` if present)
30
+ - Learn the domain language used in that area (check `specs/UBIQUITOUS_LANGUAGE_LATEST.md` if present)
31
31
  - Understand what the feature is supposed to do
32
32
  - Identify the user-facing behavior boundary
33
33
 
@@ -98,7 +98,7 @@ For each bug, also append a detail section:
98
98
 
99
99
  - **bug_id** uses full timestamp: `BUG-YYYY-MM-DDTHHMMSS` — matches the individual bug file name in `specs/bugs/`
100
100
  - **No file paths or line numbers** — these go stale
101
- - **Use the project's domain language** (check `specs/UBIQUITOUS_LANGUAGE.md` if it exists)
101
+ - **Use the project's domain language** (check `specs/UBIQUITOUS_LANGUAGE_LATEST.md` if it exists)
102
102
  - **Describe behaviors, not code** — "the sync service fails to apply the patch" not "applyPatch() throws"
103
103
  - **Reproduction steps are mandatory** — if you can't determine them, ask the user
104
104
 
@@ -27,6 +27,8 @@ Get a brief description of the issue from the user. If they haven't provided one
27
27
 
28
28
  Do NOT ask follow-up questions yet. Start investigating immediately.
29
29
 
30
+ > **Security-impact assessment** — After capturing the problem, assess and document: `Security impact: NONE / LOW / MEDIUM / HIGH / CRITICAL`. If HIGH or CRITICAL, assign bug severity HIGH and document the exploit path in findings. If MEDIUM+, include exploit path in the bug file. Document "no security exploit path identified" for NONE/LOW.
31
+
30
32
  ### 2. Explore and diagnose (4-phase RCA)
31
33
 
32
34
  Run the 4-phase root-cause analysis via the `diagnose-root` skill (Reproduce → Isolate → Hypothesize → Verify). That skill is the canonical RCA engine — do not re-implement the phases here.
@@ -167,7 +167,7 @@ GSD CONTEXT.md has 6 sections: domain, decisions, canonical_refs, code_context,
167
167
 
168
168
  Transform:
169
169
  - `domain` → `plans/TECH_STACK_LATEST.md` Domain section
170
- - `decisions` → scan each: if hard-to-reverse + surprising → `specs/adr/NNNN-{slug}.md`; if lightweight → `specs/DECISION-LOG.md`
170
+ - `decisions` → scan each: if hard-to-reverse + surprising → `specs/adr/NNNN-{slug}.md`; if lightweight → `specs/DECISION-LOG_LATEST.md`
171
171
  - `canonical_refs` → Reference links in TECH_STACK
172
172
  - `code_context` → Architecture section
173
173
  - `deferred` → `SCOPE_LATEST.yaml` `out_of_scope` (with "(deferred from GSD)" note)
@@ -340,11 +340,11 @@ Transform:
340
340
  - `[ASSUMPTION: ...]` inline tags → collected in scope YAML
341
341
  - Out-of-scope features → `out_of_scope`
342
342
 
343
- ### `addendum.md` + `decision-log.md` → `specs/adr/` + `specs/DECISION-LOG.md`
343
+ ### `addendum.md` + `decision-log.md` → `specs/adr/` + `specs/DECISION-LOG_LATEST.md`
344
344
 
345
345
  Transform:
346
346
  - Hard, irreversible, surprising decisions → individual `specs/adr/NNNN-{slug}.md`
347
- - Lightweight decisions → `specs/DECISION-LOG.md` (date | decision | rationale)
347
+ - Lightweight decisions → `specs/DECISION-LOG_LATEST.md` (date | decision | rationale)
348
348
  - `addendum.md` change signals → note in `SCOPE_LATEST.yaml` metadata
349
349
 
350
350
  ### `architecture.md` → `specs/tech-architecture/TECH_STACK_LATEST.md` + `specs/adr/`
@@ -387,7 +387,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
387
387
  ### From BMAD
388
388
 
389
389
  - [x] **FR-XX + UJ-XX in SCOPE_LATEST.yaml** — Rigorous traceability. (adopted: REQUIREMENTS_TRACE.yaml emitted on migration)
390
- - [ ] **`specs/DECISION-LOG.md`** — Lightweight decisions below ADR threshold.
390
+ - [ ] **`specs/DECISION-LOG_LATEST.md`** — Lightweight decisions below ADR threshold.
391
391
  - [x] **Adversarial review pass** — Critique epic shard before `develop-tdd`. (adopted: optional Step 6 in migration)
392
392
 
393
393
  ---
@@ -784,7 +784,7 @@ Full mapping tables: [REFERENCE-GSD.md](./REFERENCE-GSD.md) (GSD) · [REFERENCE.
784
784
 
785
785
  - **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.
786
786
  - **Never merge contradictory docs** — if source has both `CONTEXT.md` and `architecture.md`, create sections in bigpowers `CONTEXT.md`; don't collapse them.
787
- - **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`.
787
+ - **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_LATEST.md`.
788
788
  - **state.yaml is always regenerated** — never migrate source STATE verbatim; bigpowers state.yaml needs its own format.
789
789
  - **specs/ is the only output location** — no files are created outside `specs/` and `CLAUDE.md`.
790
790
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: plan-refactor
3
- description: "Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps."
3
+ description: "Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR_LATEST.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps."
4
4
  model: sonnet
5
5
  ---
6
6
 
@@ -9,7 +9,7 @@ model: sonnet
9
9
  > **HARD GATE** — **HARD GATE** — Before refactoring, document the current behavior and why it is wrong. Extract one invariant that must be preserved. If you skip this, you will break things you don't expect.
10
10
 
11
11
 
12
- Create a detailed refactor plan through a user interview. Save output to `specs/REFACTOR.md`.
12
+ Create a detailed refactor plan through a user interview. Save output to `specs/REFACTOR_LATEST.md`.
13
13
 
14
14
  ## Steps
15
15
 
@@ -27,7 +27,7 @@ Create a detailed refactor plan through a user interview. Save output to `specs/
27
27
 
28
28
  7. Break the implementation into a plan of tiny commits. Remember Martin Fowler's advice: "make each refactoring step as small as possible, so that you can always see the program working."
29
29
 
30
- 8. Save the refactor plan to `specs/REFACTOR.md`. Create the `specs/` directory if it doesn't exist.
30
+ 8. Save the refactor plan to `specs/REFACTOR_LATEST.md`. Create the `specs/` directory if it doesn't exist.
31
31
 
32
32
  <refactor-plan-template>
33
33
 
@@ -76,4 +76,4 @@ Any further notes about the refactor.
76
76
 
77
77
  </refactor-plan-template>
78
78
 
79
- After writing `specs/REFACTOR.md`, suggest running `kickoff-branch` next to create a refactor branch.
79
+ After writing `specs/REFACTOR_LATEST.md`, suggest running `kickoff-branch` next to create a refactor branch.
@@ -70,7 +70,7 @@ cat package.json | jq '.dependencies,.devDependencies' 2>/dev/null
70
70
  ## Registry checklist
71
71
 
72
72
  - [ ] npm / PyPI / crates.io (if applicable)
73
- - [ ] Existing bigpowers skill (`bash scripts/build-skill-index.sh && rg "<intent>" specs/SKILL-SEARCH-INDEX.md`)
73
+ - [ ] Existing bigpowers skill (`bash scripts/build-skill-index.sh && rg "<intent>" specs/SKILL-SEARCH-INDEX_LATEST.md`)
74
74
  - [ ] Project `docs/` and `specs/adr/`
75
75
  - [ ] Official library documentation (quote one API detail)
76
76
 
@@ -11,7 +11,7 @@ model: haiku
11
11
  >
12
12
  > **HARD GATE** — Do NOT use external embedding APIs or AI-based semantic search. This is a lexical-only index (ADR: zero external dependency).
13
13
 
14
- Lexical search only — no embedding service (ADR: zero external dependency). The index is a flat markdown file (`specs/SKILL-SEARCH-INDEX.md`) built from every SKILL.md's YAML frontmatter — name, description, and key phrases. No vector DB, no API calls, no network dependency.
14
+ Lexical search only — no embedding service (ADR: zero external dependency). The index is a flat markdown file (`specs/SKILL-SEARCH-INDEX_LATEST.md`) built from every SKILL.md's YAML frontmatter — name, description, and key phrases. No vector DB, no API calls, no network dependency.
15
15
 
16
16
  ## When to use
17
17
 
@@ -22,16 +22,16 @@ Lexical search only — no embedding service (ADR: zero external dependency). Th
22
22
 
23
23
  ## Pre-flight
24
24
 
25
- - [ ] Does `specs/SKILL-SEARCH-INDEX.md` exist? If not, run `bash scripts/build-skill-index.sh`.
25
+ - [ ] Does `specs/SKILL-SEARCH-INDEX_LATEST.md` exist? If not, run `bash scripts/build-skill-index.sh`.
26
26
  - [ ] Is the index fresh? Check its timestamp — if > 24 hours old or after any SKILL.md change, regenerate.
27
27
 
28
28
  ## Process
29
29
 
30
- 1. **Refresh index if stale** — Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX.md` doesn't exist or was modified before the last SKILL.md change.
30
+ 1. **Refresh index if stale** — Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX_LATEST.md` doesn't exist or was modified before the last SKILL.md change.
31
31
 
32
32
  2. **Search the index** — Use ripgrep on the lexical index:
33
33
  ```
34
- rg -i "<keywords>" specs/SKILL-SEARCH-INDEX.md
34
+ rg -i "<keywords>" specs/SKILL-SEARCH-INDEX_LATEST.md
35
35
  ```
36
36
  The index contains each skill's name, description, phase, and key use-case phrases, so natural language queries work well even without embeddings.
37
37
 
@@ -49,7 +49,7 @@ Lexical search only — no embedding service (ADR: zero external dependency). Th
49
49
 
50
50
  ## Index Format
51
51
 
52
- `specs/SKILL-SEARCH-INDEX.md` contains one section per skill:
52
+ `specs/SKILL-SEARCH-INDEX_LATEST.md` contains one section per skill:
53
53
  ```markdown
54
54
  ## <skill-name>
55
55
  - **Description:** <from frontmatter>
@@ -68,4 +68,4 @@ Lexical search only — no embedding service (ADR: zero external dependency). Th
68
68
 
69
69
  ## Verify
70
70
 
71
- → verify: `test -f specs/SKILL-SEARCH-INDEX.md && echo OK || (bash scripts/build-skill-index.sh && test -f specs/SKILL-SEARCH-INDEX.md && echo OK)`
71
+ → verify: `test -f specs/SKILL-SEARCH-INDEX_LATEST.md && echo OK || (bash scripts/build-skill-index.sh && test -f specs/SKILL-SEARCH-INDEX_LATEST.md && echo OK)`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: trace-requirement
3
- description: "Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find \"dark\" stories with no code."
3
+ description: "Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY_LATEST.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find \"dark\" stories with no code."
4
4
  model: haiku
5
5
  ---
6
6
 
@@ -45,7 +45,7 @@ For each story ID:
45
45
  For each tagged file with no matching story ID in release-plan.yaml:
46
46
  - **Orphan**: code exists but story was removed or never planned — flag for cleanup
47
47
 
48
- ### 4. Write specs/TRACEABILITY.md
48
+ ### 4. Write specs/TRACEABILITY_LATEST.md
49
49
 
50
50
  ```
51
51
  ## Story Coverage
@@ -65,6 +65,6 @@ For each tagged file with no matching story ID in release-plan.yaml:
65
65
  Stories: [X] covered / [Y] dark / [Z] total
66
66
  ```
67
67
 
68
- → verify: `grep -c "Covered\|Dark" specs/TRACEABILITY.md`
68
+ → verify: `grep -c "Covered\|Dark" specs/TRACEABILITY_LATEST.md`
69
69
 
70
70
  Suggest `plan-work` for each dark story found.
@@ -62,6 +62,11 @@ For every bug fixed, add at least one prevention layer:
62
62
  - [ ] At least one hardening mechanism added
63
63
  - [ ] Hardening mechanism is tested
64
64
 
65
+ > **Security recurrence hardening** — If the bug's security-impact assessment (from investigate-bug) was MEDIUM or higher, additionally check:
66
+ > - [ ] Security regression test added (covers the exploit path)
67
+ > - [ ] False-positive exclusion rule added (if applicable)
68
+ > - [ ] Threat model updated (if impact was HIGH+)
69
+
65
70
  ### 6. Update the bug file and registry.yaml
66
71
 
67
72
  Find the most recent `specs/bugs/BUG-*.md` file and append the resolution:
package/.releaserc.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "package.json",
14
14
  "skills-lock.json",
15
15
  ".gemini/extensions/bigpowers/gemini-extension.json",
16
- "specs/SKILL-SEARCH-INDEX.md"
16
+ "specs/SKILL-SEARCH-INDEX_LATEST.md"
17
17
  ],
18
18
  "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
19
19
  }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [2.42.0](https://github.com/danielvm-git/bigpowers/compare/v2.41.0...v2.42.0) (2026-06-29)
2
+
3
+
4
+ ### Features
5
+
6
+ * **skills:** rename generated specs-root outputs to _LATEST.md suffix ([#28](https://github.com/danielvm-git/bigpowers/issues/28)) ([9982d23](https://github.com/danielvm-git/bigpowers/commit/9982d238b9b5f30f948d3ac7f4e6b44cf56f6730))
7
+
8
+ # [2.41.0](https://github.com/danielvm-git/bigpowers/compare/v2.40.0...v2.41.0) (2026-06-27)
9
+
10
+
11
+ ### Features
12
+
13
+ * **investigate-bug validate-fix:** add security impact and hardening ([b67ca83](https://github.com/danielvm-git/bigpowers/commit/b67ca8343a39a51dab6305897e0ba81cc7d5623c))
14
+
1
15
  # [2.40.0](https://github.com/danielvm-git/bigpowers/compare/v2.39.0...v2.40.0) (2026-06-27)
2
16
 
3
17
 
package/GEMINI.md CHANGED
@@ -52,3 +52,24 @@ Collection of 58 verb-noun skills, each with a SKILL.md source file and supporti
52
52
  - Run tests after every change. Show evidence before declaring done.
53
53
  - One clarifying question beats a wrong assumption baked into 200 lines.
54
54
  - All written output (plans, specs, investigations) goes in specs/.
55
+
56
+ ## bts toolchain
57
+
58
+ `bts` is installed. Prefer its verbs over ad-hoc shell commands.
59
+
60
+ | Task | Command | Avoid |
61
+ |------|---------|-------|
62
+ | Search code | `bts find --print <pattern>` | grep / find / cat |
63
+ | Interactive search | `bts find <pattern>` | manual grep pipes |
64
+ | Compress for context | `bts compress <file>` or `cmd \| bts compress` | summarising by hand |
65
+ | Repo map | `bts map` | listing files by hand |
66
+ | Library docs | `bts docs <lib>` | guessing from training data |
67
+ | Package source | `bts src <pkg>` | git clone |
68
+ | Toolchain health | `bts doctor` | which / command -v |
69
+
70
+ **Rules**
71
+ - Search with `bts find` before opening files to locate a symbol or pattern.
72
+ - Pipe anything > 200 lines through `bts compress` before adding to context.
73
+ - Run `bts map` when asked for a repo overview.
74
+ - Use `bts docs <lib>` before answering questions about library APIs.
75
+ - If a tool is missing, say so and run `bts doctor` — do not silently substitute.
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-27T16:41:01Z
6
+ **Generated:** 2026-06-29T16:10:24Z
7
7
  **Skills:** 71
8
8
 
9
9
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: assess-impact
3
3
  model: sonnet
4
- description: Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks "what does this break?".
4
+ description: Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT_LATEST.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks "what does this break?".
5
5
  ---
6
6
 
7
7
  # Assess Impact
@@ -54,7 +54,7 @@ grep -rn "[symbol-name]" . --include="*.test.*" --include="*.spec.*"
54
54
  | Medium | 3–10 callers, partial test coverage |
55
55
  | High | > 10 callers, or shared API/interface, or no tests |
56
56
 
57
- ### 6. Write specs/IMPACT.md
57
+ ### 6. Write specs/IMPACT_LATEST.md
58
58
 
59
59
  ```
60
60
  ## Target
@@ -77,7 +77,7 @@ grep -rn "[symbol-name]" . --include="*.test.*" --include="*.spec.*"
77
77
  [Proceed / Add tests first / Discuss design]
78
78
  ```
79
79
 
80
- → verify: `grep "Risk:" specs/IMPACT.md`
80
+ → verify: `grep "Risk:" specs/IMPACT_LATEST.md`
81
81
 
82
82
  Suggest `plan-work` once risk is understood and any test gaps are noted.
83
83
 
@@ -49,7 +49,7 @@ Assess an incoming project plan for alignment with bigpowers principles, identif
49
49
 
50
50
  3. **Close gaps conversationally** — for each ❌ or ⚠️, ask one question at a time. Record each answer before moving to the next.
51
51
 
52
- 4. **Write `specs/PLAN-AUDIT.md`**:
52
+ 4. **Write `specs/PLAN-AUDIT_LATEST.md`**:
53
53
 
54
54
  ```markdown
55
55
  # Plan Audit — <project>
@@ -86,4 +86,4 @@ NOT READY — N gaps remain; close before proceeding
86
86
 
87
87
  ## Verify
88
88
 
89
- → verify: `test -f specs/PLAN-AUDIT.md && grep -q 'Verdict' specs/PLAN-AUDIT.md && echo OK || echo FAIL`
89
+ → verify: `test -f specs/PLAN-AUDIT_LATEST.md && grep -q 'Verdict' specs/PLAN-AUDIT_LATEST.md && echo OK || echo FAIL`
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: define-language
3
3
  model: sonnet
4
- description: Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD".
4
+ description: Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE_LATEST.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD".
5
5
  ---
6
6
 
7
7
  # Define Language
8
8
 
9
- Extract and formalize domain terminology from the current conversation into a consistent glossary, saved to `specs/UBIQUITOUS_LANGUAGE.md`.
9
+ Extract and formalize domain terminology from the current conversation into a consistent glossary, saved to `specs/UBIQUITOUS_LANGUAGE_LATEST.md`.
10
10
 
11
11
  **Distinct from `model-domain` and `deepen-architecture`:** Use this skill to produce a canonical glossary of terms (words and definitions). Use `model-domain` to stress-test a plan through an interview that resolves domain model decisions. Use `deepen-architecture` to find module-level refactoring opportunities in the codebase.
12
12
 
@@ -20,12 +20,12 @@ Extract and formalize domain terminology from the current conversation into a co
20
20
  - Different words used for the same concept (synonyms)
21
21
  - Vague or overloaded terms
22
22
  3. **Propose a canonical glossary** with opinionated term choices
23
- 4. **Write to `specs/UBIQUITOUS_LANGUAGE.md`** in the working directory using the format below
23
+ 4. **Write to `specs/UBIQUITOUS_LANGUAGE_LATEST.md`** in the working directory using the format below
24
24
  5. **Output a summary** inline in the conversation
25
25
 
26
26
  ## Output Format
27
27
 
28
- Write a `specs/UBIQUITOUS_LANGUAGE.md` file with this structure:
28
+ Write a `specs/UBIQUITOUS_LANGUAGE_LATEST.md` file with this structure:
29
29
 
30
30
  ```md
31
31
  # Ubiquitous Language
@@ -73,7 +73,7 @@ Write a `specs/UBIQUITOUS_LANGUAGE.md` file with this structure:
73
73
 
74
74
  When invoked again in the same conversation:
75
75
 
76
- 1. Read the existing `specs/UBIQUITOUS_LANGUAGE.md`
76
+ 1. Read the existing `specs/UBIQUITOUS_LANGUAGE_LATEST.md`
77
77
  2. Incorporate any new terms from subsequent discussion
78
78
  3. Update definitions if understanding has evolved
79
79
  4. Re-flag any new ambiguities
@@ -26,7 +26,7 @@ Do NOT over-interview. If the description is clear enough to log, move on.
26
26
 
27
27
  Kick off an Agent (subagent_type=Explore) to understand the relevant area. The goal is NOT to find a fix — it's to:
28
28
 
29
- - Learn the domain language used in that area (check `specs/UBIQUITOUS_LANGUAGE.md` if present)
29
+ - Learn the domain language used in that area (check `specs/UBIQUITOUS_LANGUAGE_LATEST.md` if present)
30
30
  - Understand what the feature is supposed to do
31
31
  - Identify the user-facing behavior boundary
32
32
 
@@ -97,7 +97,7 @@ For each bug, also append a detail section:
97
97
 
98
98
  - **bug_id** uses full timestamp: `BUG-YYYY-MM-DDTHHMMSS` — matches the individual bug file name in `specs/bugs/`
99
99
  - **No file paths or line numbers** — these go stale
100
- - **Use the project's domain language** (check `specs/UBIQUITOUS_LANGUAGE.md` if it exists)
100
+ - **Use the project's domain language** (check `specs/UBIQUITOUS_LANGUAGE_LATEST.md` if it exists)
101
101
  - **Describe behaviors, not code** — "the sync service fails to apply the patch" not "applyPatch() throws"
102
102
  - **Reproduction steps are mandatory** — if you can't determine them, ask the user
103
103
 
@@ -26,6 +26,8 @@ Get a brief description of the issue from the user. If they haven't provided one
26
26
 
27
27
  Do NOT ask follow-up questions yet. Start investigating immediately.
28
28
 
29
+ > **Security-impact assessment** — After capturing the problem, assess and document: `Security impact: NONE / LOW / MEDIUM / HIGH / CRITICAL`. If HIGH or CRITICAL, assign bug severity HIGH and document the exploit path in findings. If MEDIUM+, include exploit path in the bug file. Document "no security exploit path identified" for NONE/LOW.
30
+
29
31
  ### 2. Explore and diagnose (4-phase RCA)
30
32
 
31
33
  Run the 4-phase root-cause analysis via the `diagnose-root` skill (Reproduce → Isolate → Hypothesize → Verify). That skill is the canonical RCA engine — do not re-implement the phases here.
@@ -61,7 +61,7 @@ GSD CONTEXT.md has 6 sections: domain, decisions, canonical_refs, code_context,
61
61
 
62
62
  Transform:
63
63
  - `domain` → `plans/TECH_STACK_LATEST.md` Domain section
64
- - `decisions` → scan each: if hard-to-reverse + surprising → `specs/adr/NNNN-{slug}.md`; if lightweight → `specs/DECISION-LOG.md`
64
+ - `decisions` → scan each: if hard-to-reverse + surprising → `specs/adr/NNNN-{slug}.md`; if lightweight → `specs/DECISION-LOG_LATEST.md`
65
65
  - `canonical_refs` → Reference links in TECH_STACK
66
66
  - `code_context` → Architecture section
67
67
  - `deferred` → `SCOPE_LATEST.yaml` `out_of_scope` (with "(deferred from GSD)" note)
@@ -100,11 +100,11 @@ Transform:
100
100
  - `[ASSUMPTION: ...]` inline tags → collected in scope YAML
101
101
  - Out-of-scope features → `out_of_scope`
102
102
 
103
- ### `addendum.md` + `decision-log.md` → `specs/adr/` + `specs/DECISION-LOG.md`
103
+ ### `addendum.md` + `decision-log.md` → `specs/adr/` + `specs/DECISION-LOG_LATEST.md`
104
104
 
105
105
  Transform:
106
106
  - Hard, irreversible, surprising decisions → individual `specs/adr/NNNN-{slug}.md`
107
- - Lightweight decisions → `specs/DECISION-LOG.md` (date | decision | rationale)
107
+ - Lightweight decisions → `specs/DECISION-LOG_LATEST.md` (date | decision | rationale)
108
108
  - `addendum.md` change signals → note in `SCOPE_LATEST.yaml` metadata
109
109
 
110
110
  ### `architecture.md` → `specs/tech-architecture/TECH_STACK_LATEST.md` + `specs/adr/`
@@ -147,7 +147,7 @@ Optional enhancements to offer the user after migration. Present as checkboxes.
147
147
  ### From BMAD
148
148
 
149
149
  - [x] **FR-XX + UJ-XX in SCOPE_LATEST.yaml** — Rigorous traceability. (adopted: REQUIREMENTS_TRACE.yaml emitted on migration)
150
- - [ ] **`specs/DECISION-LOG.md`** — Lightweight decisions below ADR threshold.
150
+ - [ ] **`specs/DECISION-LOG_LATEST.md`** — Lightweight decisions below ADR threshold.
151
151
  - [x] **Adversarial review pass** — Critique epic shard before `develop-tdd`. (adopted: optional Step 6 in migration)
152
152
 
153
153
  ---
@@ -544,7 +544,7 @@ Full mapping tables: [REFERENCE-GSD.md](./REFERENCE-GSD.md) (GSD) · [REFERENCE.
544
544
 
545
545
  - **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.
546
546
  - **Never merge contradictory docs** — if source has both `CONTEXT.md` and `architecture.md`, create sections in bigpowers `CONTEXT.md`; don't collapse them.
547
- - **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`.
547
+ - **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_LATEST.md`.
548
548
  - **state.yaml is always regenerated** — never migrate source STATE verbatim; bigpowers state.yaml needs its own format.
549
549
  - **specs/ is the only output location** — no files are created outside `specs/` and `CLAUDE.md`.
550
550
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.40.0",
3
+ "version": "2.42.0",
4
4
  "description": "70 agent skills for spec-driven, test-first software development by solo developers",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -9,7 +9,7 @@
9
9
  "sync": "bash scripts/sync-skills.sh",
10
10
  "validate-specs": "bash scripts/validate-specs-yaml.sh",
11
11
  "enrich-epics": "bash scripts/enrich-epics-from-archive.sh",
12
- "version": "bash scripts/sync-skills.sh && git add .gemini/extensions/bigpowers/gemini-extension.json specs/SKILL-SEARCH-INDEX.md",
12
+ "version": "bash scripts/sync-skills.sh && git add .gemini/extensions/bigpowers/gemini-extension.json specs/SKILL-SEARCH-INDEX_LATEST.md",
13
13
  "install": "bash scripts/install.sh",
14
14
  "postinstall": "bash scripts/sync-skills.sh && bash scripts/install.sh",
15
15
  "release": "semantic-release",
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: plan-refactor
3
3
  model: sonnet
4
- description: Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps.
4
+ description: Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR_LATEST.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps.
5
5
  ---
6
6
 
7
7
  # Plan Refactor
8
8
  > **HARD GATE** — **HARD GATE** — Before refactoring, document the current behavior and why it is wrong. Extract one invariant that must be preserved. If you skip this, you will break things you don't expect.
9
9
 
10
10
 
11
- Create a detailed refactor plan through a user interview. Save output to `specs/REFACTOR.md`.
11
+ Create a detailed refactor plan through a user interview. Save output to `specs/REFACTOR_LATEST.md`.
12
12
 
13
13
  ## Steps
14
14
 
@@ -26,7 +26,7 @@ Create a detailed refactor plan through a user interview. Save output to `specs/
26
26
 
27
27
  7. Break the implementation into a plan of tiny commits. Remember Martin Fowler's advice: "make each refactoring step as small as possible, so that you can always see the program working."
28
28
 
29
- 8. Save the refactor plan to `specs/REFACTOR.md`. Create the `specs/` directory if it doesn't exist.
29
+ 8. Save the refactor plan to `specs/REFACTOR_LATEST.md`. Create the `specs/` directory if it doesn't exist.
30
30
 
31
31
  <refactor-plan-template>
32
32
 
@@ -75,4 +75,4 @@ Any further notes about the refactor.
75
75
 
76
76
  </refactor-plan-template>
77
77
 
78
- After writing `specs/REFACTOR.md`, suggest running `kickoff-branch` next to create a refactor branch.
78
+ After writing `specs/REFACTOR_LATEST.md`, suggest running `kickoff-branch` next to create a refactor branch.
@@ -14,7 +14,7 @@ cat package.json | jq '.dependencies,.devDependencies' 2>/dev/null
14
14
  ## Registry checklist
15
15
 
16
16
  - [ ] npm / PyPI / crates.io (if applicable)
17
- - [ ] Existing bigpowers skill (`bash scripts/build-skill-index.sh && rg "<intent>" specs/SKILL-SEARCH-INDEX.md`)
17
+ - [ ] Existing bigpowers skill (`bash scripts/build-skill-index.sh && rg "<intent>" specs/SKILL-SEARCH-INDEX_LATEST.md`)
18
18
  - [ ] Project `docs/` and `specs/adr/`
19
19
  - [ ] Official library documentation (quote one API detail)
20
20
 
@@ -3,7 +3,7 @@
3
3
  set -euo pipefail
4
4
 
5
5
  REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
- OUT="$REPO_ROOT/specs/SKILL-SEARCH-INDEX.md"
6
+ OUT="$REPO_ROOT/specs/SKILL-SEARCH-INDEX_LATEST.md"
7
7
  mkdir -p "$(dirname "$OUT")"
8
8
 
9
9
  {
@@ -10,7 +10,7 @@ model: haiku
10
10
  >
11
11
  > **HARD GATE** — Do NOT use external embedding APIs or AI-based semantic search. This is a lexical-only index (ADR: zero external dependency).
12
12
 
13
- Lexical search only — no embedding service (ADR: zero external dependency). The index is a flat markdown file (`specs/SKILL-SEARCH-INDEX.md`) built from every SKILL.md's YAML frontmatter — name, description, and key phrases. No vector DB, no API calls, no network dependency.
13
+ Lexical search only — no embedding service (ADR: zero external dependency). The index is a flat markdown file (`specs/SKILL-SEARCH-INDEX_LATEST.md`) built from every SKILL.md's YAML frontmatter — name, description, and key phrases. No vector DB, no API calls, no network dependency.
14
14
 
15
15
  ## When to use
16
16
 
@@ -21,16 +21,16 @@ Lexical search only — no embedding service (ADR: zero external dependency). Th
21
21
 
22
22
  ## Pre-flight
23
23
 
24
- - [ ] Does `specs/SKILL-SEARCH-INDEX.md` exist? If not, run `bash scripts/build-skill-index.sh`.
24
+ - [ ] Does `specs/SKILL-SEARCH-INDEX_LATEST.md` exist? If not, run `bash scripts/build-skill-index.sh`.
25
25
  - [ ] Is the index fresh? Check its timestamp — if > 24 hours old or after any SKILL.md change, regenerate.
26
26
 
27
27
  ## Process
28
28
 
29
- 1. **Refresh index if stale** — Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX.md` doesn't exist or was modified before the last SKILL.md change.
29
+ 1. **Refresh index if stale** — Run `bash scripts/build-skill-index.sh` if `specs/SKILL-SEARCH-INDEX_LATEST.md` doesn't exist or was modified before the last SKILL.md change.
30
30
 
31
31
  2. **Search the index** — Use ripgrep on the lexical index:
32
32
  ```
33
- rg -i "<keywords>" specs/SKILL-SEARCH-INDEX.md
33
+ rg -i "<keywords>" specs/SKILL-SEARCH-INDEX_LATEST.md
34
34
  ```
35
35
  The index contains each skill's name, description, phase, and key use-case phrases, so natural language queries work well even without embeddings.
36
36
 
@@ -48,7 +48,7 @@ Lexical search only — no embedding service (ADR: zero external dependency). Th
48
48
 
49
49
  ## Index Format
50
50
 
51
- `specs/SKILL-SEARCH-INDEX.md` contains one section per skill:
51
+ `specs/SKILL-SEARCH-INDEX_LATEST.md` contains one section per skill:
52
52
  ```markdown
53
53
  ## <skill-name>
54
54
  - **Description:** <from frontmatter>
@@ -67,4 +67,4 @@ Lexical search only — no embedding service (ADR: zero external dependency). Th
67
67
 
68
68
  ## Verify
69
69
 
70
- → verify: `test -f specs/SKILL-SEARCH-INDEX.md && echo OK || (bash scripts/build-skill-index.sh && test -f specs/SKILL-SEARCH-INDEX.md && echo OK)`
70
+ → verify: `test -f specs/SKILL-SEARCH-INDEX_LATEST.md && echo OK || (bash scripts/build-skill-index.sh && test -f specs/SKILL-SEARCH-INDEX_LATEST.md && echo OK)`
package/skills-lock.json CHANGED
@@ -7,8 +7,8 @@
7
7
  "path": "align-grid/SKILL.md"
8
8
  },
9
9
  "assess-impact": {
10
- "description": "Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks \"what does this break?\".",
11
- "sha256": "740925970c6cf9ce",
10
+ "description": "Analyze the blast radius of a proposed change before any code is written. Maps dependents, affected stories, and test coverage. Produces specs/IMPACT_LATEST.md. Use before plan-work on any non-trivial change, when touching a shared module, or when the user asks \"what does this break?\".",
11
+ "sha256": "29183a878aa2cb0d",
12
12
  "path": "assess-impact/SKILL.md"
13
13
  },
14
14
  "audit-code": {
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "audit-plan": {
20
20
  "description": "Evaluate an incoming project plan against bigpowers principles and conventions, surface gaps, and produce a READY/NOT READY verdict before engagement begins. Use when a new project arrives, when adapting a foreign plan, or before running seed-conventions on an unfamiliar codebase.",
21
- "sha256": "3e88b606fc8e886c",
21
+ "sha256": "571ab4f5ae9c7c13",
22
22
  "path": "audit-plan/SKILL.md"
23
23
  },
24
24
  "build-epic": {
@@ -52,8 +52,8 @@
52
52
  "path": "deepen-architecture/SKILL.md"
53
53
  },
54
54
  "define-language": {
55
- "description": "Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions \"domain model\" or \"DDD\".",
56
- "sha256": "d8386de827612d1a",
55
+ "description": "Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to specs/UBIQUITOUS_LANGUAGE_LATEST.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions \"domain model\" or \"DDD\".",
56
+ "sha256": "bffe0227335e5a41",
57
57
  "path": "define-language/SKILL.md"
58
58
  },
59
59
  "define-success": {
@@ -143,12 +143,12 @@
143
143
  },
144
144
  "inspect-quality": {
145
145
  "description": "Interactive QA session where user reports bugs or issues conversationally, and the agent logs them to specs/bugs/registry.yaml with a structured audit schema. Explores the codebase in the background for context and domain language. Use when user wants to report bugs, do QA, or mentions \"QA session\".",
146
- "sha256": "e5f9923e72550572",
146
+ "sha256": "de13d11018beab6a",
147
147
  "path": "inspect-quality/SKILL.md"
148
148
  },
149
149
  "investigate-bug": {
150
150
  "description": "Investigate a bug or issue by exploring the codebase to find root cause, then write a TDD-based fix plan to specs/bugs/BUG-*.md. Use when user reports a bug, wants to investigate a problem, mentions \"triage\", or wants to plan a fix.",
151
- "sha256": "698885ce631631c4",
151
+ "sha256": "46e956e627f24b46",
152
152
  "path": "investigate-bug/SKILL.md"
153
153
  },
154
154
  "kickoff-branch": {
@@ -182,8 +182,8 @@
182
182
  "path": "organize-workspace/SKILL.md"
183
183
  },
184
184
  "plan-refactor": {
185
- "description": "Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps.",
186
- "sha256": "f146cb1327e32943",
185
+ "description": "Create a detailed refactor plan with tiny commits via user interview, then save it as specs/REFACTOR_LATEST.md. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps.",
186
+ "sha256": "2785dc22454f0104",
187
187
  "path": "plan-refactor/SKILL.md"
188
188
  },
189
189
  "plan-release": {
@@ -253,7 +253,7 @@
253
253
  },
254
254
  "search-skills": {
255
255
  "description": "Find the right bigpowers skill from natural-language intent using a local lexical index over SKILL.md frontmatter. Use when unsure which skill to invoke, or at start of research-first.",
256
- "sha256": "34df830694a6459c",
256
+ "sha256": "5e5135b53c15f532",
257
257
  "path": "search-skills/SKILL.md"
258
258
  },
259
259
  "security-review": {
@@ -312,8 +312,8 @@
312
312
  "path": "terse-mode/SKILL.md"
313
313
  },
314
314
  "trace-requirement": {
315
- "description": "Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find \"dark\" stories with no code.",
316
- "sha256": "fbfe216d29b75058",
315
+ "description": "Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY_LATEST.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find \"dark\" stories with no code.",
316
+ "sha256": "4955b4bc05bb41bc",
317
317
  "path": "trace-requirement/SKILL.md"
318
318
  },
319
319
  "using-bigpowers": {
@@ -328,7 +328,7 @@
328
328
  },
329
329
  "validate-fix": {
330
330
  "description": "Prove a fix works before declaring done — re-run the failing test, run the full suite, typecheck, lint, and harden against recurrence. Use after implementing a bug fix, when user says \"is this fixed?\", or before closing an investigation.",
331
- "sha256": "80fc28e511a501dc",
331
+ "sha256": "f559f4b8dcf03c4a",
332
332
  "path": "validate-fix/SKILL.md"
333
333
  },
334
334
  "verify-work": {
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: trace-requirement
3
3
  model: haiku
4
- description: Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find "dark" stories with no code.
4
+ description: Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY_LATEST.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find "dark" stories with no code.
5
5
  ---
6
6
 
7
7
  # Trace Requirement
@@ -44,7 +44,7 @@ For each story ID:
44
44
  For each tagged file with no matching story ID in release-plan.yaml:
45
45
  - **Orphan**: code exists but story was removed or never planned — flag for cleanup
46
46
 
47
- ### 4. Write specs/TRACEABILITY.md
47
+ ### 4. Write specs/TRACEABILITY_LATEST.md
48
48
 
49
49
  ```
50
50
  ## Story Coverage
@@ -64,6 +64,6 @@ For each tagged file with no matching story ID in release-plan.yaml:
64
64
  Stories: [X] covered / [Y] dark / [Z] total
65
65
  ```
66
66
 
67
- → verify: `grep -c "Covered\|Dark" specs/TRACEABILITY.md`
67
+ → verify: `grep -c "Covered\|Dark" specs/TRACEABILITY_LATEST.md`
68
68
 
69
69
  Suggest `plan-work` for each dark story found.
@@ -61,6 +61,11 @@ For every bug fixed, add at least one prevention layer:
61
61
  - [ ] At least one hardening mechanism added
62
62
  - [ ] Hardening mechanism is tested
63
63
 
64
+ > **Security recurrence hardening** — If the bug's security-impact assessment (from investigate-bug) was MEDIUM or higher, additionally check:
65
+ > - [ ] Security regression test added (covers the exploit path)
66
+ > - [ ] False-positive exclusion rule added (if applicable)
67
+ > - [ ] Threat model updated (if impact was HIGH+)
68
+
64
69
  ### 6. Update the bug file and registry.yaml
65
70
 
66
71
  Find the most recent `specs/bugs/BUG-*.md` file and append the resolution: