bigpowers 2.86.0 → 2.86.1
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/.agents/skills/diagnose-root/SKILL.md +1 -1
- package/.agents/skills/migrate-spec/SKILL.md +3 -3
- package/.agents/skills/plan-work/SKILL.md +1 -1
- package/.agents/skills/trace-requirement/SKILL.md +1 -1
- package/.codebuddy/skills/diagnose-root/SKILL.md +1 -1
- package/.codebuddy/skills/migrate-spec/SKILL.md +3 -3
- package/.codebuddy/skills/plan-work/SKILL.md +1 -1
- package/.codebuddy/skills/trace-requirement/SKILL.md +1 -1
- package/.codex/skills/diagnose-root/SKILL.md +1 -1
- package/.codex/skills/migrate-spec/SKILL.md +3 -3
- package/.codex/skills/plan-work/SKILL.md +1 -1
- package/.codex/skills/trace-requirement/SKILL.md +1 -1
- package/.hermes/skills/diagnose-root/SKILL.md +1 -1
- package/.hermes/skills/migrate-spec/SKILL.md +3 -3
- package/.hermes/skills/plan-work/SKILL.md +1 -1
- package/.hermes/skills/trace-requirement/SKILL.md +1 -1
- package/.kilocode/rules/diagnose-root.md +1 -1
- package/.kilocode/rules/migrate-spec.md +3 -3
- package/.kilocode/rules/plan-work.md +1 -1
- package/.kilocode/rules/trace-requirement.md +1 -1
- package/.mimocode/skills/diagnose-root/SKILL.md +1 -1
- package/.mimocode/skills/migrate-spec/SKILL.md +3 -3
- package/.mimocode/skills/plan-work/SKILL.md +1 -1
- package/.mimocode/skills/trace-requirement/SKILL.md +1 -1
- package/.pi/package.json +1 -1
- package/.pi/prompts/diagnose-root.md +1 -1
- package/.pi/prompts/migrate-spec.md +3 -3
- package/.pi/prompts/plan-work.md +1 -1
- package/.pi/prompts/trace-requirement.md +1 -1
- package/.pi/skills/diagnose-root/SKILL.md +1 -1
- package/.pi/skills/migrate-spec/SKILL.md +3 -3
- package/.pi/skills/plan-work/SKILL.md +1 -1
- package/.pi/skills/trace-requirement/SKILL.md +1 -1
- package/.trae/skills/diagnose-root/SKILL.md +1 -1
- package/.trae/skills/migrate-spec/SKILL.md +3 -3
- package/.trae/skills/plan-work/SKILL.md +1 -1
- package/.trae/skills/trace-requirement/SKILL.md +1 -1
- package/.windsurf/rules/diagnose-root.md +1 -1
- package/.windsurf/rules/migrate-spec.md +3 -3
- package/.windsurf/rules/plan-work.md +1 -1
- package/.windsurf/rules/trace-requirement.md +1 -1
- package/.zcode/skills/diagnose-root/SKILL.md +1 -1
- package/.zcode/skills/migrate-spec/SKILL.md +3 -3
- package/.zcode/skills/plan-work/SKILL.md +1 -1
- package/.zcode/skills/trace-requirement/SKILL.md +1 -1
- package/CHANGELOG.md +8 -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/run-skill-verify.sh +97 -10
- package/skills/diagnose-root/SKILL.md +1 -1
- package/skills/migrate-spec/SKILL.md +3 -3
- package/skills/plan-work/SKILL.md +1 -1
- package/skills/trace-requirement/SKILL.md +1 -1
- package/skills-lock.json +4 -4
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
package/.pi/package.json
CHANGED
|
@@ -20,4 +20,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
20
20
|
|
|
21
21
|
## Verify
|
|
22
22
|
|
|
23
|
-
→ verify: `
|
|
23
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -57,7 +57,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
57
57
|
|
|
58
58
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
59
59
|
|
|
60
|
-
→ verify: `
|
|
60
|
+
→ verify: `test -d specs && test -w specs`
|
|
61
61
|
|
|
62
62
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
63
63
|
|
|
@@ -93,9 +93,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
93
93
|
|
|
94
94
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
95
95
|
>
|
|
96
|
-
> → verify: `git
|
|
96
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
97
97
|
|
|
98
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
98
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
99
99
|
|
|
100
100
|
### Step 4 — Generate state.yaml
|
|
101
101
|
|
package/.pi/prompts/plan-work.md
CHANGED
|
@@ -83,7 +83,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
83
83
|
|
|
84
84
|
## Verify
|
|
85
85
|
|
|
86
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
86
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
87
87
|
|
|
88
88
|
|
|
89
89
|
|
|
@@ -31,7 +31,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
31
31
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
→ verify: `grep -
|
|
34
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
35
35
|
|
|
36
36
|
### 3. Build the matrix
|
|
37
37
|
|
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](../../../skills/migrate-spec/REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](../../../skills/migrate-sp
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
|
@@ -21,4 +21,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
21
21
|
|
|
22
22
|
## Verify
|
|
23
23
|
|
|
24
|
-
→ verify: `
|
|
24
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -84,7 +84,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
84
84
|
|
|
85
85
|
## Verify
|
|
86
86
|
|
|
87
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
87
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -32,7 +32,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
32
32
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
→ verify: `grep -
|
|
35
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
36
36
|
|
|
37
37
|
### 3. Build the matrix
|
|
38
38
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## [2.86.1](https://github.com/danielvm-git/bigpowers/compare/v2.86.0...v2.86.1) (2026-07-26)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **ci:** make skill-verify bash-3.2 safe and gate release on it ([a5fee16](https://github.com/danielvm-git/bigpowers/commit/a5fee16c70b29094bad0bd803a43797c9b4bd7b6)), closes [#96](https://github.com/danielvm-git/bigpowers/issues/96) [#96](https://github.com/danielvm-git/bigpowers/issues/96) [#99](https://github.com/danielvm-git/bigpowers/issues/99)
|
|
7
|
+
* **ci:** restore truncated SKILL-INDEX and exempt comments from bash-4 guard ([c680896](https://github.com/danielvm-git/bigpowers/commit/c680896528732cff131161e2a1524730db15fd13))
|
|
8
|
+
|
|
1
9
|
# [2.86.0](https://github.com/danielvm-git/bigpowers/compare/v2.85.2...v2.86.0) (2026-07-25)
|
|
2
10
|
|
|
3
11
|
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -25,9 +25,46 @@ SKILLS_ROOT="$REPO_ROOT"
|
|
|
25
25
|
PASS=0; FAIL=0; SKIP=0
|
|
26
26
|
TARGET="${1:-}"
|
|
27
27
|
|
|
28
|
+
# A directive is fail-open when it cannot exit non-zero on a broken repo.
|
|
29
|
+
# Two families, both checked syntactically because a pipeline's exit status
|
|
30
|
+
# is the status of its LAST command:
|
|
31
|
+
# 1. explicit swallow — `|| echo ...`, `|| true`, `|| :`, `; true`, `; exit 0`
|
|
32
|
+
# 2. non-asserting tail — pipeline ends in a filter that always exits 0
|
|
33
|
+
# (head/wc/cat/tee/sort/tr/sed/awk/echo/true/:). `grep x | wc -l` is the
|
|
34
|
+
# canonical offender: wc always succeeds, so the grep result is discarded.
|
|
35
|
+
# Use an assertion instead, e.g. [ "$(... | wc -l)" -gt 0 ].
|
|
36
|
+
FAIL_OPEN_TAIL_CMDS='head|wc|cat|tee|sort|tr|sed|awk|echo|true|:'
|
|
37
|
+
|
|
28
38
|
is_fail_open_directive() {
|
|
29
39
|
local cmd="$1"
|
|
30
|
-
|
|
40
|
+
|
|
41
|
+
# Family 1: explicit exit-status swallowing.
|
|
42
|
+
if echo "$cmd" | grep -qE '\|\|[[:space:]]*(echo|true|:)|;[[:space:]]*(true|:|exit[[:space:]]+0)[[:space:]]*$'; then
|
|
43
|
+
return 0
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# Family 2: pipeline whose last stage never fails.
|
|
47
|
+
# Strip $(...) first — a pipe inside a command substitution feeds an
|
|
48
|
+
# assertion, e.g. [ "$(ls x | wc -l)" -gt 0 ], and is NOT fail-open.
|
|
49
|
+
local stripped="$cmd" prev=""
|
|
50
|
+
while [ "$stripped" != "$prev" ]; do
|
|
51
|
+
prev="$stripped"
|
|
52
|
+
stripped=$(printf '%s' "$stripped" | sed 's/\$([^()]*)/SUBST/g')
|
|
53
|
+
done
|
|
54
|
+
|
|
55
|
+
# Only inspect the segment after the final `|` that is not part of `||`.
|
|
56
|
+
local tail_seg
|
|
57
|
+
tail_seg=$(printf '%s' "$stripped" | sed 's/||/\
|
|
58
|
+
/g' | tail -1)
|
|
59
|
+
case "$tail_seg" in
|
|
60
|
+
*\|*)
|
|
61
|
+
tail_seg=${tail_seg##*|}
|
|
62
|
+
tail_seg=$(printf '%s' "$tail_seg" | sed 's/^[[:space:]]*//')
|
|
63
|
+
echo "$tail_seg" | grep -qE "^($FAIL_OPEN_TAIL_CMDS)([[:space:]]|$)" && return 0
|
|
64
|
+
;;
|
|
65
|
+
esac
|
|
66
|
+
|
|
67
|
+
return 1
|
|
31
68
|
}
|
|
32
69
|
|
|
33
70
|
normalize_verify_cmd() {
|
|
@@ -48,7 +85,7 @@ run_verify_cmd() {
|
|
|
48
85
|
local label="${3:-$skill}"
|
|
49
86
|
|
|
50
87
|
if is_fail_open_directive "$cmd"; then
|
|
51
|
-
echo "FAIL: $label — fail-open
|
|
88
|
+
echo "FAIL: $label — fail-open directive (cannot exit non-zero; swallowed status or non-asserting pipeline tail): $cmd"
|
|
52
89
|
FAIL=$((FAIL + 1))
|
|
53
90
|
return 1
|
|
54
91
|
fi
|
|
@@ -71,7 +108,13 @@ run_skill() {
|
|
|
71
108
|
local skill
|
|
72
109
|
skill=$(dirname "$skill_md")
|
|
73
110
|
|
|
74
|
-
|
|
111
|
+
# bash 3.2 (macOS default shell) has no `mapfile`. Read the lines portably —
|
|
112
|
+
# regression guard for the class of BUG-2026-07-02T103911 (`declare -A`).
|
|
113
|
+
local verify_lines=()
|
|
114
|
+
local _line
|
|
115
|
+
while IFS= read -r _line; do
|
|
116
|
+
[ -n "$_line" ] && verify_lines+=("$_line")
|
|
117
|
+
done < <(grep -E '^(> )?→ verify:' "$skill_md" 2>/dev/null || true)
|
|
75
118
|
|
|
76
119
|
if [ "${#verify_lines[@]}" -eq 0 ]; then
|
|
77
120
|
echo "SKIP: $skill"
|
|
@@ -112,13 +155,47 @@ run_negative_fixture_self_test() {
|
|
|
112
155
|
FAIL=$((FAIL + 1))
|
|
113
156
|
return 1
|
|
114
157
|
fi
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
158
|
+
# Every known fail-open idiom must be rejected. Add a row here whenever a new
|
|
159
|
+
# evasion is found — this is the anti-vacuity proof for the detector itself.
|
|
160
|
+
local bad_patterns='test -f /nope && echo OK || echo FAIL
|
|
161
|
+
test -f /nope || true
|
|
162
|
+
test -f /nope || :
|
|
163
|
+
test -f /nope; true
|
|
164
|
+
test -f /nope; exit 0
|
|
165
|
+
grep -rn "x" . | wc -l
|
|
166
|
+
ls specs/*.md 2>/dev/null | head -15
|
|
167
|
+
git diff --name-only HEAD | head -20
|
|
168
|
+
find . -name "*.md" | cat
|
|
169
|
+
grep x file | awk "{print}"'
|
|
170
|
+
local bad_line
|
|
171
|
+
while IFS= read -r bad_line; do
|
|
172
|
+
[ -z "$bad_line" ] && continue
|
|
173
|
+
if ! is_fail_open_directive "$bad_line"; then
|
|
174
|
+
echo "FAIL: self-test — detector missed fail-open idiom: $bad_line"
|
|
175
|
+
FAIL=$((FAIL + 1))
|
|
176
|
+
return 1
|
|
177
|
+
fi
|
|
178
|
+
done <<EOF
|
|
179
|
+
$bad_patterns
|
|
180
|
+
EOF
|
|
181
|
+
echo "PASS: self-test — detector rejects all $(printf '%s\n' "$bad_patterns" | grep -c .) known fail-open idioms"
|
|
182
|
+
|
|
183
|
+
# And must NOT reject genuine assertions that merely contain a pipe inside $().
|
|
184
|
+
local good_patterns='[ "$(ls specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]
|
|
185
|
+
test -d specs && test -f specs/state.yaml
|
|
186
|
+
[ "$(find specs -name "*.yaml" | wc -l | tr -d " ")" -ge 1 ]'
|
|
187
|
+
local good_line
|
|
188
|
+
while IFS= read -r good_line; do
|
|
189
|
+
[ -z "$good_line" ] && continue
|
|
190
|
+
if is_fail_open_directive "$good_line"; then
|
|
191
|
+
echo "FAIL: self-test — detector false-positived on a real assertion: $good_line"
|
|
192
|
+
FAIL=$((FAIL + 1))
|
|
193
|
+
return 1
|
|
194
|
+
fi
|
|
195
|
+
done <<EOF
|
|
196
|
+
$good_patterns
|
|
197
|
+
EOF
|
|
198
|
+
echo "PASS: self-test — detector accepts genuine assertions with \$() pipes"
|
|
122
199
|
local real_fail_cmd='test -f /nonexistent/path/for/skill-verify-self-test'
|
|
123
200
|
local output
|
|
124
201
|
if output=$(run_with_timeout "$real_fail_cmd"); then
|
|
@@ -157,4 +234,14 @@ fi
|
|
|
157
234
|
|
|
158
235
|
echo ""
|
|
159
236
|
echo "Results: $PASS PASS, $FAIL FAIL, $SKIP SKIP"
|
|
237
|
+
|
|
238
|
+
# SKIP ratchet: skills with no (or non-executable) → verify: are invisible to
|
|
239
|
+
# this gate. Cap the count so the blind spot can only shrink. Lower the ceiling
|
|
240
|
+
# as skills gain real directives; see issue #97.
|
|
241
|
+
SKIP_CEILING="${SKILL_VERIFY_SKIP_CEILING:-34}"
|
|
242
|
+
if [ -z "$TARGET" ] && [ "$SKIP" -gt "$SKIP_CEILING" ]; then
|
|
243
|
+
echo "FAIL: SKIP count $SKIP exceeds ceiling $SKIP_CEILING — new skills must ship a → verify: directive"
|
|
244
|
+
FAIL=$((FAIL + 1))
|
|
245
|
+
fi
|
|
246
|
+
|
|
160
247
|
[ "$FAIL" -eq 0 ]
|
|
@@ -22,4 +22,4 @@ Four phases — do not skip. Update the active `specs/bugs/BUG-*.md` file at eac
|
|
|
22
22
|
|
|
23
23
|
## Verify
|
|
24
24
|
|
|
25
|
-
→ verify: `
|
|
25
|
+
→ verify: `[ "$(grep -lE 'Reproduce' specs/bugs/BUG-*.md 2>/dev/null | grep -cv "\.okf\.md$")" -ge 1 ]`
|
|
@@ -58,7 +58,7 @@ List every artifact found matching the detected framework. Present the list to t
|
|
|
58
58
|
|
|
59
59
|
See [REFERENCE.md](REFERENCE.md) — `Detected: GSD...`
|
|
60
60
|
|
|
61
|
-
→ verify: `
|
|
61
|
+
→ verify: `test -d specs && test -w specs`
|
|
62
62
|
|
|
63
63
|
### Step 3 — Transform (one artifact at a time, show diffs)
|
|
64
64
|
|
|
@@ -94,9 +94,9 @@ See [REFERENCE.md — REQUIREMENTS_TRACE.yaml format](./REFERENCE.md#requirement
|
|
|
94
94
|
|
|
95
95
|
> **HARD GATE** — Never overwrite an existing `specs/` file without explicit user confirmation. Merge into it if it exists; don't clobber.
|
|
96
96
|
>
|
|
97
|
-
> → verify: `git
|
|
97
|
+
> → verify: `git rev-parse --git-dir >/dev/null 2>&1 && test -d specs`
|
|
98
98
|
|
|
99
|
-
→ verify: `ls specs/*.md 2>/dev/null |
|
|
99
|
+
→ verify: `test -d specs && [ "$(ls specs/*.md specs/*.yaml 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
100
100
|
|
|
101
101
|
### Step 4 — Generate state.yaml
|
|
102
102
|
|
|
@@ -90,7 +90,7 @@ After writing capsule tasks, suggest `kickoff-branch` (if not already on a featu
|
|
|
90
90
|
|
|
91
91
|
## Verify
|
|
92
92
|
|
|
93
|
-
→ verify: `test -f scripts/lib/plan-consistency-check.sh && bash scripts/lib/plan-consistency-check.sh
|
|
93
|
+
→ verify: `test -f scripts/lib/plan-consistency-check.sh && EPIC=$(ls -d specs/epics/*/ 2>/dev/null | grep -v archive | sort | head -1) && test -n "$EPIC" && bash scripts/lib/plan-consistency-check.sh "$EPIC" >/dev/null 2>&1`
|
|
94
94
|
|
|
95
95
|
|
|
96
96
|
|
|
@@ -33,7 +33,7 @@ Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
|
33
33
|
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
→ verify: `grep -
|
|
36
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
37
37
|
|
|
38
38
|
### 3. Build the matrix
|
|
39
39
|
|
package/skills-lock.json
CHANGED
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
},
|
|
89
89
|
"diagnose-root": {
|
|
90
90
|
"description": "Run 4-phase root cause analysis — reproduce, isolate, hypothesize, verify. Use when a bug is confirmed but root cause is unclear, after investigate-bug, or when user mentions root cause analysis.",
|
|
91
|
-
"sha256": "
|
|
91
|
+
"sha256": "29ae28bdaf599530",
|
|
92
92
|
"path": "skills/diagnose-rootSKILL.md"
|
|
93
93
|
},
|
|
94
94
|
"diagnose-stall": {
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"migrate-spec": {
|
|
205
205
|
"description": "Detect GSD, spec-kit, or BMAD spec artifacts and transform them into bigpowers YAML layout (state.yaml, release-plan.yaml, epics/, requirements/, plans/, ADRs). Use when migrating foreign spec docs.",
|
|
206
|
-
"sha256": "
|
|
206
|
+
"sha256": "7eff81666ba5b9c0",
|
|
207
207
|
"path": "skills/migrate-specSKILL.md"
|
|
208
208
|
},
|
|
209
209
|
"model-domain": {
|
|
@@ -238,7 +238,7 @@
|
|
|
238
238
|
},
|
|
239
239
|
"plan-work": {
|
|
240
240
|
"description": "\"PLANNING SPINE STEP 3 of 3 — Plan the work: write detailed implementation tasks into the active epic capsule (specs/epics/eNN-slug/). Produces countable-story-format .md specs and runnable -tasks.yaml files. Use after slice-tasks (step 2). Not a substitute for scope-work (step 1) or slice-tasks (step 2).\"",
|
|
241
|
-
"sha256": "
|
|
241
|
+
"sha256": "e5d751ca5e928e2d",
|
|
242
242
|
"path": "skills/plan-workSKILL.md"
|
|
243
243
|
},
|
|
244
244
|
"publish-package": {
|
|
@@ -358,7 +358,7 @@
|
|
|
358
358
|
},
|
|
359
359
|
"trace-requirement": {
|
|
360
360
|
"description": "Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY_LATEST.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find \"dark\" stories with no code.",
|
|
361
|
-
"sha256": "
|
|
361
|
+
"sha256": "f825b8f5849b963c",
|
|
362
362
|
"path": "skills/trace-requirementSKILL.md"
|
|
363
363
|
},
|
|
364
364
|
"using-bigpowers": {
|