bigpowers 2.9.0 → 2.10.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/.pi/prompts/develop-tdd.md +60 -0
- package/.pi/prompts/release-branch.md +46 -0
- package/.pi/skills/develop-tdd/SKILL.md +60 -0
- package/.pi/skills/release-branch/SKILL.md +46 -0
- package/CHANGELOG.md +7 -0
- package/SKILL-INDEX.md +1 -1
- package/develop-tdd/SKILL.md +60 -0
- package/package.json +1 -1
- package/release-branch/SKILL.md +46 -0
- package/skills-lock.json +2 -2
package/.pi/package.json
CHANGED
|
@@ -67,6 +67,66 @@ After all tests pass: extract duplication, deepen modules, apply SOLID principle
|
|
|
67
67
|
|
|
68
68
|
After every behavior cycle, run the verify command from the active epic task. Show evidence before declaring the step done.
|
|
69
69
|
|
|
70
|
+
### 6a. CI dry-run sub-step (when modifying workflows)
|
|
71
|
+
|
|
72
|
+
If this cycle modified files in `.github/workflows/`, run a CI dry-run before pushing:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# 1. Check for workflow file changes
|
|
76
|
+
CHANGED_WORKFLOWS=$(git diff --name-only HEAD | grep '\.github/workflows/' || true)
|
|
77
|
+
if [ -n "$CHANGED_WORKFLOWS" ]; then
|
|
78
|
+
echo "==> CI dry-run: workflow files changed"
|
|
79
|
+
echo " $CHANGED_WORKFLOWS"
|
|
80
|
+
|
|
81
|
+
# 2. Validate YAML syntax
|
|
82
|
+
if command -v yamllint &>/dev/null; then
|
|
83
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
84
|
+
yamllint "$f" && echo " OK: $f passes YAML lint" || echo " WARN: $f has YAML issues"
|
|
85
|
+
done
|
|
86
|
+
else
|
|
87
|
+
# Fallback: Python YAML parse
|
|
88
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
89
|
+
python3 -c "import yaml; yaml.safe_load(open('$f'))" 2>/dev/null && \
|
|
90
|
+
echo " OK: $f YAML syntax valid" || \
|
|
91
|
+
echo " FAIL: $f has YAML syntax errors"
|
|
92
|
+
done
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
# 3. Run actionlint if available
|
|
96
|
+
if command -v actionlint &>/dev/null; then
|
|
97
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
98
|
+
actionlint "$f" && echo " OK: $f passes actionlint" || echo " WARN: $f has actionlint issues"
|
|
99
|
+
done
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
# 4. Check common pitfalls
|
|
103
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
104
|
+
# Missing permissions block
|
|
105
|
+
if ! grep -q 'permissions:' "$f"; then
|
|
106
|
+
echo " WARNING: $f missing permissions block — add one for security"
|
|
107
|
+
fi
|
|
108
|
+
# npm publish without NPM_TOKEN
|
|
109
|
+
if grep -q 'npm publish\|npx semantic-release' "$f" && ! grep -q 'NPM_TOKEN' "$f"; then
|
|
110
|
+
echo " WARNING: $f has npm publish/semantic-release but no NPM_TOKEN in secrets"
|
|
111
|
+
fi
|
|
112
|
+
# Hardcoded Node versions
|
|
113
|
+
if grep -q 'node-version: [0-9]' "$f"; then
|
|
114
|
+
echo " NOTE: $f has hardcoded Node version — consider node-version-file: .nvmrc"
|
|
115
|
+
fi
|
|
116
|
+
done
|
|
117
|
+
|
|
118
|
+
# 5. Suggest local dry-run
|
|
119
|
+
if command -v act &>/dev/null; then
|
|
120
|
+
echo " SUGGESTION: Run 'act push --dry-run' to test workflows locally"
|
|
121
|
+
fi
|
|
122
|
+
fi
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Checklist:
|
|
126
|
+
- [ ] YAML syntax validated for all changed workflow files
|
|
127
|
+
- [ ] No missing permissions, secrets, or hardcoded versions flagged
|
|
128
|
+
- [ ] Local dry-run suggested if `act` is available
|
|
129
|
+
|
|
70
130
|
### 7. Manual Verification Handover
|
|
71
131
|
|
|
72
132
|
Once all tests pass: locate the Verification Script in the active epic capsule, present it to the user step-by-step, and wait for confirmation of behavioral correctness.
|
|
@@ -107,6 +107,52 @@ gh pr merge --squash --delete-branch
|
|
|
107
107
|
mv specs/epics/eNN-slug specs/epics/archive/
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
+
### 7b. CI verification (solo-local and team-pr)
|
|
111
|
+
|
|
112
|
+
> **HARD GATE** — Do NOT declare success until CI completes. A push that fails CI is a regression, not a release.
|
|
113
|
+
|
|
114
|
+
After push (solo-local step 5 or team-pr step 7), verify the CI workflow completes successfully:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
echo "==> Polling CI for main branch..."
|
|
118
|
+
TIMEOUT=600 # 10 minutes
|
|
119
|
+
INTERVAL=30 # poll every 30 seconds
|
|
120
|
+
ELAPSED=0
|
|
121
|
+
|
|
122
|
+
while [ $ELAPSED -lt $TIMEOUT ]; do
|
|
123
|
+
CI_JSON=$(gh run list --limit 1 --branch main --workflow CI --json status,conclusion,headSha,databaseId 2>/dev/null)
|
|
124
|
+
CI_STATUS=$(echo "$CI_JSON" | jq -r '.[0].status // "unknown"')
|
|
125
|
+
CI_CONCLUSION=$(echo "$CI_JSON" | jq -r '.[0].conclusion // ""')
|
|
126
|
+
CI_SHA=$(echo "$CI_JSON" | jq -r '.[0].headSha // ""')
|
|
127
|
+
CI_ID=$(echo "$CI_JSON" | jq -r '.[0].databaseId // ""')
|
|
128
|
+
|
|
129
|
+
if [ "$CI_STATUS" = "completed" ] && [ "$CI_CONCLUSION" = "success" ]; then
|
|
130
|
+
echo "OK: CI passed for $(git rev-parse --short HEAD)"
|
|
131
|
+
bp-yaml-set.sh specs/state.yaml release.ci_verified true 2>/dev/null || \
|
|
132
|
+
echo " (bp-yaml-set not available — manually set release.ci_verified: true in state.yaml)"
|
|
133
|
+
break
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
if [ "$CI_STATUS" = "completed" ] && [ "$CI_CONCLUSION" = "failure" ]; then
|
|
137
|
+
echo "FAIL: CI failed for $(git rev-parse --short HEAD)"
|
|
138
|
+
echo " Run URL: https://github.com/$(gh repo view --json nameWithOwner -q .nameWithOwner)/actions/runs/$CI_ID"
|
|
139
|
+
echo " Handoff to fix-bug with the failure URL above."
|
|
140
|
+
return 1
|
|
141
|
+
fi
|
|
142
|
+
|
|
143
|
+
sleep $INTERVAL
|
|
144
|
+
ELAPSED=$((ELAPSED + INTERVAL))
|
|
145
|
+
echo " Waiting... (${ELAPSED}s / ${TIMEOUT}s)"
|
|
146
|
+
done
|
|
147
|
+
|
|
148
|
+
echo "FAIL: CI did not complete within ${TIMEOUT}s timeout"
|
|
149
|
+
return 1
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
- [ ] CI workflow passes after push
|
|
153
|
+
- [ ] `release.ci_verified: true` documented in state.yaml
|
|
154
|
+
- On failure: `handoff.next_skill = fix-bug` with the CI failure URL
|
|
155
|
+
|
|
110
156
|
### 8. Clean up worktree
|
|
111
157
|
|
|
112
158
|
```bash
|
|
@@ -69,6 +69,66 @@ After all tests pass: extract duplication, deepen modules, apply SOLID principle
|
|
|
69
69
|
|
|
70
70
|
After every behavior cycle, run the verify command from the active epic task. Show evidence before declaring the step done.
|
|
71
71
|
|
|
72
|
+
### 6a. CI dry-run sub-step (when modifying workflows)
|
|
73
|
+
|
|
74
|
+
If this cycle modified files in `.github/workflows/`, run a CI dry-run before pushing:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# 1. Check for workflow file changes
|
|
78
|
+
CHANGED_WORKFLOWS=$(git diff --name-only HEAD | grep '\.github/workflows/' || true)
|
|
79
|
+
if [ -n "$CHANGED_WORKFLOWS" ]; then
|
|
80
|
+
echo "==> CI dry-run: workflow files changed"
|
|
81
|
+
echo " $CHANGED_WORKFLOWS"
|
|
82
|
+
|
|
83
|
+
# 2. Validate YAML syntax
|
|
84
|
+
if command -v yamllint &>/dev/null; then
|
|
85
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
86
|
+
yamllint "$f" && echo " OK: $f passes YAML lint" || echo " WARN: $f has YAML issues"
|
|
87
|
+
done
|
|
88
|
+
else
|
|
89
|
+
# Fallback: Python YAML parse
|
|
90
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
91
|
+
python3 -c "import yaml; yaml.safe_load(open('$f'))" 2>/dev/null && \
|
|
92
|
+
echo " OK: $f YAML syntax valid" || \
|
|
93
|
+
echo " FAIL: $f has YAML syntax errors"
|
|
94
|
+
done
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
# 3. Run actionlint if available
|
|
98
|
+
if command -v actionlint &>/dev/null; then
|
|
99
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
100
|
+
actionlint "$f" && echo " OK: $f passes actionlint" || echo " WARN: $f has actionlint issues"
|
|
101
|
+
done
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
# 4. Check common pitfalls
|
|
105
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
106
|
+
# Missing permissions block
|
|
107
|
+
if ! grep -q 'permissions:' "$f"; then
|
|
108
|
+
echo " WARNING: $f missing permissions block — add one for security"
|
|
109
|
+
fi
|
|
110
|
+
# npm publish without NPM_TOKEN
|
|
111
|
+
if grep -q 'npm publish\|npx semantic-release' "$f" && ! grep -q 'NPM_TOKEN' "$f"; then
|
|
112
|
+
echo " WARNING: $f has npm publish/semantic-release but no NPM_TOKEN in secrets"
|
|
113
|
+
fi
|
|
114
|
+
# Hardcoded Node versions
|
|
115
|
+
if grep -q 'node-version: [0-9]' "$f"; then
|
|
116
|
+
echo " NOTE: $f has hardcoded Node version — consider node-version-file: .nvmrc"
|
|
117
|
+
fi
|
|
118
|
+
done
|
|
119
|
+
|
|
120
|
+
# 5. Suggest local dry-run
|
|
121
|
+
if command -v act &>/dev/null; then
|
|
122
|
+
echo " SUGGESTION: Run 'act push --dry-run' to test workflows locally"
|
|
123
|
+
fi
|
|
124
|
+
fi
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Checklist:
|
|
128
|
+
- [ ] YAML syntax validated for all changed workflow files
|
|
129
|
+
- [ ] No missing permissions, secrets, or hardcoded versions flagged
|
|
130
|
+
- [ ] Local dry-run suggested if `act` is available
|
|
131
|
+
|
|
72
132
|
### 7. Manual Verification Handover
|
|
73
133
|
|
|
74
134
|
Once all tests pass: locate the Verification Script in the active epic capsule, present it to the user step-by-step, and wait for confirmation of behavioral correctness.
|
|
@@ -109,6 +109,52 @@ gh pr merge --squash --delete-branch
|
|
|
109
109
|
mv specs/epics/eNN-slug specs/epics/archive/
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
+
### 7b. CI verification (solo-local and team-pr)
|
|
113
|
+
|
|
114
|
+
> **HARD GATE** — Do NOT declare success until CI completes. A push that fails CI is a regression, not a release.
|
|
115
|
+
|
|
116
|
+
After push (solo-local step 5 or team-pr step 7), verify the CI workflow completes successfully:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
echo "==> Polling CI for main branch..."
|
|
120
|
+
TIMEOUT=600 # 10 minutes
|
|
121
|
+
INTERVAL=30 # poll every 30 seconds
|
|
122
|
+
ELAPSED=0
|
|
123
|
+
|
|
124
|
+
while [ $ELAPSED -lt $TIMEOUT ]; do
|
|
125
|
+
CI_JSON=$(gh run list --limit 1 --branch main --workflow CI --json status,conclusion,headSha,databaseId 2>/dev/null)
|
|
126
|
+
CI_STATUS=$(echo "$CI_JSON" | jq -r '.[0].status // "unknown"')
|
|
127
|
+
CI_CONCLUSION=$(echo "$CI_JSON" | jq -r '.[0].conclusion // ""')
|
|
128
|
+
CI_SHA=$(echo "$CI_JSON" | jq -r '.[0].headSha // ""')
|
|
129
|
+
CI_ID=$(echo "$CI_JSON" | jq -r '.[0].databaseId // ""')
|
|
130
|
+
|
|
131
|
+
if [ "$CI_STATUS" = "completed" ] && [ "$CI_CONCLUSION" = "success" ]; then
|
|
132
|
+
echo "OK: CI passed for $(git rev-parse --short HEAD)"
|
|
133
|
+
bp-yaml-set.sh specs/state.yaml release.ci_verified true 2>/dev/null || \
|
|
134
|
+
echo " (bp-yaml-set not available — manually set release.ci_verified: true in state.yaml)"
|
|
135
|
+
break
|
|
136
|
+
fi
|
|
137
|
+
|
|
138
|
+
if [ "$CI_STATUS" = "completed" ] && [ "$CI_CONCLUSION" = "failure" ]; then
|
|
139
|
+
echo "FAIL: CI failed for $(git rev-parse --short HEAD)"
|
|
140
|
+
echo " Run URL: https://github.com/$(gh repo view --json nameWithOwner -q .nameWithOwner)/actions/runs/$CI_ID"
|
|
141
|
+
echo " Handoff to fix-bug with the failure URL above."
|
|
142
|
+
return 1
|
|
143
|
+
fi
|
|
144
|
+
|
|
145
|
+
sleep $INTERVAL
|
|
146
|
+
ELAPSED=$((ELAPSED + INTERVAL))
|
|
147
|
+
echo " Waiting... (${ELAPSED}s / ${TIMEOUT}s)"
|
|
148
|
+
done
|
|
149
|
+
|
|
150
|
+
echo "FAIL: CI did not complete within ${TIMEOUT}s timeout"
|
|
151
|
+
return 1
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
- [ ] CI workflow passes after push
|
|
155
|
+
- [ ] `release.ci_verified: true` documented in state.yaml
|
|
156
|
+
- On failure: `handoff.next_skill = fix-bug` with the CI failure URL
|
|
157
|
+
|
|
112
158
|
### 8. Clean up worktree
|
|
113
159
|
|
|
114
160
|
```bash
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [2.10.0](https://github.com/danielvm-git/bigpowers/compare/v2.9.0...v2.10.0) (2026-06-20)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **skills:** add CI verify and dry-run to skills ([e751564](https://github.com/danielvm-git/bigpowers/commit/e75156478b7c23f4e32ed78eec644916f14dd3c4))
|
|
7
|
+
|
|
1
8
|
# [2.9.0](https://github.com/danielvm-git/bigpowers/compare/v2.8.0...v2.9.0) (2026-06-20)
|
|
2
9
|
|
|
3
10
|
|
package/SKILL-INDEX.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> **DO NOT EDIT** — This file is auto-generated by `scripts/generate-skill-index.sh`.
|
|
4
4
|
> Edit `SKILL.md` source files or `skills-lock.json` instead. Run `bash scripts/sync-skills.sh` to regenerate.
|
|
5
5
|
|
|
6
|
-
**Generated:** 2026-06-20T21:
|
|
6
|
+
**Generated:** 2026-06-20T21:31:11Z
|
|
7
7
|
**Skills:** 64
|
|
8
8
|
|
|
9
9
|
---
|
package/develop-tdd/SKILL.md
CHANGED
|
@@ -68,6 +68,66 @@ After all tests pass: extract duplication, deepen modules, apply SOLID principle
|
|
|
68
68
|
|
|
69
69
|
After every behavior cycle, run the verify command from the active epic task. Show evidence before declaring the step done.
|
|
70
70
|
|
|
71
|
+
### 6a. CI dry-run sub-step (when modifying workflows)
|
|
72
|
+
|
|
73
|
+
If this cycle modified files in `.github/workflows/`, run a CI dry-run before pushing:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# 1. Check for workflow file changes
|
|
77
|
+
CHANGED_WORKFLOWS=$(git diff --name-only HEAD | grep '\.github/workflows/' || true)
|
|
78
|
+
if [ -n "$CHANGED_WORKFLOWS" ]; then
|
|
79
|
+
echo "==> CI dry-run: workflow files changed"
|
|
80
|
+
echo " $CHANGED_WORKFLOWS"
|
|
81
|
+
|
|
82
|
+
# 2. Validate YAML syntax
|
|
83
|
+
if command -v yamllint &>/dev/null; then
|
|
84
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
85
|
+
yamllint "$f" && echo " OK: $f passes YAML lint" || echo " WARN: $f has YAML issues"
|
|
86
|
+
done
|
|
87
|
+
else
|
|
88
|
+
# Fallback: Python YAML parse
|
|
89
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
90
|
+
python3 -c "import yaml; yaml.safe_load(open('$f'))" 2>/dev/null && \
|
|
91
|
+
echo " OK: $f YAML syntax valid" || \
|
|
92
|
+
echo " FAIL: $f has YAML syntax errors"
|
|
93
|
+
done
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
# 3. Run actionlint if available
|
|
97
|
+
if command -v actionlint &>/dev/null; then
|
|
98
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
99
|
+
actionlint "$f" && echo " OK: $f passes actionlint" || echo " WARN: $f has actionlint issues"
|
|
100
|
+
done
|
|
101
|
+
fi
|
|
102
|
+
|
|
103
|
+
# 4. Check common pitfalls
|
|
104
|
+
for f in $CHANGED_WORKFLOWS; do
|
|
105
|
+
# Missing permissions block
|
|
106
|
+
if ! grep -q 'permissions:' "$f"; then
|
|
107
|
+
echo " WARNING: $f missing permissions block — add one for security"
|
|
108
|
+
fi
|
|
109
|
+
# npm publish without NPM_TOKEN
|
|
110
|
+
if grep -q 'npm publish\|npx semantic-release' "$f" && ! grep -q 'NPM_TOKEN' "$f"; then
|
|
111
|
+
echo " WARNING: $f has npm publish/semantic-release but no NPM_TOKEN in secrets"
|
|
112
|
+
fi
|
|
113
|
+
# Hardcoded Node versions
|
|
114
|
+
if grep -q 'node-version: [0-9]' "$f"; then
|
|
115
|
+
echo " NOTE: $f has hardcoded Node version — consider node-version-file: .nvmrc"
|
|
116
|
+
fi
|
|
117
|
+
done
|
|
118
|
+
|
|
119
|
+
# 5. Suggest local dry-run
|
|
120
|
+
if command -v act &>/dev/null; then
|
|
121
|
+
echo " SUGGESTION: Run 'act push --dry-run' to test workflows locally"
|
|
122
|
+
fi
|
|
123
|
+
fi
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Checklist:
|
|
127
|
+
- [ ] YAML syntax validated for all changed workflow files
|
|
128
|
+
- [ ] No missing permissions, secrets, or hardcoded versions flagged
|
|
129
|
+
- [ ] Local dry-run suggested if `act` is available
|
|
130
|
+
|
|
71
131
|
### 7. Manual Verification Handover
|
|
72
132
|
|
|
73
133
|
Once all tests pass: locate the Verification Script in the active epic capsule, present it to the user step-by-step, and wait for confirmation of behavioral correctness.
|
package/package.json
CHANGED
package/release-branch/SKILL.md
CHANGED
|
@@ -108,6 +108,52 @@ gh pr merge --squash --delete-branch
|
|
|
108
108
|
mv specs/epics/eNN-slug specs/epics/archive/
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
+
### 7b. CI verification (solo-local and team-pr)
|
|
112
|
+
|
|
113
|
+
> **HARD GATE** — Do NOT declare success until CI completes. A push that fails CI is a regression, not a release.
|
|
114
|
+
|
|
115
|
+
After push (solo-local step 5 or team-pr step 7), verify the CI workflow completes successfully:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
echo "==> Polling CI for main branch..."
|
|
119
|
+
TIMEOUT=600 # 10 minutes
|
|
120
|
+
INTERVAL=30 # poll every 30 seconds
|
|
121
|
+
ELAPSED=0
|
|
122
|
+
|
|
123
|
+
while [ $ELAPSED -lt $TIMEOUT ]; do
|
|
124
|
+
CI_JSON=$(gh run list --limit 1 --branch main --workflow CI --json status,conclusion,headSha,databaseId 2>/dev/null)
|
|
125
|
+
CI_STATUS=$(echo "$CI_JSON" | jq -r '.[0].status // "unknown"')
|
|
126
|
+
CI_CONCLUSION=$(echo "$CI_JSON" | jq -r '.[0].conclusion // ""')
|
|
127
|
+
CI_SHA=$(echo "$CI_JSON" | jq -r '.[0].headSha // ""')
|
|
128
|
+
CI_ID=$(echo "$CI_JSON" | jq -r '.[0].databaseId // ""')
|
|
129
|
+
|
|
130
|
+
if [ "$CI_STATUS" = "completed" ] && [ "$CI_CONCLUSION" = "success" ]; then
|
|
131
|
+
echo "OK: CI passed for $(git rev-parse --short HEAD)"
|
|
132
|
+
bp-yaml-set.sh specs/state.yaml release.ci_verified true 2>/dev/null || \
|
|
133
|
+
echo " (bp-yaml-set not available — manually set release.ci_verified: true in state.yaml)"
|
|
134
|
+
break
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
if [ "$CI_STATUS" = "completed" ] && [ "$CI_CONCLUSION" = "failure" ]; then
|
|
138
|
+
echo "FAIL: CI failed for $(git rev-parse --short HEAD)"
|
|
139
|
+
echo " Run URL: https://github.com/$(gh repo view --json nameWithOwner -q .nameWithOwner)/actions/runs/$CI_ID"
|
|
140
|
+
echo " Handoff to fix-bug with the failure URL above."
|
|
141
|
+
return 1
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
sleep $INTERVAL
|
|
145
|
+
ELAPSED=$((ELAPSED + INTERVAL))
|
|
146
|
+
echo " Waiting... (${ELAPSED}s / ${TIMEOUT}s)"
|
|
147
|
+
done
|
|
148
|
+
|
|
149
|
+
echo "FAIL: CI did not complete within ${TIMEOUT}s timeout"
|
|
150
|
+
return 1
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
- [ ] CI workflow passes after push
|
|
154
|
+
- [ ] `release.ci_verified: true` documented in state.yaml
|
|
155
|
+
- On failure: `handoff.next_skill = fix-bug` with the CI failure URL
|
|
156
|
+
|
|
111
157
|
### 8. Clean up worktree
|
|
112
158
|
|
|
113
159
|
```bash
|
package/skills-lock.json
CHANGED
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
},
|
|
69
69
|
"develop-tdd": {
|
|
70
70
|
"description": "Test-driven development with red-green-refactor loop using vertical slices. Use for features (epic tasks) or bugs (specs/bugs/BUG-*.md).",
|
|
71
|
-
"sha256": "
|
|
71
|
+
"sha256": "4002d960b18436cd",
|
|
72
72
|
"path": "develop-tdd/SKILL.md"
|
|
73
73
|
},
|
|
74
74
|
"diagnose-root": {
|
|
@@ -193,7 +193,7 @@
|
|
|
193
193
|
},
|
|
194
194
|
"release-branch": {
|
|
195
195
|
"description": "Make the merge/PR/keep/discard decision for a feature branch, verify coverage gates, create the PR with gh, and clean up the worktree. Use when a feature is done and ready to ship, or when user says \"release\", \"merge\", or \"open a PR\".",
|
|
196
|
-
"sha256": "
|
|
196
|
+
"sha256": "6b2df2c92230d098",
|
|
197
197
|
"path": "release-branch/SKILL.md"
|
|
198
198
|
},
|
|
199
199
|
"request-review": {
|