bigpowers 2.43.0 → 2.43.2

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.43.0",
3
+ "version": "2.43.2",
4
4
  "description": "72 skills — 70 agent skills for spec-driven, test-first software development by solo developers",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -6,7 +6,6 @@ description: "RELEASE-INDEX BUILDER — Sequence elaborated epics into specs/rel
6
6
  # Plan Release
7
7
 
8
8
  > **HARD GATE** — Do NOT run this skill unless `elaborate-spec` has produced a clear spec or the user has already defined the feature in detail. If the problem is still fuzzy, run `elaborate-spec` first.
9
-
10
9
  > **HARD GATE** — `specs/product/SCOPE_LATEST.yaml` (or legacy `specs/product/SCOPE_LATEST.yaml`) must exist. If missing, run `scope-work` first.
11
10
 
12
11
  Synthesize the conversation context into `specs/release-plan.yaml` (index) and shard detail under `specs/epics/`. No new interview — only clarify if something is genuinely ambiguous.
@@ -35,7 +34,7 @@ specs/epics/e01-auth-system/
35
34
  └── e01s02-tasks.yaml # Decoupled task checklist
36
35
  ```
37
36
 
38
- **Rationale:** Capsule dirs achieve change isolation (C9), enable archive pruning (C2/C6), and enforce SRP by decoupling spec `.md` from execution `-tasks.yaml` (C1). See `sdd-adequacy-ranking.md` for the full 10-criteria scoring.
37
+ **Rationale:** Capsule dirs achieve change isolation (C9), enable archive pruning (C2/C6), and enforce SRP by decoupling spec `.md` from execution `-tasks.yaml` (C1).
39
38
 
40
39
  ## Process
41
40
 
@@ -139,7 +138,6 @@ tasks:
139
138
  ```bash
140
139
  bash scripts/sync-status-from-epics.sh
141
140
  ```
142
-
143
141
  ### 9. Snapshot on planning close (optional)
144
142
 
145
143
  Copy to `specs/product/snapshots/release-<version>/` when the user approves the plan.
@@ -8,7 +8,6 @@ model: sonnet
8
8
  # Plan Release
9
9
 
10
10
  > **HARD GATE** — Do NOT run this skill unless `elaborate-spec` has produced a clear spec or the user has already defined the feature in detail. If the problem is still fuzzy, run `elaborate-spec` first.
11
-
12
11
  > **HARD GATE** — `specs/product/SCOPE_LATEST.yaml` (or legacy `specs/product/SCOPE_LATEST.yaml`) must exist. If missing, run `scope-work` first.
13
12
 
14
13
  Synthesize the conversation context into `specs/release-plan.yaml` (index) and shard detail under `specs/epics/`. No new interview — only clarify if something is genuinely ambiguous.
@@ -37,7 +36,7 @@ specs/epics/e01-auth-system/
37
36
  └── e01s02-tasks.yaml # Decoupled task checklist
38
37
  ```
39
38
 
40
- **Rationale:** Capsule dirs achieve change isolation (C9), enable archive pruning (C2/C6), and enforce SRP by decoupling spec `.md` from execution `-tasks.yaml` (C1). See `sdd-adequacy-ranking.md` for the full 10-criteria scoring.
39
+ **Rationale:** Capsule dirs achieve change isolation (C9), enable archive pruning (C2/C6), and enforce SRP by decoupling spec `.md` from execution `-tasks.yaml` (C1).
41
40
 
42
41
  ## Process
43
42
 
@@ -141,7 +140,6 @@ tasks:
141
140
  ```bash
142
141
  bash scripts/sync-status-from-epics.sh
143
142
  ```
144
-
145
143
  ### 9. Snapshot on planning close (optional)
146
144
 
147
145
  Copy to `specs/product/snapshots/release-<version>/` when the user approves the plan.
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: security-review
3
3
  description: "> AI-powered security analysis of code changes — traces data flow, detects injection, auth bypass, secrets exposure, and unsafe deserialization across files. Use when reviewing pending changes, before release-branch, during verify-work Phase 5, during build-epic Step 0 threat modeling, or when the user says \"security review\" or \"scan for vulns\"."
4
+ model: sonnet
4
5
  ---
5
6
 
6
7
 
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [2.43.2](https://github.com/danielvm-git/bigpowers/compare/v2.43.1...v2.43.2) (2026-07-02)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **ci:** resolve doctrine drift — stale count and line cap ([4930391](https://github.com/danielvm-git/bigpowers/commit/49303917543a56feb6dd47e92641f90bea289cb4))
7
+
8
+ ## [2.43.1](https://github.com/danielvm-git/bigpowers/compare/v2.43.0...v2.43.1) (2026-07-02)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **scripts:** replace declare -A with case for bash 3.2 compatibility ([92dacb6](https://github.com/danielvm-git/bigpowers/commit/92dacb6151a207f659edd2d4f48efc084936fc40))
14
+
1
15
  # [2.43.0](https://github.com/danielvm-git/bigpowers/compare/v2.42.1...v2.43.0) (2026-06-29)
2
16
 
3
17
 
@@ -0,0 +1,119 @@
1
+ # Contributing to bigpowers
2
+
3
+ Thanks for your interest in contributing! bigpowers is an open-source system of 69+ AI agent skills for spec-driven, test-first software development. This guide will help you get started.
4
+
5
+ ## Code of Conduct
6
+
7
+ Be respectful, constructive, and patient. We're building tools for developers — treat each other like the professionals we are.
8
+
9
+ ## Before You Start
10
+
11
+ 1. **Read the docs.** Start with [`README.md`](README.md), [`CLAUDE.md`](CLAUDE.md), and [`CONVENTIONS.md`](CONVENTIONS.md). These define the project's architecture, conventions, and engineering standards.
12
+ 2. **Run bigpowers.** Install with `npx bigpowers` and walk through the experience as a user before contributing as a developer.
13
+ 3. **Understand the lifecycle.** bigpowers follows a 6-phase methodology: Discover → Elaborate → Plan → Build → Verify → Release. Read [`docs/WORKFLOW-SOP-v2.md`](docs/WORKFLOW-SOP-v2.md) for the full SOP.
14
+
15
+ ## How to Contribute
16
+
17
+ ### Reporting Bugs
18
+
19
+ - Search [existing issues](https://github.com/danielvm-git/bigpowers/issues) first.
20
+ - Use the bug report template if one exists.
21
+ - Include: what you did, what you expected, what happened, your OS, Node version, and any error output.
22
+ - If the bug is in a specific skill, name the skill.
23
+
24
+ ### Proposing Features
25
+
26
+ - Open a [discussion](https://github.com/danielvm-git/bigpowers/discussions) before opening a PR for a new feature. We want to align on the approach before you invest time.
27
+ - New skills must follow the [verb-noun kebab-case naming convention](CONVENTIONS.md#skill-naming--conventions-and-exceptions) (ADR-0001).
28
+ - New features should include: a description of the problem, the proposed solution, and any alternatives considered.
29
+
30
+ ### Proposing a New Skill
31
+
32
+ Skills are the core of bigpowers. To propose a new one:
33
+
34
+ 1. **Check the index.** [`SKILL-INDEX.md`](SKILL-INDEX.md) lists all 69+ active skills. Make sure your idea doesn't overlap with an existing skill.
35
+ 2. **Identify the phase.** Every skill belongs to one of 7 phases: Discover, Design, Plan, Build, Verify, Release, Sustain.
36
+ 3. **Write a SKILL.md draft.** Follow the structure of existing skills. Every SKILL.md needs: a description, phase, instructions, and references.
37
+ 4. **Open a discussion.** Share your SKILL.md draft in a GitHub discussion. We'll review whether it fits the roadmap before you invest in a full PR.
38
+ 5. **Once approved,** open a PR with:
39
+ - A new directory: `[verb]-[noun]/` containing `SKILL.md`
40
+ - Evidence that you ran `bash scripts/sync-skills.sh` to regenerate artifacts
41
+ - A Conventional Commit: `feat(skills): add [verb]-[noun] skill`
42
+
43
+ ### Pull Request Process
44
+
45
+ 1. **Branch from main.** Use `kickoff-branch` or create a feature branch manually.
46
+ 2. **Follow CONVENTIONS.md.** F.I.R.S.T tests. SOLID. Boy Scout Rule. No `any` types. Functions under 20 lines.
47
+ 3. **Run sync.** After any SKILL.md change, run `bash scripts/sync-skills.sh` to regenerate generated artifacts. Do not edit `.cursor/rules` or `.gemini/extensions/` directly.
48
+ 4. **Validate YAML.** Run `bash scripts/validate-specs-yaml.sh` if you've changed any `specs/*.yaml` files.
49
+ 5. **Write Conventional Commits.** Format: `type(scope): description`. See [CONVENTIONS.md](CONVENTIONS.md#conventional-commits--semantic-versioning) for the full spec.
50
+ 6. **Open a PR.** Use `gh pr create`. Include: what you changed, why, how to verify, and any open questions.
51
+ 7. **Wait for review.** A maintainer will review within a few days. Be responsive to feedback.
52
+
53
+ ### Writing Documentation
54
+
55
+ Documentation is a first-class contribution. You don't need to write code to help.
56
+
57
+ - **README improvements:** Clearer install instructions, better examples, fixed typos.
58
+ - **Skill docs:** Every SKILL.md should be clear enough for a new user to understand without asking.
59
+ - **Guides and tutorials:** Walkthroughs for specific use cases (e.g., "Using bigpowers with a Next.js project").
60
+ - **Translations:** Help make bigpowers accessible to non-English-speaking developers.
61
+
62
+ ## Development Setup
63
+
64
+ ```bash
65
+ # Clone the repo
66
+ git clone https://github.com/danielvm-git/bigpowers.git
67
+ cd bigpowers
68
+
69
+ # Install dependencies + run postinstall sync
70
+ npm install
71
+
72
+ # Or manually:
73
+ bash scripts/install.sh
74
+ npm run sync
75
+ ```
76
+
77
+ ### Prerequisites
78
+
79
+ - **Bash** — required for all scripts
80
+ - **Node.js** v14+
81
+ - **jq** — highly recommended for YAML validation scripts
82
+ - **An AI coding tool** — Claude Code, Cursor, Gemini CLI, or pi (to test skills end-to-end)
83
+
84
+ ### Project Structure
85
+
86
+ ```
87
+ bigpowers/
88
+ ├── [skill-name]/ # Each skill has its own directory with SKILL.md
89
+ ├── scripts/ # Install, sync, validation, and compliance scripts
90
+ ├── specs/ # YAML cockpit — state.yaml, release-plan.yaml, epics/
91
+ ├── docs/ # Guides and references
92
+ ├── profiles/ # Stack-specific conventions (TypeScript+Vue, Node Service, etc.)
93
+ ├── .cursor/rules/ # Generated — do not edit directly
94
+ ├── .gemini/extensions/ # Generated — do not edit directly
95
+ └── .pi/skills/ # Generated — do not edit directly
96
+ ```
97
+
98
+ **Never edit generated files.** Always edit the source `SKILL.md` and run `bash scripts/sync-skills.sh`.
99
+
100
+ ## Testing
101
+
102
+ - **Skill validation:** `bash scripts/sync-skills.sh` validates SKILL.md syntax and structure.
103
+ - **YAML validation:** `bash scripts/validate-specs-yaml.sh` checks the YAML cockpit for correctness.
104
+ - **Compliance check:** `npm run compliance` runs a comprehensive check of the repo.
105
+ - **Manual testing:** The best test of a skill is using it with an AI coding tool. After changes, run `survey-context` or invoke the skill to verify it works.
106
+
107
+ ## Getting Help
108
+
109
+ - **Questions?** Open a [GitHub discussion](https://github.com/danielvm-git/bigpowers/discussions).
110
+ - **Bug?** Open an [issue](https://github.com/danielvm-git/bigpowers/issues).
111
+ - **Want to chat?** [Link to Discord/Slack — to be added]
112
+
113
+ ## Recognition
114
+
115
+ All contributors are recognized in the README and release notes. Significant contributions (new skills, major features) get a shoutout in the changelog and on social media. We believe in giving credit where it's due.
116
+
117
+ ---
118
+
119
+ *bigpowers is MIT-licensed. By contributing, you agree that your contributions will be licensed under the same terms.*
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-29T16:34:20Z
6
+ **Generated:** 2026-07-02T12:07:54Z
7
7
  **Skills:** 72
8
8
 
9
9
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.43.0",
3
+ "version": "2.43.2",
4
4
  "description": "70 agent skills for spec-driven, test-first software development by solo developers",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -7,7 +7,6 @@ description: "RELEASE-INDEX BUILDER — Sequence elaborated epics into specs/rel
7
7
  # Plan Release
8
8
 
9
9
  > **HARD GATE** — Do NOT run this skill unless `elaborate-spec` has produced a clear spec or the user has already defined the feature in detail. If the problem is still fuzzy, run `elaborate-spec` first.
10
-
11
10
  > **HARD GATE** — `specs/product/SCOPE_LATEST.yaml` (or legacy `specs/product/SCOPE_LATEST.yaml`) must exist. If missing, run `scope-work` first.
12
11
 
13
12
  Synthesize the conversation context into `specs/release-plan.yaml` (index) and shard detail under `specs/epics/`. No new interview — only clarify if something is genuinely ambiguous.
@@ -36,7 +35,7 @@ specs/epics/e01-auth-system/
36
35
  └── e01s02-tasks.yaml # Decoupled task checklist
37
36
  ```
38
37
 
39
- **Rationale:** Capsule dirs achieve change isolation (C9), enable archive pruning (C2/C6), and enforce SRP by decoupling spec `.md` from execution `-tasks.yaml` (C1). See `sdd-adequacy-ranking.md` for the full 10-criteria scoring.
38
+ **Rationale:** Capsule dirs achieve change isolation (C9), enable archive pruning (C2/C6), and enforce SRP by decoupling spec `.md` from execution `-tasks.yaml` (C1).
40
39
 
41
40
  ## Process
42
41
 
@@ -140,7 +139,6 @@ tasks:
140
139
  ```bash
141
140
  bash scripts/sync-status-from-epics.sh
142
141
  ```
143
-
144
142
  ### 9. Snapshot on planning close (optional)
145
143
 
146
144
  Copy to `specs/product/snapshots/release-<version>/` when the user approves the plan.
@@ -3,72 +3,20 @@
3
3
  set -euo pipefail
4
4
  REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
5
 
6
- declare -A MODELS=(
7
- [using-bigpowers]=sonnet
8
- [orchestrate-project]=sonnet
9
- [survey-context]=haiku
10
- [research-first]=sonnet
11
- [elaborate-spec]=opus
12
- [map-codebase]=sonnet
13
- [model-domain]=sonnet
14
- [define-language]=sonnet
15
- [grill-me]=sonnet
16
- [grill-with-docs]=opus
17
- [deepen-architecture]=sonnet
18
- [design-interface]=opus
19
- [assess-impact]=sonnet
20
- [change-request]=sonnet
21
- [scope-work]=sonnet
22
- [slice-tasks]=sonnet
23
- [define-success]=sonnet
24
- [plan-work]=opus
25
- [plan-refactor]=sonnet
26
- [plan-release]=sonnet
27
- [spike-prototype]=sonnet
28
- [kickoff-branch]=haiku
29
- [guard-git]=haiku
30
- [hook-commits]=haiku
31
- [seed-conventions]=sonnet
32
- [develop-tdd]=sonnet
33
- [enforce-first]=haiku
34
- [delegate-task]=sonnet
35
- [dispatch-agents]=sonnet
36
- [execute-plan]=haiku
37
- [wire-observability]=sonnet
38
- [verify-work]=haiku
39
- [run-evals]=sonnet
40
- [investigate-bug]=sonnet
41
- [diagnose-root]=sonnet
42
- [validate-fix]=haiku
43
- [audit-code]=haiku
44
- [request-review]=opus
45
- [respond-review]=sonnet
46
- [trace-requirement]=haiku
47
- [commit-message]=haiku
48
- [release-branch]=haiku
49
- [inspect-quality]=sonnet
50
- [organize-workspace]=haiku
51
- [stocktake-skills]=sonnet
52
- [evolve-skill]=opus
53
- [terse-mode]=haiku
54
- [craft-skill]=sonnet
55
- [edit-document]=sonnet
56
- [session-state]=haiku
57
- [migrate-spec]=sonnet
58
- [visual-dashboard]=sonnet
59
- [write-document]=sonnet
60
- [setup-environment]=haiku
61
- [reset-baseline]=haiku
62
- [search-skills]=haiku
63
- [compose-workflow]=sonnet
64
- [simulate-agents]=sonnet
65
- )
6
+ # Bash 3.2-compatible model mapping (no declare -A)
7
+ get_model() {
8
+ case "$1" in
9
+ survey-context|verify-work|validate-fix|audit-code|enforce-first|trace-requirement|commit-message|release-branch|kickoff-branch|guard-git|hook-commits|execute-plan|organize-workspace|terse-mode|session-state|search-skills|setup-environment|reset-baseline) echo "haiku" ;;
10
+ elaborate-spec|grill-with-docs|design-interface|plan-work|request-review|evolve-skill) echo "opus" ;;
11
+ *) echo "sonnet" ;;
12
+ esac
13
+ }
66
14
 
67
15
  for skill_dir in "$REPO_ROOT"/*/; do
68
16
  skill_md="$skill_dir/SKILL.md"
69
17
  [[ -f "$skill_md" ]] || continue
70
18
  name=$(basename "$skill_dir")
71
- model="${MODELS[$name]:-sonnet}"
19
+ model=$(get_model "$name")
72
20
  if grep -q '^model:' "$skill_md" 2>/dev/null; then
73
21
  continue
74
22
  fi
@@ -14,85 +14,25 @@ if [[ ! -f "$LOCKFILE" ]]; then
14
14
  fi
15
15
 
16
16
  # Phase categorization — maps each skill to a lifecycle phase
17
- declare -A PHASE_MAP
18
- PHASE_MAP=(
19
- # Discover
20
- [survey-context]="Discover"
21
- [research-first]="Discover"
22
- [search-skills]="Discover"
23
- [using-bigpowers]="Discover"
24
- [map-codebase]="Discover"
25
- [elaborate-spec]="Discover"
26
- [audit-plan]="Discover"
27
- # Elaborate / Design
28
- [model-domain]="Design"
29
- [define-language]="Design"
30
- [grill-me]="Design"
31
- [grill-with-docs]="Design"
32
- [deepen-architecture]="Design"
33
- [design-interface]="Design"
34
- [define-success]="Design"
35
- # Plan
36
- [scope-work]="Plan"
37
- [slice-tasks]="Plan"
38
- [plan-work]="Plan"
39
- [plan-release]="Plan"
40
- [plan-refactor]="Plan"
41
- [assess-impact]="Plan"
42
- [change-request]="Plan"
43
- [run-planning]="Plan"
44
- [seed-conventions]="Plan"
45
- # Build
46
- [develop-tdd]="Build"
47
- [kickoff-branch]="Build"
48
- [execute-plan]="Build"
49
- [build-epic]="Build"
50
- [spike-prototype]="Build"
51
- [craft-skill]="Build"
52
- [quick-fix]="Build"
53
- [setup-environment]="Build"
54
- [wire-observability]="Build"
55
- [wire-ci]="Build"
56
- [publish-package]="Build"
57
- [align-grid]="Build"
58
- [orchestrate-project]="Build"
59
- [guard-git]="Build"
60
- [hook-commits]="Build"
61
- [deploy]="Build"
62
- [smoke-test]="Build"
63
- [validate-contracts]="Build"
64
- # Verify
65
- [verify-work]="Verify"
66
- [validate-fix]="Verify"
67
- [audit-code]="Verify"
68
- [enforce-first]="Verify"
69
- [run-evals]="Verify"
70
- [investigate-bug]="Verify"
71
- [diagnose-root]="Verify"
72
- [fix-bug]="Verify"
73
- [inspect-quality]="Verify"
74
- [request-review]="Verify"
75
- [respond-review]="Verify"
76
- [trace-requirement]="Verify"
77
- # Release
78
- [release-branch]="Release"
79
- [commit-message]="Release"
80
- # Sustain
81
- [session-state]="Sustain"
82
- [edit-document]="Sustain"
83
- [write-document]="Sustain"
84
- [organize-workspace]="Sustain"
85
- [reset-baseline]="Sustain"
86
- [stocktake-skills]="Sustain"
87
- [evolve-skill]="Sustain"
88
- [run-benchmark]="Sustain"
89
- [terse-mode]="Sustain"
90
- [delegate-task]="Sustain"
91
- [dispatch-agents]="Sustain"
92
- [simulate-agents]="Sustain"
93
- [compose-workflow]="Sustain"
94
- [migrate-spec]="Sustain"
95
- )
17
+ # Uses a case statement for bash 3.2 compatibility (macOS default bash lacks declare -A)
18
+ get_phase() {
19
+ case "$1" in
20
+ # Discover
21
+ survey-context|research-first|search-skills|using-bigpowers|map-codebase|elaborate-spec|audit-plan) echo "Discover" ;;
22
+ # Design
23
+ model-domain|define-language|grill-me|grill-with-docs|deepen-architecture|design-interface|define-success) echo "Design" ;;
24
+ # Plan
25
+ scope-work|slice-tasks|plan-work|plan-release|plan-refactor|assess-impact|change-request|run-planning|seed-conventions) echo "Plan" ;;
26
+ # Build
27
+ develop-tdd|kickoff-branch|execute-plan|build-epic|spike-prototype|craft-skill|quick-fix|setup-environment|wire-observability|wire-ci|publish-package|align-grid|orchestrate-project|guard-git|hook-commits|deploy|smoke-test|validate-contracts) echo "Build" ;;
28
+ # Verify
29
+ verify-work|validate-fix|audit-code|enforce-first|run-evals|investigate-bug|diagnose-root|fix-bug|inspect-quality|request-review|respond-review|trace-requirement) echo "Verify" ;;
30
+ # Release
31
+ release-branch|commit-message) echo "Release" ;;
32
+ # Sustain
33
+ session-state|edit-document|write-document|organize-workspace|reset-baseline|stocktake-skills|evolve-skill|run-benchmark|terse-mode|delegate-task|dispatch-agents|simulate-agents|compose-workflow|migrate-spec) echo "Sustain" ;;
34
+ esac
35
+ }
96
36
 
97
37
  # Phase order for display
98
38
  PHASE_ORDER=("Discover" "Design" "Plan" "Build" "Verify" "Release" "Sustain")
@@ -123,7 +63,7 @@ DESC_COL_WIDTH=56
123
63
  for phase in "${PHASE_ORDER[@]}"; do
124
64
  phase_skills=()
125
65
  for name in $(jq -r '.skills | keys[]' "$LOCKFILE" | sort); do
126
- [[ "${PHASE_MAP[$name]:-}" == "$phase" ]] && phase_skills+=("$name")
66
+ [[ "$(get_phase "$name")" == "$phase" ]] && phase_skills+=("$name")
127
67
  done
128
68
  count=${#phase_skills[@]}
129
69
  total=$((total + count))
@@ -144,7 +84,7 @@ DESC_COL_WIDTH=56
144
84
  row=0
145
85
  for phase in "${PHASE_ORDER[@]}"; do
146
86
  for name in $(jq -r '.skills | keys[]' "$LOCKFILE" | sort); do
147
- [[ "${PHASE_MAP[$name]:-}" != "$phase" ]] && continue
87
+ [[ "$(get_phase "$name")" != "$phase" ]] && continue
148
88
  row=$((row + 1))
149
89
  desc=$(jq -r --arg n "$name" '.skills[$n].description // ""' "$LOCKFILE" | head -c 80)
150
90
  echo "| $row | $phase | \`$name\` | $desc | ✅ Active |"
@@ -20,7 +20,12 @@ for skill_dir in "$REPO_ROOT"/*/; do
20
20
  | tr -d '\n' | sed -E 's/[[:space:]]+/ /g')
21
21
 
22
22
  # Compute SHA-256 of full SKILL.md content (first 16 hex chars for compact uniqueness)
23
- sha256=$(sha256sum "$skill_md" | cut -c1-16)
23
+ # Falls back to shasum for macOS where sha256sum is not installed by default
24
+ if command -v sha256sum &>/dev/null; then
25
+ sha256=$(sha256sum "$skill_md" | cut -c1-16)
26
+ else
27
+ sha256=$(shasum -a 256 "$skill_md" | cut -c1-16)
28
+ fi
24
29
 
25
30
  # Relative path from repo root
26
31
  relpath="${skill_dir#$REPO_ROOT/}SKILL.md"
@@ -230,6 +230,13 @@ if [[ -f "$validate_script" ]] && command -v python3 &>/dev/null; then
230
230
  fi
231
231
  fi
232
232
 
233
+ # Regression guard (BUG-2026-07-02T103911): no bash 4+ features in install-chain scripts
234
+ # macOS ships bash 3.2 which lacks declare -A (associative arrays)
235
+ if grep -rn '^declare -A\|^[[:space:]]*declare -A' scripts/sync-skills.sh scripts/generate-skill-index.sh scripts/regenerate-lockfile.sh scripts/build-skill-index.sh 2>/dev/null; then
236
+ echo "sync-skills: FAIL — bash 4+ features detected in install-chain scripts (not macOS-compatible)" >&2
237
+ exit 1
238
+ fi
239
+
233
240
  # Regenerate derived reference tables from live SKILL.md frontmatter
234
241
  # Only in dev context (with .git) — not during consumer npm install where docs/ is excluded
235
242
  if [[ -d "$REPO_ROOT/.git" ]]; then
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: security-review
3
+ model: sonnet
3
4
  description: >
4
5
  AI-powered security analysis of code changes — traces data flow, detects
5
6
  injection, auth bypass, secrets exposure, and unsafe deserialization across
package/skills-lock.json CHANGED
@@ -193,7 +193,7 @@
193
193
  },
194
194
  "plan-release": {
195
195
  "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.\"",
196
- "sha256": "d664fde0d07e88ba",
196
+ "sha256": "6a47658098abc342",
197
197
  "path": "plan-release/SKILL.md"
198
198
  },
199
199
  "plan-work": {
@@ -263,7 +263,7 @@
263
263
  },
264
264
  "security-review": {
265
265
  "description": "> AI-powered security analysis of code changes — traces data flow, detects injection, auth bypass, secrets exposure, and unsafe deserialization across files. Use when reviewing pending changes, before release-branch, during verify-work Phase 5, during build-epic Step 0 threat modeling, or when the user says \"security review\" or \"scan for vulns\".",
266
- "sha256": "24aeeed072282d0c",
266
+ "sha256": "8fe9fa518af2aaa6",
267
267
  "path": "security-review/SKILL.md"
268
268
  },
269
269
  "seed-conventions": {