bigpowers 2.93.1 → 2.93.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.93.1",
3
+ "version": "2.93.2",
4
4
  "description": "80 skills — 73 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
5
5
  "keywords": [
6
6
  "gemini-extension"
package/.pi/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.93.1",
3
+ "version": "2.93.2",
4
4
  "description": "80 skills — 73 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
5
5
  "keywords": [
6
6
  "pi-package"
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [2.93.2](https://github.com/danielvm-git/bigpowers/compare/v2.93.1...v2.93.2) (2026-11-03)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **deps:** clear the production dependency advisories ([#200](https://github.com/danielvm-git/bigpowers/issues/200)) ([1ff6dea](https://github.com/danielvm-git/bigpowers/commit/1ff6dea73d7fdc06ebb3172839758f7a1be995c4))
7
+
1
8
  ## [2.93.1](https://github.com/danielvm-git/bigpowers/compare/v2.93.0...v2.93.1) (2026-11-03)
2
9
 
3
10
 
package/README.md CHANGED
@@ -67,6 +67,8 @@ Use **arrow keys** to navigate, **space** to select, and **Enter** to confirm.
67
67
 
68
68
  ![Interactive Installer](docs/images/interactive-installer.png)
69
69
 
70
+ *Screenshot from an earlier release; the current installer may differ.*
71
+
70
72
  ### From source (contributors)
71
73
 
72
74
  ```bash
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.93.1",
3
+ "version": "2.93.2",
4
4
  "description": "73 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
7
  "setup": "node bin/setup.js",
8
8
  "compliance": "bash scripts/audit-compliance.sh specs/verifications/features && bash scripts/validate-doctrine.sh && python3 scripts/check-skill-links.py",
9
+ "audit:prod": "npm audit --omit=dev",
9
10
  "doctrine": "bash scripts/validate-doctrine.sh",
10
11
  "sync": "bash scripts/sync-skills.sh",
11
12
  "validate-specs": "bash scripts/validate-specs-yaml.sh",
@@ -65,7 +66,7 @@
65
66
  "remark-frontmatter": "^5.0.0",
66
67
  "remark-parse": "^11.0.0",
67
68
  "unified": "^11.0.5",
68
- "zod": "^3.24.2"
69
+ "zod": "^4.6.7"
69
70
  },
70
71
  "devDependencies": {
71
72
  "@ctxo/lang-typescript": "^0.11.0",
@@ -53,6 +53,9 @@ GOLDEN_GATES=(
53
53
  "target-contracts:bash scripts/test-target-contracts.sh:false"
54
54
  # Registry-driven replacements for the 25 hand-written per-target scripts.
55
55
  "install-hub:bash scripts/test-install-hub.sh:false"
56
+ # Whether the package *builds* was gated; whether its tree is *safe* was not.
57
+ # `npm audit --omit=dev` was 10 advisories (1 critical) with nothing watching.
58
+ "prod-dependency-audit:bash scripts/test-prod-dependency-audit.sh:false"
56
59
  # `bigpowers update` runs `npm install -g @latest` inside a live process; a
57
60
  # version captured by require() at startup then reports the release that was
58
61
  # just replaced (BUG-2026-11-03-cli-update-stale-version).
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env bash
2
+ # story: BUG-2026-11-03-prod-dependency-advisories
3
+ # test-prod-dependency-audit.sh — the shipped dependency graph must stay advisory-free.
4
+ #
5
+ # `npm audit --omit=dev` covers what users actually install. It was 10 advisories
6
+ # (1 critical) on 2.93.1 with nothing watching it: the only dependency gates were
7
+ # about whether the package *builds*, not whether its tree is safe.
8
+ #
9
+ # Two failure modes, both loud:
10
+ # 1. any advisory in the production tree → FAIL, listing package + severity
11
+ # 2. the audit could not run (no registry) → FAIL, naming the escape hatch
12
+ #
13
+ # Nothing here passes silently. To skip it deliberately (offline work), the golden
14
+ # runner's own mechanism is the documented path:
15
+ # GOLDEN_SKIP_GATES=prod-dependency-audit bash scripts/run-verification-gates.sh
16
+ # ...which records the gate as SKIPPED in the report rather than green.
17
+ #
18
+ # Dev-tree advisories are out of scope: they are concentrated in the npm bundle
19
+ # inside @semantic-release/npm and need major release-tool upgrades
20
+ # (BUG-2026-11-03-dev-dependency-advisories).
21
+ #
22
+ # Usage: bash scripts/test-prod-dependency-audit.sh
23
+ set -euo pipefail
24
+ source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
25
+ resolve_repo_root
26
+ cd "$REPO_ROOT"
27
+
28
+ source scripts/lib/test-assertions.sh
29
+ TA_PASS=0
30
+ TA_FAIL=0
31
+ TA_TMPDIR="$(mktemp -d)"
32
+ trap ta_cleanup EXIT
33
+
34
+ echo "=== test-prod-dependency-audit.sh ==="
35
+
36
+ if ! command -v npm >/dev/null 2>&1; then
37
+ ta_fail "npm is unavailable — cannot audit the production dependency graph"
38
+ echo "$TA_PASS passed, $TA_FAIL failed"
39
+ exit 1
40
+ fi
41
+
42
+ AUDIT_JSON="$TA_TMPDIR/audit-prod.json"
43
+ # npm audit exits 1 when it finds advisories — capture, do not abort.
44
+ npm audit --omit=dev --json >"$AUDIT_JSON" 2>"$TA_TMPDIR/audit-prod.err" || true
45
+
46
+ REPORT="$(
47
+ python3 - "$AUDIT_JSON" <<'PY'
48
+ import json, sys
49
+
50
+ path = sys.argv[1]
51
+ try:
52
+ data = json.load(open(path, encoding="utf-8"))
53
+ except Exception:
54
+ print("UNPARSEABLE")
55
+ sys.exit(0)
56
+
57
+ meta = data.get("metadata") or {}
58
+ counts = meta.get("vulnerabilities")
59
+ if counts is None:
60
+ print("UNPARSEABLE")
61
+ sys.exit(0)
62
+
63
+ total = counts.get("total", 0)
64
+ rows = []
65
+ for name, info in sorted((data.get("vulnerabilities") or {}).items()):
66
+ severity = info.get("severity", "?")
67
+ via = info.get("via") or []
68
+ title = ""
69
+ for entry in via:
70
+ if isinstance(entry, dict) and entry.get("title"):
71
+ title = entry["title"]
72
+ break
73
+ rows.append(f"{severity:<9} {name} {title[:70]}")
74
+ print(f"TOTAL={total}")
75
+ for row in rows:
76
+ print(f" {row}")
77
+ PY
78
+ )"
79
+
80
+ if [[ "$REPORT" == UNPARSEABLE* ]]; then
81
+ ta_fail "npm audit produced no parseable report — the registry was probably unreachable:"
82
+ sed -n '1,5p' "$TA_TMPDIR/audit-prod.err" | sed 's/^/ /' >&2
83
+ ta_fail "run with network, or skip deliberately: GOLDEN_SKIP_GATES=prod-dependency-audit"
84
+ else
85
+ TOTAL="$(grep -oE 'TOTAL=[0-9]+' <<< "$REPORT" | cut -d= -f2)"
86
+ if [[ "${TOTAL:-0}" -eq 0 ]]; then
87
+ ta_pass "no advisories in the production dependency tree (npm audit --omit=dev)"
88
+ else
89
+ ta_fail "$TOTAL advisor$([[ "$TOTAL" -eq 1 ]] && echo 'y' || echo 'ies') in the production dependency tree:"
90
+ sed -n '2,$p' <<< "$REPORT" | sed 's/^/ /' >&2
91
+ fi
92
+ fi
93
+
94
+ echo "$TA_PASS passed, $TA_FAIL failed"
95
+ [[ "$TA_FAIL" -eq 0 ]]