bigpowers 2.48.0 → 2.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.pi/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.48.0",
3
+ "version": "2.49.0",
4
4
  "description": "72 skills — 72 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.49.0](https://github.com/danielvm-git/bigpowers/compare/v2.48.0...v2.49.0) (2026-07-03)
2
+
3
+
4
+ ### Features
5
+
6
+ * **e31:** golden suite runner — deterministic gate orchestrator ([#45](https://github.com/danielvm-git/bigpowers/issues/45)) ([e59ad3d](https://github.com/danielvm-git/bigpowers/commit/e59ad3d2d467c82bb9bf7517b8f07b897d7deb4b))
7
+
1
8
  # [2.48.0](https://github.com/danielvm-git/bigpowers/compare/v2.47.0...v2.48.0) (2026-07-03)
2
9
 
3
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.48.0",
3
+ "version": "2.49.0",
4
4
  "description": "72 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -0,0 +1,186 @@
1
+ #!/usr/bin/env bash
2
+ # run-golden-suite.sh — Deterministic golden suite runner
3
+ #
4
+ # Runs compliance → G-04 self-test in order, captures results,
5
+ # writes timestamped YAML report. Supports --dry-run and --baseline.
6
+ #
7
+ # Usage:
8
+ # bash scripts/run-golden-suite.sh # run all gates
9
+ # bash scripts/run-golden-suite.sh --dry-run # print plan only
10
+ # bash scripts/run-golden-suite.sh --baseline # run + pin baseline
11
+
12
+ set -euo pipefail
13
+
14
+ REPORT_DIR="specs/benchmarks/reports"
15
+ BASELINE_FILE="$REPORT_DIR/BASELINE-GOLDEN.yaml"
16
+ DRY_RUN=false
17
+ BASELINE_MODE=false
18
+
19
+ for arg in "$@"; do
20
+ case "$arg" in
21
+ --dry-run) DRY_RUN=true ;;
22
+ --baseline) BASELINE_MODE=true ;;
23
+ *) echo "Unknown flag: $arg"; echo "Usage: run-golden-suite.sh [--dry-run] [--baseline]"; exit 2 ;;
24
+ esac
25
+ done
26
+
27
+ # ── Gate definitions ──────────────────────────────────────────────────
28
+ # Each gate: name, command, optional: true (won't fail suite if missing)
29
+ GATES=(
30
+ "compliance:npm run compliance:false"
31
+ "g04-selftest:bash scripts/golden-g04-selftest.sh:true"
32
+ )
33
+
34
+ GREEN='\033[0;32m'
35
+ RED='\033[0;31m'
36
+ YELLOW='\033[0;33m'
37
+ NC='\033[0m'
38
+
39
+ # ── Dry run ───────────────────────────────────────────────────────────
40
+
41
+ if $DRY_RUN; then
42
+ echo "Golden Suite — DRY RUN"
43
+ echo "Gates (in order):"
44
+ for gate in "${GATES[@]}"; do
45
+ IFS=':' read -r name cmd optional <<< "$gate"
46
+ echo " - $name: $cmd"
47
+ done
48
+ echo "Report: $REPORT_DIR/GOLDEN-YYYY-MM-DD.yaml"
49
+ echo "OK (dry run)"
50
+ exit 0
51
+ fi
52
+
53
+ # ── Setup ─────────────────────────────────────────────────────────────
54
+
55
+ mkdir -p "$REPORT_DIR"
56
+
57
+ TODAY=$(date +%Y-%m-%d)
58
+ TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
59
+ GIT_COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "unknown")
60
+
61
+ if $BASELINE_MODE; then
62
+ REPORT_FILE="$BASELINE_FILE"
63
+ else
64
+ REPORT_FILE="$REPORT_DIR/GOLDEN-${TODAY}.yaml"
65
+ fi
66
+
67
+ # ── Run gates ─────────────────────────────────────────────────────────
68
+
69
+ PASS_COUNT=0
70
+ FAIL_COUNT=0
71
+ SKIP_COUNT=0
72
+ GATE_RESULTS=()
73
+
74
+ for gate in "${GATES[@]}"; do
75
+ IFS=':' read -r name cmd is_optional <<< "$gate"
76
+
77
+ echo -n "[$name] "
78
+
79
+ # Check if command exists (for scripts)
80
+ main_cmd=$(echo "$cmd" | awk '{print $1}')
81
+ if [[ "$main_cmd" == "bash" ]]; then
82
+ script_path=$(echo "$cmd" | awk '{print $2}')
83
+ if [[ ! -f "$script_path" ]]; then
84
+ if [[ "$is_optional" == "true" ]]; then
85
+ echo -e "${YELLOW}SKIP${NC} (script not yet implemented)"
86
+ GATE_RESULTS+=(" - name: $name")
87
+ GATE_RESULTS+=(" exit_code: skipped")
88
+ GATE_RESULTS+=(" duration_seconds: 0")
89
+ GATE_RESULTS+=(" status: skipped")
90
+ GATE_RESULTS+=(" note: script not found: $script_path")
91
+ (( SKIP_COUNT += 1 ))
92
+ continue
93
+ else
94
+ echo -e "${RED}FAIL${NC} (script not found: $script_path)"
95
+ GATE_RESULTS+=(" - name: $name")
96
+ GATE_RESULTS+=(" exit_code: 127")
97
+ GATE_RESULTS+=(" duration_seconds: 0")
98
+ GATE_RESULTS+=(" status: fail")
99
+ GATE_RESULTS+=(" error: script not found: $script_path")
100
+ (( FAIL_COUNT += 1 ))
101
+ continue
102
+ fi
103
+ fi
104
+ fi
105
+
106
+ # Run the gate and capture output
107
+ START_TIME=$(date +%s%N)
108
+ GATE_OUTPUT=$(eval "$cmd" 2>&1) && GATE_EXIT=$? || GATE_EXIT=$?
109
+ END_TIME=$(date +%s%N)
110
+ DURATION_MS=$(( (END_TIME - START_TIME) / 1000000 ))
111
+ DURATION_SEC=$(echo "scale=2; $DURATION_MS / 1000" | bc 2>/dev/null || echo "0")
112
+
113
+ if [[ "$GATE_EXIT" -eq 0 ]]; then
114
+ echo -e "${GREEN}PASS${NC} (${DURATION_SEC}s)"
115
+ GATE_RESULTS+=(" - name: $name")
116
+ GATE_RESULTS+=(" exit_code: 0")
117
+ GATE_RESULTS+=(" duration_seconds: $DURATION_SEC")
118
+ GATE_RESULTS+=(" status: pass")
119
+ (( PASS_COUNT += 1 ))
120
+ else
121
+ echo -e "${RED}FAIL${NC} (${DURATION_SEC}s, exit $GATE_EXIT)"
122
+ GATE_RESULTS+=(" - name: $name")
123
+ GATE_RESULTS+=(" exit_code: $GATE_EXIT")
124
+ GATE_RESULTS+=(" duration_seconds: $DURATION_SEC")
125
+ GATE_RESULTS+=(" status: fail")
126
+ (( FAIL_COUNT += 1 ))
127
+ fi
128
+ done
129
+
130
+ # ── Summary ───────────────────────────────────────────────────────────
131
+
132
+ TOTAL=$((PASS_COUNT + FAIL_COUNT + SKIP_COUNT))
133
+ if [[ "$FAIL_COUNT" -gt 0 ]]; then
134
+ OVERALL="fail"
135
+ else
136
+ OVERALL="pass"
137
+ fi
138
+
139
+ echo ""
140
+ echo "──────────────────────────────────────────"
141
+ echo -e "Suite: ${PASS_COUNT}/${TOTAL} passed"
142
+ if [[ "$SKIP_COUNT" -gt 0 ]]; then
143
+ echo -e " ${SKIP_COUNT} skipped (scripts not yet implemented)"
144
+ fi
145
+ echo -e "Overall: ${OVERALL}"
146
+ echo "Report: $REPORT_FILE"
147
+ echo "──────────────────────────────────────────"
148
+
149
+ # ── Write report ──────────────────────────────────────────────────────
150
+
151
+ PASS_RATE=$(echo "scale=2; $PASS_COUNT / $TOTAL" | bc 2>/dev/null || echo "0")
152
+
153
+ cat > "$REPORT_FILE" << YAML_EOF
154
+ timestamp: "$TIMESTAMP"
155
+ git_commit: "$GIT_COMMIT"
156
+ suite: "golden-deterministic"
157
+ mode: "$([ "$BASELINE_MODE" = true ] && echo 'baseline' || echo 'daily')"
158
+ gates:
159
+ $(printf '%s\n' "${GATE_RESULTS[@]}")
160
+ summary:
161
+ total: $TOTAL
162
+ passed: $PASS_COUNT
163
+ failed: $FAIL_COUNT
164
+ skipped: $SKIP_COUNT
165
+ pass_rate: $PASS_RATE
166
+ overall: "$OVERALL"
167
+ YAML_EOF
168
+
169
+ # ── Size budget (placeholder for e31s04) ──────────────────────────────
170
+
171
+ if $BASELINE_MODE; then
172
+ echo "" >> "$REPORT_FILE"
173
+ echo "# Skill byte counts (baseline for e31s04 size budget)" >> "$REPORT_FILE"
174
+ echo "skill_sizes:" >> "$REPORT_FILE"
175
+ for skill_md in skills/*/SKILL.md; do
176
+ skill_name=$(basename "$(dirname "$skill_md")")
177
+ skill_bytes=$(wc -c < "$skill_md" | tr -d ' ')
178
+ echo " $skill_name: $skill_bytes" >> "$REPORT_FILE"
179
+ done
180
+ echo "Baseline pinned: $REPORT_FILE"
181
+ fi
182
+
183
+ if [[ "$OVERALL" == "fail" ]]; then
184
+ exit 1
185
+ fi
186
+ exit 0