bigpowers 2.85.2 → 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.
Files changed (136) hide show
  1. package/.agents/skills/develop-tdd/SKILL.md +11 -1
  2. package/.agents/skills/diagnose-root/SKILL.md +1 -1
  3. package/.agents/skills/enforce-first/SKILL.md +13 -0
  4. package/.agents/skills/gate-trace/SKILL.md +4 -0
  5. package/.agents/skills/migrate-spec/SKILL.md +3 -3
  6. package/.agents/skills/plan-work/SKILL.md +1 -1
  7. package/.agents/skills/smoke-test/SKILL.md +39 -24
  8. package/.agents/skills/trace-requirement/SKILL.md +1 -1
  9. package/.agents/skills/validate-contracts/SKILL.md +26 -58
  10. package/.agents/skills/validate-fix/SKILL.md +46 -5
  11. package/.codebuddy/skills/develop-tdd/SKILL.md +11 -1
  12. package/.codebuddy/skills/diagnose-root/SKILL.md +1 -1
  13. package/.codebuddy/skills/enforce-first/SKILL.md +13 -0
  14. package/.codebuddy/skills/gate-trace/SKILL.md +4 -0
  15. package/.codebuddy/skills/migrate-spec/SKILL.md +3 -3
  16. package/.codebuddy/skills/plan-work/SKILL.md +1 -1
  17. package/.codebuddy/skills/smoke-test/SKILL.md +39 -24
  18. package/.codebuddy/skills/trace-requirement/SKILL.md +1 -1
  19. package/.codebuddy/skills/validate-contracts/SKILL.md +26 -58
  20. package/.codebuddy/skills/validate-fix/SKILL.md +46 -5
  21. package/.codex/skills/develop-tdd/SKILL.md +11 -1
  22. package/.codex/skills/diagnose-root/SKILL.md +1 -1
  23. package/.codex/skills/enforce-first/SKILL.md +13 -0
  24. package/.codex/skills/gate-trace/SKILL.md +4 -0
  25. package/.codex/skills/migrate-spec/SKILL.md +3 -3
  26. package/.codex/skills/plan-work/SKILL.md +1 -1
  27. package/.codex/skills/smoke-test/SKILL.md +39 -24
  28. package/.codex/skills/trace-requirement/SKILL.md +1 -1
  29. package/.codex/skills/validate-contracts/SKILL.md +26 -58
  30. package/.codex/skills/validate-fix/SKILL.md +46 -5
  31. package/.hermes/skills/develop-tdd/SKILL.md +11 -1
  32. package/.hermes/skills/diagnose-root/SKILL.md +1 -1
  33. package/.hermes/skills/enforce-first/SKILL.md +13 -0
  34. package/.hermes/skills/gate-trace/SKILL.md +4 -0
  35. package/.hermes/skills/migrate-spec/SKILL.md +3 -3
  36. package/.hermes/skills/plan-work/SKILL.md +1 -1
  37. package/.hermes/skills/smoke-test/SKILL.md +39 -24
  38. package/.hermes/skills/trace-requirement/SKILL.md +1 -1
  39. package/.hermes/skills/validate-contracts/SKILL.md +26 -58
  40. package/.hermes/skills/validate-fix/SKILL.md +46 -5
  41. package/.kilocode/rules/develop-tdd.md +11 -1
  42. package/.kilocode/rules/diagnose-root.md +1 -1
  43. package/.kilocode/rules/enforce-first.md +13 -0
  44. package/.kilocode/rules/gate-trace.md +4 -0
  45. package/.kilocode/rules/migrate-spec.md +3 -3
  46. package/.kilocode/rules/plan-work.md +1 -1
  47. package/.kilocode/rules/smoke-test.md +39 -24
  48. package/.kilocode/rules/trace-requirement.md +1 -1
  49. package/.kilocode/rules/validate-contracts.md +26 -58
  50. package/.kilocode/rules/validate-fix.md +46 -5
  51. package/.mimocode/skills/develop-tdd/SKILL.md +11 -1
  52. package/.mimocode/skills/diagnose-root/SKILL.md +1 -1
  53. package/.mimocode/skills/enforce-first/SKILL.md +13 -0
  54. package/.mimocode/skills/gate-trace/SKILL.md +4 -0
  55. package/.mimocode/skills/migrate-spec/SKILL.md +3 -3
  56. package/.mimocode/skills/plan-work/SKILL.md +1 -1
  57. package/.mimocode/skills/smoke-test/SKILL.md +39 -24
  58. package/.mimocode/skills/trace-requirement/SKILL.md +1 -1
  59. package/.mimocode/skills/validate-contracts/SKILL.md +26 -58
  60. package/.mimocode/skills/validate-fix/SKILL.md +46 -5
  61. package/.pi/package.json +1 -1
  62. package/.pi/prompts/develop-tdd.md +11 -1
  63. package/.pi/prompts/diagnose-root.md +1 -1
  64. package/.pi/prompts/enforce-first.md +13 -0
  65. package/.pi/prompts/gate-trace.md +4 -0
  66. package/.pi/prompts/migrate-spec.md +3 -3
  67. package/.pi/prompts/plan-work.md +1 -1
  68. package/.pi/prompts/smoke-test.md +39 -24
  69. package/.pi/prompts/trace-requirement.md +1 -1
  70. package/.pi/prompts/validate-contracts.md +26 -58
  71. package/.pi/prompts/validate-fix.md +46 -5
  72. package/.pi/skills/develop-tdd/SKILL.md +11 -1
  73. package/.pi/skills/diagnose-root/SKILL.md +1 -1
  74. package/.pi/skills/enforce-first/SKILL.md +13 -0
  75. package/.pi/skills/gate-trace/SKILL.md +4 -0
  76. package/.pi/skills/migrate-spec/SKILL.md +3 -3
  77. package/.pi/skills/plan-work/SKILL.md +1 -1
  78. package/.pi/skills/smoke-test/SKILL.md +39 -24
  79. package/.pi/skills/trace-requirement/SKILL.md +1 -1
  80. package/.pi/skills/validate-contracts/SKILL.md +26 -58
  81. package/.pi/skills/validate-fix/SKILL.md +46 -5
  82. package/.trae/skills/develop-tdd/SKILL.md +11 -1
  83. package/.trae/skills/diagnose-root/SKILL.md +1 -1
  84. package/.trae/skills/enforce-first/SKILL.md +13 -0
  85. package/.trae/skills/gate-trace/SKILL.md +4 -0
  86. package/.trae/skills/migrate-spec/SKILL.md +3 -3
  87. package/.trae/skills/plan-work/SKILL.md +1 -1
  88. package/.trae/skills/smoke-test/SKILL.md +39 -24
  89. package/.trae/skills/trace-requirement/SKILL.md +1 -1
  90. package/.trae/skills/validate-contracts/SKILL.md +26 -58
  91. package/.trae/skills/validate-fix/SKILL.md +46 -5
  92. package/.windsurf/rules/develop-tdd.md +11 -1
  93. package/.windsurf/rules/diagnose-root.md +1 -1
  94. package/.windsurf/rules/enforce-first.md +13 -0
  95. package/.windsurf/rules/gate-trace.md +4 -0
  96. package/.windsurf/rules/migrate-spec.md +3 -3
  97. package/.windsurf/rules/plan-work.md +1 -1
  98. package/.windsurf/rules/smoke-test.md +39 -24
  99. package/.windsurf/rules/trace-requirement.md +1 -1
  100. package/.windsurf/rules/validate-contracts.md +26 -58
  101. package/.windsurf/rules/validate-fix.md +46 -5
  102. package/.zcode/skills/develop-tdd/SKILL.md +11 -1
  103. package/.zcode/skills/diagnose-root/SKILL.md +1 -1
  104. package/.zcode/skills/enforce-first/SKILL.md +13 -0
  105. package/.zcode/skills/gate-trace/SKILL.md +4 -0
  106. package/.zcode/skills/migrate-spec/SKILL.md +3 -3
  107. package/.zcode/skills/plan-work/SKILL.md +1 -1
  108. package/.zcode/skills/smoke-test/SKILL.md +39 -24
  109. package/.zcode/skills/trace-requirement/SKILL.md +1 -1
  110. package/.zcode/skills/validate-contracts/SKILL.md +26 -58
  111. package/.zcode/skills/validate-fix/SKILL.md +46 -5
  112. package/CHANGELOG.md +21 -0
  113. package/SKILL-INDEX.md +24 -24
  114. package/package.json +1 -1
  115. package/scripts/generate-skill-index.sh +1 -1
  116. package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
  117. package/scripts/lib/__pycache__/srp_engine_links.cpython-312.pyc +0 -0
  118. package/scripts/run-gate-trace-verify.sh +35 -0
  119. package/scripts/run-skill-verify.sh +97 -10
  120. package/scripts/validate-contracts.sh +58 -0
  121. package/scripts/verify-generalize-sweep.sh +55 -0
  122. package/scripts/verify-tdd-red-commit.sh +91 -0
  123. package/skills/develop-tdd/SKILL.md +13 -1
  124. package/skills/diagnose-root/SKILL.md +1 -1
  125. package/skills/enforce-first/SKILL.md +14 -0
  126. package/skills/gate-trace/SKILL.md +5 -0
  127. package/skills/migrate-spec/SKILL.md +3 -3
  128. package/skills/plan-work/SKILL.md +1 -1
  129. package/skills/security-review/fixtures/CWE-fail-open-verify-negative.sh +5 -0
  130. package/skills/security-review/fixtures/CWE-fail-open-verify-positive.sh +5 -0
  131. package/skills/smoke-test/SKILL.md +40 -24
  132. package/skills/trace-requirement/SKILL.md +1 -1
  133. package/skills/validate-contracts/SKILL.md +27 -58
  134. package/skills/validate-fix/REFERENCE-generalize-fix.md +31 -0
  135. package/skills/validate-fix/SKILL.md +14 -5
  136. package/skills-lock.json +10 -10
@@ -10,60 +10,30 @@ description: "Assert data shape consistency across system boundaries — live AP
10
10
  >
11
11
  > **HARD GATE** — Contract files MUST be version-controlled alongside code. Outdated contracts are worse than no contracts. If a contract hasn't been reviewed in 30 days, flag it as stale.
12
12
 
13
- Validate that data structures stay in sync across system boundaries — front-end vs
14
- back-end, API responses vs expected schemas, config files vs code assumptions,
15
- migration output vs target shape.
13
+ Validate that data structures stay in sync across system boundaries — front-end vs back-end, API responses vs expected schemas, config files vs code assumptions, migration output vs target shape.
16
14
 
17
15
  ## Contract types
18
16
 
19
- Three modes of validation:
20
-
21
17
  | Mode | What it catches | When to use |
22
18
  |------|----------------|-------------|
23
- | **Schema** | API response shape mismatches (missing field, wrong type) | Before every deploy, after API changes |
19
+ | **Schema** | API response shape mismatches | Before every deploy, after API changes |
24
20
  | **Key-set** | Missing/unexpected keys across two data sources | Translation files, configs, enum definitions |
25
- | **Shape** | Column type or format violations in data files | After migrations, before consuming exports |
21
+ | **Shape** | Column type or format violations | After migrations, before consuming exports |
26
22
 
27
23
  ## Contract file convention
28
24
 
29
- All contract files live in `specs/contracts/` and use YAML:
30
-
31
- See [REFERENCE.md](REFERENCE.md) for examples.
32
-
33
- ### 1. API Response Contracts (`--schema`)
34
-
35
- Define expected API response shapes and validate live endpoints against them:
25
+ All contract files live in `specs/contracts/` as YAML. See [REFERENCE.md](REFERENCE.md) for extended examples.
36
26
 
37
- See [REFERENCE.md](REFERENCE.md) for examples.
27
+ ### Key-set example
38
28
 
39
- Usage:
40
-
41
- ```bash
42
- validate-contracts --schema specs/contracts/users.schema.yaml --url https://api.example.com/users
43
- # → PASS: /api/users matches expected schema (3/3 fields, types ok)
44
- # → FAIL: /api/users — field 'email' has type null (expected string)
29
+ ```yaml
30
+ # specs/contracts/i18n-keys.yaml
31
+ sources:
32
+ reference: src/locales/en.json
33
+ target: src/messages/en.json
34
+ mode: subset
45
35
  ```
46
36
 
47
- ### 2. Key-Set Contracts (`--key-set`)
48
-
49
- Assert that two data sources share a consistent set of keys:
50
-
51
- See [REFERENCE.md](REFERENCE.md) for examples.
52
-
53
- Usage:
54
-
55
- See [REFERENCE.md](REFERENCE.md) for examples.
56
-
57
- ### 3. Data Shape Contracts (`--shape`)
58
-
59
- Validate that a data file matches expected column types and constraints:
60
-
61
- See [REFERENCE.md](REFERENCE.md) for examples.
62
-
63
- Usage:
64
-
65
- See [REFERENCE.md](REFERENCE.md) for examples.
66
-
67
37
  ## Process
68
38
 
69
39
  ### 1. Define contract
@@ -73,29 +43,20 @@ Create a YAML file in `specs/contracts/` following the schema for the mode.
73
43
  ### 2. Run validation
74
44
 
75
45
  ```bash
76
- bash scripts/validate-contracts.sh <contract-file>
46
+ bash scripts/validate-contracts.sh specs/contracts/<contract>.yaml
77
47
  ```
78
48
 
79
- The runner auto-detects the contract type from the file content (presence of `schema:`,
80
- `sources:`, or `file:` + `fields:` keys).
49
+ The runner auto-detects key-set contracts (`sources:` block). Schema and shape modes are documented in REFERENCE.md for consumer projects.
81
50
 
82
51
  ### 3. Read the report
83
52
 
84
- Output is JSON Lines (one event per line) plus a human-readable summary:
85
-
86
53
  ```
87
- {"event":"pass","check":"users.schema","detail":"3/3 fields match types"}
88
- {"event":"warn","check":"users.schema","detail":"field 'avatar' has format: uri (unexpected)"}
89
- {"event":"fail","check":"i18n-keys","detail":"missing: 2 keys in target"}
54
+ PASS: key-set contract
55
+ # or
56
+ FAIL: key-set — N keys in reference missing from target
90
57
  ```
91
58
 
92
- Final summary:
93
-
94
- ```
95
- === Validate Contracts Summary ===
96
- Schema: 3/3 pass | Key-set: 1/1 fail | Shape: 2/2 pass
97
- FAILED: 1 contract has divergence
98
- ```
59
+ JSON Lines output for CI is planned for schema/shape modes; key-set failures exit non-zero.
99
60
 
100
61
  ### 4. Fix divergence
101
62
 
@@ -106,10 +67,17 @@ FAILED: 1 contract has divergence
106
67
  ### 5. Re-validate
107
68
 
108
69
  ```bash
109
- bash scripts/validate-contracts.sh <contract-file>
110
- # → All pass → ready to deploy
70
+ bash scripts/validate-contracts.sh specs/contracts/<contract>.yaml
111
71
  ```
112
72
 
73
+ ## Verify arc
74
+
75
+ Part of **★ VERIFY ★**: `verify-work` → `validate-contracts` → `smoke-test` → `run-evals` → `audit-code`
76
+
77
+ ## Verify
78
+
79
+ → verify: `test -x scripts/validate-contracts.sh && bash scripts/validate-contracts.sh --self-test && grep -q 'validate-contracts.sh' skills/validate-contracts/SKILL.md && echo OK`
80
+
113
81
  ---
114
82
 
115
83
  # Validate Contracts — Reference
@@ -5,7 +5,7 @@ description: "Prove a fix works before declaring done — re-run the failing tes
5
5
  ---
6
6
 
7
7
  # Validate Fix
8
- > **HARD GATE** — **HARD GATE** — Fix must not regress. Run full test suite and manual UAT before declaring success. A fix that passes tests but breaks something else is a failure.
8
+ > **HARD GATE** — Fix must not regress. Run full test suite and manual UAT before declaring success.
9
9
 
10
10
 
11
11
  Prove the fix works. "I think it works" is not evidence. Run the suite, show the output, then harden against recurrence.
@@ -63,10 +63,13 @@ For every bug fixed, add at least one prevention layer:
63
63
  - [ ] At least one hardening mechanism added
64
64
  - [ ] Hardening mechanism is tested
65
65
 
66
- > **Security recurrence hardening** — If the bug's security-impact assessment (from investigate-bug) was MEDIUM or higher, additionally check:
67
- > - [ ] Security regression test added (covers the exploit path)
68
- > - [ ] False-positive exclusion rule added (if applicable)
69
- > - [ ] Threat model updated (if impact was HIGH+)
66
+ ### 5b. Generalize-fix (HARD GATE — e80s04 / GH #98)
67
+
68
+ Sweep the **defect class** across the codebase after local hardening — see [REFERENCE-generalize-fix.md](REFERENCE-generalize-fix.md).
69
+
70
+ - [ ] Defect class documented (not just the one-line root cause)
71
+ - [ ] Grep sweep run and `match_count` recorded
72
+ - [ ] `verify-generalize-sweep.sh` passes on the artifact
70
73
 
71
74
  ### 6. Update the bug file and registry.yaml
72
75
 
@@ -104,3 +107,41 @@ Mechanical verification (tests passing) is only half the fix. You must prove **b
104
107
  - **The verify command from specs/bugs/BUG-*.md or the active epic task `verify` field must pass**
105
108
 
106
109
  Suggest next skill: `audit-code` → `commit-message`.
110
+
111
+ ## Verify
112
+
113
+ → verify: `grep -q 'generalize-fix' skills/validate-fix/SKILL.md && test -x scripts/verify-generalize-sweep.sh && bash scripts/verify-generalize-sweep.sh --self-test && echo OK`
114
+
115
+ ---
116
+
117
+ # Generalize-fix (e80s04 / GH #98)
118
+
119
+ After local hardening in `validate-fix`, sweep the **defect class** across the codebase.
120
+
121
+ ## Steps
122
+
123
+ 1. **Classify** — name the pattern (e.g. `unscoped org query`, `fail-open verify`, `hardcoded package manager`).
124
+ 2. **Sweep** — grep for sibling instances; record `match_count` and `grep_pattern`.
125
+ 3. **Resolve** — patch all matches in this PR **or** file one tracking issue listing every remaining instance.
126
+ 4. **Artifact** — write sweep evidence before declaring done:
127
+
128
+ ```bash
129
+ cat > specs/verifications/generalize-sweep-BUG-YYYY-MM-DD-slug.json <<EOF
130
+ {
131
+ "defect_class": "fail-open-verify",
132
+ "grep_pattern": "\\\\|\\\\| echo",
133
+ "match_count": 0,
134
+ "sweep_scope": "skills/*/SKILL.md",
135
+ "patched_in_pr": [],
136
+ "tracked_issues": []
137
+ }
138
+ EOF
139
+ bash scripts/verify-generalize-sweep.sh specs/verifications/generalize-sweep-*.json
140
+ ```
141
+
142
+ ## Security classes
143
+
144
+ When the defect class is security- or gate-relevant:
145
+
146
+ - Add a row to `security-review` CWE fixture table (see `skills/security-review/SKILL.md` § CWE mapping mandate).
147
+ - If security-impact was MEDIUM+: add regression test, false-positive exclusion rule, and threat-model update (HIGH+).
package/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
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
+
9
+ # [2.86.0](https://github.com/danielvm-git/bigpowers/compare/v2.85.2...v2.86.0) (2026-07-25)
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **e80:** pass skill size caps and specs YAML validation ([48b06c3](https://github.com/danielvm-git/bigpowers/commit/48b06c3e2e450914035d8ee562e17365d55130dd))
15
+ * **verify:** replace placeholder verify directives with CI-safe checks ([80d0c8d](https://github.com/danielvm-git/bigpowers/commit/80d0c8d3f96375c0b1daeead228bf04ce16a5e6a))
16
+
17
+
18
+ ### Features
19
+
20
+ * **e80:** verify arc hardening for [#97](https://github.com/danielvm-git/bigpowers/issues/97) and [#98](https://github.com/danielvm-git/bigpowers/issues/98) ([45f05cf](https://github.com/danielvm-git/bigpowers/commit/45f05cfedbf8be42f4967b8804fe12a81e2b53ef))
21
+
1
22
  ## [2.85.2](https://github.com/danielvm-git/bigpowers/compare/v2.85.1...v2.85.2) (2026-07-25)
2
23
 
3
24
 
package/SKILL-INDEX.md CHANGED
@@ -14,8 +14,8 @@
14
14
  | Discover | 8 | `audit-plan, elaborate-spec, find-way, map-codebase, research-first, search-skills, survey-context, using-bigpowers` |
15
15
  | Design | 7 | `deepen-architecture, define-language, define-success, design-interface, grill-me, grill-with-docs, model-domain` |
16
16
  | Plan | 9 | `assess-impact, change-request, plan-refactor, plan-release, plan-work, run-planning, scope-work, seed-conventions, slice-tasks` |
17
- | Build | 19 | `align-grid, build-epic, craft-skill, deploy, develop-tdd, execute-plan, extract-design, guard-git, hook-commits, kickoff-branch, orchestrate-project, publish-package, quick-fix, setup-environment, smoke-test, spike-prototype, validate-contracts, wire-ci, wire-observability` |
18
- | Verify | 18 | `audit-code, context7-mcp, diagnose-root, diagnose-stall, enforce-first, fix-bug, gate-trace, generate-allure-report, inspect-quality, investigate-bug, plan-tests, request-review, respond-review, run-evals, security-review, trace-requirement, validate-fix, verify-work` |
17
+ | Build | 17 | `align-grid, build-epic, craft-skill, deploy, develop-tdd, execute-plan, extract-design, guard-git, hook-commits, kickoff-branch, orchestrate-project, publish-package, quick-fix, setup-environment, spike-prototype, wire-ci, wire-observability` |
18
+ | Verify | 20 | `audit-code, context7-mcp, diagnose-root, diagnose-stall, enforce-first, fix-bug, gate-trace, generate-allure-report, inspect-quality, investigate-bug, plan-tests, request-review, respond-review, run-evals, security-review, smoke-test, trace-requirement, validate-contracts, validate-fix, verify-work` |
19
19
  | Release | 2 | `commit-message, release-branch` |
20
20
  | Sustain | 17 | `compose-workflow, delegate-task, dispatch-agents, edit-document, evolve-skill, harden-vps, maintain-wiki, migrate-spec, organize-workspace, reset-baseline, run-benchmark, session-state, simulate-agents, stocktake-skills, terse-mode, visual-dashboard, write-document` |
21
21
  | **TOTAL** | **80** | |
@@ -64,27 +64,27 @@
64
64
  | 36 | Build | `publish-package` | "Package registry publishing for npm, crates.io, PyPI, and Homebrew. Verifies pr | ✅ Active |
65
65
  | 37 | Build | `quick-fix` | "Streamlined fast-path for trivial data-only fixes — no TDD, no branching cere | ✅ Active |
66
66
  | 38 | Build | `setup-environment` | Pre-install dependencies and configure tools before development work begins. Use | ✅ Active |
67
- | 39 | Build | `smoke-test` | "Post-deploy health-check against a live URL. Validates HTTP status, response co | ✅ Active |
68
- | 40 | Build | `spike-prototype` | Throw-away prototype for unknown problem spaces. Output is learning notes in spe | ✅ Active |
69
- | 41 | Build | `validate-contracts` | "Assert data shape consistency across system boundaries — live API responses a | ✅ Active |
70
- | 42 | Build | `wire-ci` | "CI pipeline setup with pre-built templates and local validation. Generates GitH | ✅ Active |
71
- | 43 | Build | `wire-observability` | Add structured JSON logging, observability commands, and idempotent setup script | ✅ Active |
72
- | 44 | Verify | `audit-code` | Self-review checklist for the coding agent to run before dispatching a reviewer. | ✅ Active |
73
- | 45 | Verify | `context7-mcp` | Fetch current library docs via Context7 MCP instead of training data. Use when u | ✅ Active |
74
- | 46 | Verify | `diagnose-root` | Run 4-phase root cause analysis — reproduce, isolate, hypothesize, verify. Use | ✅ Active |
75
- | 47 | Verify | `diagnose-stall` | Diagnose why agent orchestration stopped producing progress — silent stalls in | ✅ Active |
76
- | 48 | Verify | `enforce-first` | Apply the F.I.R.S.T test quality rubric (per CONVENTIONS.md §Tests) to a test s | ✅ Active |
77
- | 49 | Verify | `fix-bug` | Bug fix orchestrator — active_flow fix_bug; reads specs/bugs/BUG-*.md; chains | ✅ Active |
78
- | 50 | Verify | `gate-trace` | "Deterministic traceability quality gate — reads coverage matrix + blind-spot | ✅ Active |
79
- | 51 | Verify | `generate-allure-report` | "Generate Allure-ready reports from bigpowers YAML metadata. Reads execution-sta | ✅ Active |
80
- | 52 | Verify | `inspect-quality` | Interactive QA session where user reports bugs or issues conversationally, and t | ✅ Active |
81
- | 53 | Verify | `investigate-bug` | Investigate a bug or issue by exploring the codebase to find root cause, then wr | ✅ Active |
82
- | 54 | Verify | `plan-tests` | "Design a risk-scaled test architecture for an epic before implementation begins | ✅ Active |
83
- | 55 | Verify | `request-review` | Dispatch a fresh reviewer agent with a clean context to critique the code after | ✅ Active |
84
- | 56 | Verify | `respond-review` | Act on a reviewer agent's feedback systematically — categorize findings, apply | ✅ Active |
85
- | 57 | Verify | `run-evals` | Eval-Driven Development — define capability and regression evals before buildi | ✅ Active |
86
- | 58 | Verify | `security-review` | > | ✅ Active |
87
- | 59 | Verify | `trace-requirement` | Link story IDs from specs/release-plan.yaml + epic capsule directories to the im | ✅ Active |
67
+ | 39 | Build | `spike-prototype` | Throw-away prototype for unknown problem spaces. Output is learning notes in spe | ✅ Active |
68
+ | 40 | Build | `wire-ci` | "CI pipeline setup with pre-built templates and local validation. Generates GitH | ✅ Active |
69
+ | 41 | Build | `wire-observability` | Add structured JSON logging, observability commands, and idempotent setup script | ✅ Active |
70
+ | 42 | Verify | `audit-code` | Self-review checklist for the coding agent to run before dispatching a reviewer. | ✅ Active |
71
+ | 43 | Verify | `context7-mcp` | Fetch current library docs via Context7 MCP instead of training data. Use when u | ✅ Active |
72
+ | 44 | Verify | `diagnose-root` | Run 4-phase root cause analysis — reproduce, isolate, hypothesize, verify. Use | ✅ Active |
73
+ | 45 | Verify | `diagnose-stall` | Diagnose why agent orchestration stopped producing progress — silent stalls in | ✅ Active |
74
+ | 46 | Verify | `enforce-first` | Apply the F.I.R.S.T test quality rubric (per CONVENTIONS.md §Tests) to a test s | ✅ Active |
75
+ | 47 | Verify | `fix-bug` | Bug fix orchestrator — active_flow fix_bug; reads specs/bugs/BUG-*.md; chains | ✅ Active |
76
+ | 48 | Verify | `gate-trace` | "Deterministic traceability quality gate — reads coverage matrix + blind-spot | ✅ Active |
77
+ | 49 | Verify | `generate-allure-report` | "Generate Allure-ready reports from bigpowers YAML metadata. Reads execution-sta | ✅ Active |
78
+ | 50 | Verify | `inspect-quality` | Interactive QA session where user reports bugs or issues conversationally, and t | ✅ Active |
79
+ | 51 | Verify | `investigate-bug` | Investigate a bug or issue by exploring the codebase to find root cause, then wr | ✅ Active |
80
+ | 52 | Verify | `plan-tests` | "Design a risk-scaled test architecture for an epic before implementation begins | ✅ Active |
81
+ | 53 | Verify | `request-review` | Dispatch a fresh reviewer agent with a clean context to critique the code after | ✅ Active |
82
+ | 54 | Verify | `respond-review` | Act on a reviewer agent's feedback systematically — categorize findings, apply | ✅ Active |
83
+ | 55 | Verify | `run-evals` | Eval-Driven Development — define capability and regression evals before buildi | ✅ Active |
84
+ | 56 | Verify | `security-review` | > | ✅ Active |
85
+ | 57 | Verify | `smoke-test` | "Post-deploy health-check against a live URL. Validates HTTP status, response co | ✅ Active |
86
+ | 58 | Verify | `trace-requirement` | Link story IDs from specs/release-plan.yaml + epic capsule directories to the im | ✅ Active |
87
+ | 59 | Verify | `validate-contracts` | "Assert data shape consistency across system boundaries — live API responses a | ✅ Active |
88
88
  | 60 | Verify | `validate-fix` | Prove a fix works before declaring done — re-run the failing test, run the ful | ✅ Active |
89
89
  | 61 | Verify | `verify-work` | Multi-phase UAT gate — cold-start smoke, build, typecheck, lint, tests, step-b | ✅ Active |
90
90
  | 62 | Release | `commit-message` | Reviews working-tree changes, then drafts a Conventional Commits title/body and | ✅ Active |
@@ -132,7 +132,7 @@ survey-context → research-first → elaborate-spec → map-codebase
132
132
  develop-tdd (+ enforce-first) ←→ delegate-task / dispatch-agents
133
133
  execute-plan / build-epic / craft-skill / align-grid
134
134
  ↓
135
- ★ VERIFY ★ verify-work → run-evals → audit-code
135
+ ★ VERIFY ★ verify-work → validate-contracts → smoke-test → run-evals → audit-code
136
136
  ↓
137
137
  fix-bug → investigate-bug → diagnose-root → validate-fix
138
138
  ↓
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigpowers",
3
- "version": "2.85.2",
3
+ "version": "2.86.1",
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": {
@@ -139,7 +139,7 @@ DESC_COL_WIDTH=56
139
139
  echo ' develop-tdd (+ enforce-first) ←→ delegate-task / dispatch-agents'
140
140
  echo ' execute-plan / build-epic / craft-skill / align-grid'
141
141
  echo ' ↓'
142
- echo ' ★ VERIFY ★ verify-work → run-evals → audit-code'
142
+ echo ' ★ VERIFY ★ verify-work → validate-contracts → smoke-test → run-evals → audit-code'
143
143
  echo ' ↓'
144
144
  echo ' fix-bug → investigate-bug → diagnose-root → validate-fix'
145
145
  echo ' ↓'
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ # story: e80s01
3
+ # Pre-flight runner for gate-trace skill verify — ensures critic inputs exist.
4
+ # Usage: bash scripts/run-gate-trace-verify.sh [--self-test]
5
+ set -euo pipefail
6
+
7
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
8
+ cd "$REPO_ROOT"
9
+
10
+ self_test() {
11
+ local tmp="$REPO_ROOT/specs/verifications/fixtures/gate-trace-selftest"
12
+ mkdir -p "$tmp"
13
+ echo '{"stories":{},"coverage_pct":85,"oracle_stats":{"heuristic_ratio":0.2}}' > "$tmp/traceability-matrix.json"
14
+ echo '{"gaps":[]}' > "$tmp/blind-spots.json"
15
+ test -f scripts/lib/completeness-critic.sh
16
+ grep -q 'R1' skills/gate-trace/SKILL.md
17
+ grep -q 'completeness-critic' skills/gate-trace/SKILL.md
18
+ echo "run-gate-trace-verify: self-test OK"
19
+ }
20
+
21
+ if [[ "${1:-}" == "--self-test" ]]; then
22
+ self_test
23
+ exit 0
24
+ fi
25
+
26
+ [[ -f specs/traceability-matrix.json ]] || bash scripts/trace-stories.sh --json
27
+ [[ -f specs/blind-spots.json ]] || bash scripts/check-blind-spots.sh 2>/dev/null || true
28
+
29
+ if [[ ! -f specs/traceability-matrix.json ]]; then
30
+ echo "FAIL: missing specs/traceability-matrix.json"
31
+ exit 1
32
+ fi
33
+
34
+ bash scripts/lib/completeness-critic.sh
35
+ echo "run-gate-trace-verify: OK"
@@ -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
- echo "$cmd" | grep -qE '\|\|[[:space:]]*echo|\|[[:space:]]*awk'
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 pattern (|| echo or | awk): $cmd"
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
- mapfile -t verify_lines < <(grep -E '^(> )?→ verify:' "$skill_md" 2>/dev/null || true)
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
- local fail_open_cmd='test -f /nonexistent/path/for/skill-verify-self-test && echo OK || echo FAIL'
116
- if ! is_fail_open_directive "$fail_open_cmd"; then
117
- echo "FAIL: self-test — fail-open detector did not match canonical || echo pattern"
118
- FAIL=$((FAIL + 1))
119
- return 1
120
- fi
121
- echo "PASS: self-test — fail-open detector rejects || echo pattern"
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 ]
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env bash
2
+ # story: e80s02
3
+ # Contract validation runner for validate-contracts skill.
4
+ # Supports key-set mode (sources.reference vs sources.target JSON key comparison).
5
+ # Usage: bash scripts/validate-contracts.sh <contract.yaml> [--self-test]
6
+ set -euo pipefail
7
+
8
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
9
+ cd "$REPO_ROOT"
10
+
11
+ self_test() {
12
+ local dir="$REPO_ROOT/specs/verifications/fixtures/contracts-selftest"
13
+ mkdir -p "$dir"
14
+ echo '{"a":1,"b":2,"c":3}' > "$dir/ref.json"
15
+ echo '{"a":1,"b":2}' > "$dir/target.json"
16
+ cat > "$dir/keyset.yaml" <<YAML
17
+ sources:
18
+ reference: specs/verifications/fixtures/contracts-selftest/ref.json
19
+ target: specs/verifications/fixtures/contracts-selftest/target.json
20
+ mode: subset
21
+ YAML
22
+ if bash "$0" "$dir/keyset.yaml"; then
23
+ echo "FAIL: expected divergence on missing key c"
24
+ exit 1
25
+ fi
26
+ echo '{"a":1,"b":2,"c":3}' > "$dir/target.json"
27
+ bash "$0" "$dir/keyset.yaml"
28
+ echo "validate-contracts: self-test OK"
29
+ }
30
+
31
+ if [[ "${1:-}" == "--self-test" ]]; then
32
+ self_test
33
+ exit 0
34
+ fi
35
+
36
+ CONTRACT="${1:-}"
37
+ if [[ -z "$CONTRACT" || ! -f "$CONTRACT" ]]; then
38
+ echo "Usage: bash scripts/validate-contracts.sh <contract.yaml>"
39
+ exit 2
40
+ fi
41
+
42
+ if grep -q '^sources:' "$CONTRACT"; then
43
+ REF=$(grep 'reference:' "$CONTRACT" | head -1 | awk '{print $2}')
44
+ TGT=$(grep 'target:' "$CONTRACT" | head -1 | awk '{print $2}')
45
+ [[ -f "$REF" && -f "$TGT" ]] || { echo "FAIL: missing source files"; exit 1; }
46
+ REF_KEYS=$(python3 -c "import json; print('\n'.join(sorted(json.load(open('$REF')).keys())))")
47
+ TGT_KEYS=$(python3 -c "import json; print('\n'.join(sorted(json.load(open('$TGT')).keys())))")
48
+ MISSING=$(comm -23 <(echo "$REF_KEYS") <(echo "$TGT_KEYS") | wc -l | tr -d ' ')
49
+ if [[ "$MISSING" -gt 0 ]]; then
50
+ echo "FAIL: key-set — $MISSING keys in reference missing from target"
51
+ exit 1
52
+ fi
53
+ echo "PASS: key-set contract"
54
+ exit 0
55
+ fi
56
+
57
+ echo "SKIP: unsupported contract type in $CONTRACT"
58
+ exit 0
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env bash
2
+ # story: e80s04
3
+ # Validates generalize-fix sweep artifact exists and has required fields.
4
+ # Usage:
5
+ # bash scripts/verify-generalize-sweep.sh [--self-test]
6
+ # bash scripts/verify-generalize-sweep.sh specs/verifications/generalize-sweep-BUG-*.json
7
+ set -euo pipefail
8
+
9
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
10
+ cd "$REPO_ROOT"
11
+
12
+ validate_artifact() {
13
+ local file="$1"
14
+ [[ -f "$file" ]] || { echo "FAIL: missing $file"; return 1; }
15
+ grep -q '"defect_class"' "$file" || { echo "FAIL: $file missing defect_class"; return 1; }
16
+ grep -q '"grep_pattern"' "$file" || { echo "FAIL: $file missing grep_pattern"; return 1; }
17
+ grep -q '"match_count"' "$file" || { echo "FAIL: $file missing match_count"; return 1; }
18
+ echo "PASS: $file"
19
+ }
20
+
21
+ self_test() {
22
+ local dir="$REPO_ROOT/specs/verifications/fixtures"
23
+ mkdir -p "$dir"
24
+ local sample="$dir/generalize-sweep-selftest.json"
25
+ cat > "$sample" <<'JSON'
26
+ {
27
+ "defect_class": "fail-open-verify",
28
+ "grep_pattern": "|| echo",
29
+ "match_count": 0,
30
+ "sweep_scope": "skills/*/SKILL.md",
31
+ "notes": "self-test fixture for verify-generalize-sweep.sh"
32
+ }
33
+ JSON
34
+ validate_artifact "$sample"
35
+ grep -q 'generalize-fix' skills/validate-fix/SKILL.md
36
+ echo "verify-generalize-sweep: self-test OK"
37
+ }
38
+
39
+ if [[ "${1:-}" == "--self-test" ]]; then
40
+ self_test
41
+ exit 0
42
+ fi
43
+
44
+ if [[ $# -gt 0 ]]; then
45
+ for f in "$@"; do validate_artifact "$f"; done
46
+ exit 0
47
+ fi
48
+
49
+ shopt -s nullglob
50
+ artifacts=(specs/verifications/generalize-sweep-*.json)
51
+ if [[ ${#artifacts[@]} -eq 0 ]]; then
52
+ echo "FAIL: no specs/verifications/generalize-sweep-*.json artifact (generalize-fix not evidenced)"
53
+ exit 1
54
+ fi
55
+ for f in "${artifacts[@]}"; do validate_artifact "$f"; done