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 +1 -1
- package/CHANGELOG.md +7 -0
- package/package.json +1 -1
- package/scripts/run-golden-suite.sh +186 -0
package/.pi/package.json
CHANGED
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
|
@@ -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
|