bigpowers 2.88.5 → 2.88.7
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 +14 -0
- package/package.json +1 -1
- package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
- package/scripts/lib/__pycache__/srp_engine_links.cpython-312.pyc +0 -0
- package/scripts/lib/golden-suite-gates.sh +1 -0
- package/scripts/lib/skill-common.sh +3 -1
- package/scripts/lib/srp-engine.py +3 -1
- package/scripts/test-resolve-repo-root.sh +44 -0
- package/scripts/validate-docs-base-path.sh +88 -0
package/.pi/package.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [2.88.7](https://github.com/danielvm-git/bigpowers/compare/v2.88.6...v2.88.7) (2026-09-17)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **scripts:** resolve repo root in projects without skills/ ([093fef7](https://github.com/danielvm-git/bigpowers/commit/093fef72eb9f3be4c8cc61431df421752ed1ed44)), closes [#130](https://github.com/danielvm-git/bigpowers/issues/130)
|
|
7
|
+
|
|
8
|
+
## [2.88.6](https://github.com/danielvm-git/bigpowers/compare/v2.88.5...v2.88.6) (2026-09-13)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **ci:** install website deps before docs-base-path gate ([4a94f72](https://github.com/danielvm-git/bigpowers/commit/4a94f720bb5ca1b158f1196b43c39a890812093a))
|
|
14
|
+
|
|
1
15
|
## [2.88.5](https://github.com/danielvm-git/bigpowers/compare/v2.88.4...v2.88.5) (2026-09-13)
|
|
2
16
|
|
|
3
17
|
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -67,6 +67,7 @@ GOLDEN_GATES=(
|
|
|
67
67
|
"project-runtime:bash scripts/test-project-runtime.sh:false"
|
|
68
68
|
"omp-extension:bash scripts/validate-omp-extension.sh:false"
|
|
69
69
|
"mcp-package:bash scripts/validate-mcp-package.sh:false"
|
|
70
|
+
"docs-base-path:bash scripts/validate-docs-base-path.sh:false"
|
|
70
71
|
"import-boundaries:bash scripts/check-import-boundaries.sh:false"
|
|
71
72
|
"skill-catalog:bash scripts/validate-skill-catalog.sh:false"
|
|
72
73
|
"specs-parse:bash scripts/validate-specs-yaml.sh:false"
|
|
@@ -16,7 +16,9 @@ resolve_repo_root() {
|
|
|
16
16
|
# Library is at REPO/scripts/lib/skill-common.sh → two levels up
|
|
17
17
|
local repo_candidate
|
|
18
18
|
repo_candidate="$(cd "$lib_dir/../.." 2>/dev/null && pwd)"
|
|
19
|
-
if [ -n "$repo_candidate" ] &&
|
|
19
|
+
if [ -n "$repo_candidate" ] && {
|
|
20
|
+
[ -d "$repo_candidate/scripts/lib" ] || [ -d "$repo_candidate/skills" ]
|
|
21
|
+
}; then
|
|
20
22
|
REPO_ROOT="$repo_candidate"
|
|
21
23
|
else
|
|
22
24
|
repo_candidate="$(cd "$lib_dir/.." 2>/dev/null && pwd)"
|
|
@@ -31,7 +31,9 @@ def resolve_repo_root():
|
|
|
31
31
|
lib_dir = os.path.dirname(os.path.abspath(__file__))
|
|
32
32
|
# scripts/lib/srp-engine.py -> two levels up is REPO_ROOT
|
|
33
33
|
repo_candidate = os.path.dirname(os.path.dirname(lib_dir))
|
|
34
|
-
if os.path.isdir(os.path.join(repo_candidate, "
|
|
34
|
+
if os.path.isdir(os.path.join(repo_candidate, "scripts", "lib")) or os.path.isdir(
|
|
35
|
+
os.path.join(repo_candidate, "skills")
|
|
36
|
+
):
|
|
35
37
|
return repo_candidate
|
|
36
38
|
return os.path.dirname(lib_dir)
|
|
37
39
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Regression test for resolve_repo_root() in consumer layouts without skills/.
|
|
3
|
+
# See: https://github.com/danielvm-git/bigpowers/issues/130
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
TA_PASS=0
|
|
7
|
+
TA_FAIL=0
|
|
8
|
+
TA_TMPDIR=""
|
|
9
|
+
|
|
10
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/test-assertions.sh"
|
|
11
|
+
trap ta_cleanup EXIT
|
|
12
|
+
|
|
13
|
+
echo "=== test-resolve-repo-root.sh ==="
|
|
14
|
+
|
|
15
|
+
# Consumer project: scripts/lib present, no local skills/ directory.
|
|
16
|
+
TA_TMPDIR="$(mktemp -d)"
|
|
17
|
+
mkdir -p "$TA_TMPDIR/scripts/lib"
|
|
18
|
+
cp "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh" "$TA_TMPDIR/scripts/lib/"
|
|
19
|
+
|
|
20
|
+
set +e
|
|
21
|
+
out=$(bash -c "source '$TA_TMPDIR/scripts/lib/skill-common.sh' && resolve_repo_root && printf '%s|%s' \"\$REPO_ROOT\" \"\$SKILLS_ROOT\"")
|
|
22
|
+
rc=$?
|
|
23
|
+
set -e
|
|
24
|
+
|
|
25
|
+
if [[ $rc -ne 0 ]]; then
|
|
26
|
+
ta_fail "consumer layout: resolve_repo_root exited $rc"
|
|
27
|
+
elif [[ "$out" == "$TA_TMPDIR|$TA_TMPDIR" ]]; then
|
|
28
|
+
ta_pass "consumer layout without skills/ resolves repo root (not scripts/)"
|
|
29
|
+
else
|
|
30
|
+
ta_fail "consumer layout: expected REPO_ROOT=$TA_TMPDIR, got: $out"
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# bigpowers repo: skills/ and scripts/lib both present.
|
|
34
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
35
|
+
resolve_repo_root
|
|
36
|
+
expected_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
37
|
+
if [[ "$REPO_ROOT" == "$expected_root" && -d "$REPO_ROOT/skills" ]]; then
|
|
38
|
+
ta_pass "bigpowers repo resolves REPO_ROOT with skills/"
|
|
39
|
+
else
|
|
40
|
+
ta_fail "bigpowers repo: REPO_ROOT=$REPO_ROOT expected=$expected_root"
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
echo "=== $TA_PASS passed, $TA_FAIL failed ==="
|
|
44
|
+
[[ "$TA_FAIL" -eq 0 ]]
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e33s02
|
|
3
|
+
# Docs site base-path guard — generated content must include /bigpowers prefix
|
|
4
|
+
# for GitHub Pages (see BUG-2026-09-13, #127).
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
8
|
+
WEBSITE="$REPO_ROOT/website"
|
|
9
|
+
SITE_BASE="/bigpowers"
|
|
10
|
+
ERRORS=0
|
|
11
|
+
|
|
12
|
+
fail() {
|
|
13
|
+
echo "FAIL: $*"
|
|
14
|
+
ERRORS=$((ERRORS + 1))
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
pass() {
|
|
18
|
+
echo "ok : $*"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
ensure_website_deps() {
|
|
22
|
+
if [[ -d "$WEBSITE/node_modules/astro" ]]; then
|
|
23
|
+
return 0
|
|
24
|
+
fi
|
|
25
|
+
if ! command -v npm >/dev/null 2>&1; then
|
|
26
|
+
fail "npm unavailable and website/node_modules missing — cannot run build check"
|
|
27
|
+
return 1
|
|
28
|
+
fi
|
|
29
|
+
echo "info: installing website deps (golden-suite only installs repo root npm ci)"
|
|
30
|
+
if ! (cd "$WEBSITE" && npm ci >/dev/null 2>&1); then
|
|
31
|
+
fail "website npm ci failed — cannot run build check"
|
|
32
|
+
return 1
|
|
33
|
+
fi
|
|
34
|
+
pass "website deps installed for build check"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
INDEX_MDX="$WEBSITE/src/content/docs/index.mdx"
|
|
38
|
+
LLMS_TXT="$WEBSITE/public/llms.txt"
|
|
39
|
+
|
|
40
|
+
echo "--- [docs] generated landing hero link ---"
|
|
41
|
+
if [[ ! -f "$INDEX_MDX" ]]; then
|
|
42
|
+
fail "missing $INDEX_MDX — run cd website && npm run generate"
|
|
43
|
+
elif grep -q "link: ${SITE_BASE}/skills/" "$INDEX_MDX"; then
|
|
44
|
+
pass "hero Browse skills link includes SITE_BASE"
|
|
45
|
+
else
|
|
46
|
+
fail "hero link missing ${SITE_BASE}/skills/ prefix in index.mdx"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
echo "--- [docs] no root-absolute skill links in landing page ---"
|
|
50
|
+
if [[ -f "$INDEX_MDX" ]] && grep -E '\]\(/skills/' "$INDEX_MDX" >/dev/null 2>&1; then
|
|
51
|
+
fail "index.mdx still contains root-absolute /skills/ links"
|
|
52
|
+
else
|
|
53
|
+
pass "index.mdx skill links are base-prefixed or absent"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
echo "--- [docs] llms.txt URL shape ---"
|
|
57
|
+
if [[ ! -f "$LLMS_TXT" ]]; then
|
|
58
|
+
fail "missing $LLMS_TXT — run cd website && npm run generate"
|
|
59
|
+
elif grep -q '/bigpowers/bigpowers/' "$LLMS_TXT"; then
|
|
60
|
+
fail "llms.txt double-prefixes SITE_BASE in URLs"
|
|
61
|
+
else
|
|
62
|
+
pass "llms.txt has no /bigpowers/bigpowers/ double prefix"
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
echo "--- [docs] production build hero href ---"
|
|
66
|
+
if ! command -v npm >/dev/null 2>&1; then
|
|
67
|
+
echo "warn: npm unavailable — skipping dist/index.html check"
|
|
68
|
+
elif ensure_website_deps; then
|
|
69
|
+
BUILD_ERR=$(mktemp)
|
|
70
|
+
if (cd "$WEBSITE" && npm run build >/dev/null 2>"$BUILD_ERR"); then
|
|
71
|
+
if grep -q 'href="/bigpowers/skills/"' "$WEBSITE/dist/index.html" 2>/dev/null; then
|
|
72
|
+
pass "dist/index.html hero href includes /bigpowers/skills/"
|
|
73
|
+
else
|
|
74
|
+
fail "dist/index.html missing href=\"/bigpowers/skills/\" for Browse skills"
|
|
75
|
+
fi
|
|
76
|
+
else
|
|
77
|
+
fail "website build failed — $(head -3 "$BUILD_ERR" 2>/dev/null | tr '\n' ' ')"
|
|
78
|
+
fi
|
|
79
|
+
rm -f "$BUILD_ERR"
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
echo "---"
|
|
83
|
+
if [[ "$ERRORS" -eq 0 ]]; then
|
|
84
|
+
echo "Docs base-path validation passed"
|
|
85
|
+
else
|
|
86
|
+
echo "Docs base-path validation FAILED ($ERRORS error(s))"
|
|
87
|
+
exit 1
|
|
88
|
+
fi
|