bigpowers 2.68.1 → 2.68.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 +1 -1
- package/CHANGELOG.md +8 -0
- package/package.json +1 -1
- package/scripts/check-stale-locks.sh +38 -0
- package/scripts/validate-specs-yaml.sh +5 -0
package/.pi/package.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## [2.68.2](https://github.com/danielvm-git/bigpowers/compare/v2.68.1...v2.68.2) (2026-07-06)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **ci:** extract stale-lock check to script — inline Python broke YAML parser ([1fd0126](https://github.com/danielvm-git/bigpowers/commit/1fd01261c0c3bee250a89aab394f35fb21e41c75))
|
|
7
|
+
* **ci:** validate-specs-yaml.sh REPO_ROOT unbound in skill-health — add local resolution ([4dada67](https://github.com/danielvm-git/bigpowers/commit/4dada67dfe47c9e3228cb1749c3200851a6f241a))
|
|
8
|
+
|
|
1
9
|
## [2.68.1](https://github.com/danielvm-git/bigpowers/compare/v2.68.0...v2.68.1) (2026-07-06)
|
|
2
10
|
|
|
3
11
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e39s02
|
|
3
|
+
# Validate that no agent lock in specs/agent-locks.yaml is >24h old.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
LOCK_FILE="specs/agent-locks.yaml"
|
|
7
|
+
if [ ! -f "$LOCK_FILE" ]; then
|
|
8
|
+
echo "No agent-locks.yaml — skipping stale-lock check"
|
|
9
|
+
exit 0
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
python3 -c "
|
|
13
|
+
import yaml, datetime, sys
|
|
14
|
+
|
|
15
|
+
now = datetime.datetime.now(datetime.timezone.utc)
|
|
16
|
+
with open('$LOCK_FILE') as f:
|
|
17
|
+
d = yaml.safe_load(f)
|
|
18
|
+
|
|
19
|
+
if not d or 'locks' not in d:
|
|
20
|
+
print('No locks to validate')
|
|
21
|
+
sys.exit(0)
|
|
22
|
+
|
|
23
|
+
stale = []
|
|
24
|
+
for lock in d['locks']:
|
|
25
|
+
locked_at = datetime.datetime.fromisoformat(lock.get('locked_at', '1970-01-01T00:00:00Z'))
|
|
26
|
+
if locked_at.tzinfo is None:
|
|
27
|
+
locked_at = locked_at.replace(tzinfo=datetime.timezone.utc)
|
|
28
|
+
age_hours = (now - locked_at).total_seconds() / 3600
|
|
29
|
+
if age_hours > 24:
|
|
30
|
+
stale.append(f'{lock[\"story_id\"]}: locked by {lock.get(\"locked_by\", \"?\")} for {age_hours:.1f}h')
|
|
31
|
+
|
|
32
|
+
if stale:
|
|
33
|
+
print(f'::warning::Stale locks found (>24h):')
|
|
34
|
+
for s in stale:
|
|
35
|
+
print(f' {s}')
|
|
36
|
+
else:
|
|
37
|
+
print('No stale locks')
|
|
38
|
+
" 2>&1
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
# specs/**/*.yaml with PyYAML first, and runs the required-key checks
|
|
9
9
|
# against the *parsed* objects, not against grep.
|
|
10
10
|
set -euo pipefail
|
|
11
|
+
|
|
12
|
+
# Resolve REPO_ROOT from script location
|
|
13
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
15
|
+
|
|
11
16
|
SPECS="${1:-$REPO_ROOT/specs}"
|
|
12
17
|
|
|
13
18
|
err=0
|