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.
- package/.gemini/extensions/bigpowers/gemini-extension.json +1 -1
- package/.pi/package.json +1 -1
- package/CHANGELOG.md +7 -0
- package/README.md +2 -0
- package/package.json +3 -2
- package/scripts/lib/__pycache__/atomic_write.cpython-310.pyc +0 -0
- package/scripts/lib/__pycache__/link_utils.cpython-310.pyc +0 -0
- package/scripts/lib/__pycache__/srp_engine_links.cpython-310.pyc +0 -0
- package/scripts/lib/__pycache__/srp_engine_okf.cpython-310.pyc +0 -0
- package/scripts/lib/golden-suite-gates.sh +3 -0
- package/scripts/test-prod-dependency-audit.sh +95 -0
package/.pi/package.json
CHANGED
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
|

|
|
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.
|
|
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": "^
|
|
69
|
+
"zod": "^4.6.7"
|
|
69
70
|
},
|
|
70
71
|
"devDependencies": {
|
|
71
72
|
"@ctxo/lang-typescript": "^0.11.0",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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 ]]
|