bigpowers 2.76.1 → 2.76.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/.pi/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.76.1",
3
+ "version": "2.76.2",
4
4
  "description": "77 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.76.2](https://github.com/danielvm-git/bigpowers/compare/v2.76.1...v2.76.2) (2026-07-09)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **ci:** add orphan gitlink guard to prevent checkout failures ([#70](https://github.com/danielvm-git/bigpowers/issues/70)) ([4325ae9](https://github.com/danielvm-git/bigpowers/commit/4325ae9fd853defbb37d63c41317278b8882a6be))
7
+
1
8
  ## [2.76.1](https://github.com/danielvm-git/bigpowers/compare/v2.76.0...v2.76.1) (2026-07-09)
2
9
 
3
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.76.1",
3
+ "version": "2.76.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": {
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env bash
2
+ # check-orphan-gitlinks.sh — fail if git index has gitlinks without .gitmodules URLs
3
+ # story: BUG-2026-07-09T033939-golden-g01-submodule-checkout
4
+ set -euo pipefail
5
+
6
+ check_orphan_gitlinks() {
7
+ local repo_root="${1:-.}"
8
+ local gitlinks orphans=0
9
+
10
+ cd "$repo_root"
11
+
12
+ while IFS= read -r path; do
13
+ [[ -z "$path" ]] && continue
14
+ if [[ ! -f .gitmodules ]] || ! git config -f .gitmodules --get "submodule.${path}.url" >/dev/null 2>&1; then
15
+ gitlinks+=("$path")
16
+ orphans=$((orphans + 1))
17
+ fi
18
+ done < <(git ls-files -s | awk '$1 == "160000" { $1=$2=$3=""; sub(/^ /, ""); print }')
19
+
20
+ if [[ "$orphans" -eq 0 ]]; then
21
+ echo "no orphan gitlinks"
22
+ return 0
23
+ fi
24
+
25
+ echo "orphan gitlink(s) without .gitmodules URL:" >&2
26
+ printf ' %s\n' "${gitlinks[@]}" >&2
27
+ return 1
28
+ }
29
+
30
+ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
31
+ check_orphan_gitlinks "$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
32
+ fi
@@ -137,6 +137,17 @@ else
137
137
  done
138
138
  fi
139
139
 
140
+ # ── CI: orphan gitlinks break actions/checkout submodule cleanup ───────────────
141
+ echo "--- [CI] orphan gitlinks ---"
142
+ # shellcheck source=lib/check-orphan-gitlinks.sh
143
+ source "$REPO_ROOT/scripts/lib/check-orphan-gitlinks.sh"
144
+ if check_orphan_gitlinks "$REPO_ROOT" >/dev/null; then
145
+ doctrine_pass "no orphan gitlinks"
146
+ else
147
+ doctrine_fail "git index contains gitlink(s) without .gitmodules URL — breaks actions/checkout"
148
+ check_orphan_gitlinks "$REPO_ROOT" >&2 || true
149
+ fi
150
+
140
151
  # ── CI: trace-stories wrapper smoke (REPO_ROOT must be set under set -u) ───────
141
152
  echo "--- [CI] trace-stories wrapper smoke ---"
142
153
  if bash "$REPO_ROOT/scripts/trace-stories.sh" --help >/dev/null 2>&1; then
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env bash
2
+ # story: BUG-2026-07-09T033939-golden-g01-submodule-checkout
3
+ # Regression: orphan gitlinks (160000) without .gitmodules URLs break actions/checkout.
4
+ set -euo pipefail
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
8
+ # shellcheck source=../scripts/lib/check-orphan-gitlinks.sh
9
+ source "$REPO_ROOT/scripts/lib/check-orphan-gitlinks.sh"
10
+
11
+ # Clean tree must pass.
12
+ if ! output="$(check_orphan_gitlinks "$REPO_ROOT")"; then
13
+ echo "FAIL: check_orphan_gitlinks failed on clean tree"
14
+ exit 1
15
+ fi
16
+ if [[ "$output" != "no orphan gitlinks" ]]; then
17
+ echo "FAIL: unexpected output: $output"
18
+ exit 1
19
+ fi
20
+
21
+ # Synthetic orphan: gitlink path with no .gitmodules entry must fail.
22
+ tmpdir="$(mktemp -d)"
23
+ trap 'rm -rf "$tmpdir"' EXIT
24
+ git -C "$tmpdir" init -q
25
+ git -C "$tmpdir" config user.email "test@example.com"
26
+ git -C "$tmpdir" config user.name "test"
27
+ mkdir -p "$tmpdir/sub"
28
+ echo "nested" >"$tmpdir/sub/file.txt"
29
+ git -C "$tmpdir/sub" init -q
30
+ git -C "$tmpdir/sub" add file.txt
31
+ git -C "$tmpdir/sub" commit -qm "nested"
32
+ git -C "$tmpdir" add sub
33
+ if ! check_orphan_gitlinks "$tmpdir" >/dev/null 2>&1; then
34
+ echo "PASS: synthetic orphan gitlink correctly rejected"
35
+ exit 0
36
+ fi
37
+
38
+ echo "FAIL: check_orphan_gitlinks should reject orphan gitlink in synthetic repo"
39
+ exit 1