bigpowers 2.85.2 → 2.86.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/.agents/skills/develop-tdd/SKILL.md +11 -1
- package/.agents/skills/enforce-first/SKILL.md +13 -0
- package/.agents/skills/gate-trace/SKILL.md +4 -0
- package/.agents/skills/smoke-test/SKILL.md +39 -24
- package/.agents/skills/validate-contracts/SKILL.md +26 -58
- package/.agents/skills/validate-fix/SKILL.md +46 -5
- package/.codebuddy/skills/develop-tdd/SKILL.md +11 -1
- package/.codebuddy/skills/enforce-first/SKILL.md +13 -0
- package/.codebuddy/skills/gate-trace/SKILL.md +4 -0
- package/.codebuddy/skills/smoke-test/SKILL.md +39 -24
- package/.codebuddy/skills/validate-contracts/SKILL.md +26 -58
- package/.codebuddy/skills/validate-fix/SKILL.md +46 -5
- package/.codex/skills/develop-tdd/SKILL.md +11 -1
- package/.codex/skills/enforce-first/SKILL.md +13 -0
- package/.codex/skills/gate-trace/SKILL.md +4 -0
- package/.codex/skills/smoke-test/SKILL.md +39 -24
- package/.codex/skills/validate-contracts/SKILL.md +26 -58
- package/.codex/skills/validate-fix/SKILL.md +46 -5
- package/.hermes/skills/develop-tdd/SKILL.md +11 -1
- package/.hermes/skills/enforce-first/SKILL.md +13 -0
- package/.hermes/skills/gate-trace/SKILL.md +4 -0
- package/.hermes/skills/smoke-test/SKILL.md +39 -24
- package/.hermes/skills/validate-contracts/SKILL.md +26 -58
- package/.hermes/skills/validate-fix/SKILL.md +46 -5
- package/.kilocode/rules/develop-tdd.md +11 -1
- package/.kilocode/rules/enforce-first.md +13 -0
- package/.kilocode/rules/gate-trace.md +4 -0
- package/.kilocode/rules/smoke-test.md +39 -24
- package/.kilocode/rules/validate-contracts.md +26 -58
- package/.kilocode/rules/validate-fix.md +46 -5
- package/.mimocode/skills/develop-tdd/SKILL.md +11 -1
- package/.mimocode/skills/enforce-first/SKILL.md +13 -0
- package/.mimocode/skills/gate-trace/SKILL.md +4 -0
- package/.mimocode/skills/smoke-test/SKILL.md +39 -24
- package/.mimocode/skills/validate-contracts/SKILL.md +26 -58
- package/.mimocode/skills/validate-fix/SKILL.md +46 -5
- package/.pi/package.json +1 -1
- package/.pi/prompts/develop-tdd.md +11 -1
- package/.pi/prompts/enforce-first.md +13 -0
- package/.pi/prompts/gate-trace.md +4 -0
- package/.pi/prompts/smoke-test.md +39 -24
- package/.pi/prompts/validate-contracts.md +26 -58
- package/.pi/prompts/validate-fix.md +46 -5
- package/.pi/skills/develop-tdd/SKILL.md +11 -1
- package/.pi/skills/enforce-first/SKILL.md +13 -0
- package/.pi/skills/gate-trace/SKILL.md +4 -0
- package/.pi/skills/smoke-test/SKILL.md +39 -24
- package/.pi/skills/validate-contracts/SKILL.md +26 -58
- package/.pi/skills/validate-fix/SKILL.md +46 -5
- package/.trae/skills/develop-tdd/SKILL.md +11 -1
- package/.trae/skills/enforce-first/SKILL.md +13 -0
- package/.trae/skills/gate-trace/SKILL.md +4 -0
- package/.trae/skills/smoke-test/SKILL.md +39 -24
- package/.trae/skills/validate-contracts/SKILL.md +26 -58
- package/.trae/skills/validate-fix/SKILL.md +46 -5
- package/.windsurf/rules/develop-tdd.md +11 -1
- package/.windsurf/rules/enforce-first.md +13 -0
- package/.windsurf/rules/gate-trace.md +4 -0
- package/.windsurf/rules/smoke-test.md +39 -24
- package/.windsurf/rules/validate-contracts.md +26 -58
- package/.windsurf/rules/validate-fix.md +46 -5
- package/.zcode/skills/develop-tdd/SKILL.md +11 -1
- package/.zcode/skills/enforce-first/SKILL.md +13 -0
- package/.zcode/skills/gate-trace/SKILL.md +4 -0
- package/.zcode/skills/smoke-test/SKILL.md +39 -24
- package/.zcode/skills/validate-contracts/SKILL.md +26 -58
- package/.zcode/skills/validate-fix/SKILL.md +46 -5
- package/CHANGELOG.md +13 -0
- package/SKILL-INDEX.md +24 -24
- package/package.json +1 -1
- package/scripts/generate-skill-index.sh +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-gate-trace-verify.sh +35 -0
- package/scripts/validate-contracts.sh +58 -0
- package/scripts/verify-generalize-sweep.sh +55 -0
- package/scripts/verify-tdd-red-commit.sh +91 -0
- package/skills/develop-tdd/SKILL.md +13 -1
- package/skills/enforce-first/SKILL.md +14 -0
- package/skills/gate-trace/SKILL.md +5 -0
- package/skills/security-review/fixtures/CWE-fail-open-verify-negative.sh +5 -0
- package/skills/security-review/fixtures/CWE-fail-open-verify-positive.sh +5 -0
- package/skills/smoke-test/SKILL.md +40 -24
- package/skills/validate-contracts/SKILL.md +27 -58
- package/skills/validate-fix/REFERENCE-generalize-fix.md +31 -0
- package/skills/validate-fix/SKILL.md +14 -5
- package/skills-lock.json +6 -6
|
@@ -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
|
|
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
|
|
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/`
|
|
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
|
-
|
|
27
|
+
### Key-set example
|
|
38
28
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
|
46
|
+
bash scripts/validate-contracts.sh specs/contracts/<contract>.yaml
|
|
77
47
|
```
|
|
78
48
|
|
|
79
|
-
The runner auto-detects
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
54
|
+
PASS: key-set contract
|
|
55
|
+
# or
|
|
56
|
+
FAIL: key-set — N keys in reference missing from target
|
|
90
57
|
```
|
|
91
58
|
|
|
92
|
-
|
|
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
|
|
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** —
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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,16 @@
|
|
|
1
|
+
# [2.86.0](https://github.com/danielvm-git/bigpowers/compare/v2.85.2...v2.86.0) (2026-07-25)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **e80:** pass skill size caps and specs YAML validation ([48b06c3](https://github.com/danielvm-git/bigpowers/commit/48b06c3e2e450914035d8ee562e17365d55130dd))
|
|
7
|
+
* **verify:** replace placeholder verify directives with CI-safe checks ([80d0c8d](https://github.com/danielvm-git/bigpowers/commit/80d0c8d3f96375c0b1daeead228bf04ce16a5e6a))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **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))
|
|
13
|
+
|
|
1
14
|
## [2.85.2](https://github.com/danielvm-git/bigpowers/compare/v2.85.1...v2.85.2) (2026-07-25)
|
|
2
15
|
|
|
3
16
|
|
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 |
|
|
18
|
-
| Verify |
|
|
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 | `
|
|
68
|
-
| 40 | Build | `
|
|
69
|
-
| 41 | Build | `
|
|
70
|
-
| 42 |
|
|
71
|
-
| 43 |
|
|
72
|
-
| 44 | Verify | `
|
|
73
|
-
| 45 | Verify | `
|
|
74
|
-
| 46 | Verify | `
|
|
75
|
-
| 47 | Verify | `
|
|
76
|
-
| 48 | Verify | `
|
|
77
|
-
| 49 | Verify | `
|
|
78
|
-
| 50 | Verify | `
|
|
79
|
-
| 51 | Verify | `
|
|
80
|
-
| 52 | Verify | `
|
|
81
|
-
| 53 | Verify | `
|
|
82
|
-
| 54 | Verify | `
|
|
83
|
-
| 55 | Verify | `
|
|
84
|
-
| 56 | Verify | `
|
|
85
|
-
| 57 | Verify | `
|
|
86
|
-
| 58 | Verify | `
|
|
87
|
-
| 59 | Verify | `
|
|
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
|
@@ -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 ' ↓'
|
|
Binary file
|
|
Binary file
|
|
@@ -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"
|
|
@@ -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
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e80s01 e80s03
|
|
3
|
+
# Mechanical gate: test-only (RED) commit must fail when checked out in isolation.
|
|
4
|
+
# Usage:
|
|
5
|
+
# bash scripts/verify-tdd-red-commit.sh [--self-test]
|
|
6
|
+
# TDD_VERIFY_CMD='npm test' bash scripts/verify-tdd-red-commit.sh
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
10
|
+
cd "$REPO_ROOT"
|
|
11
|
+
|
|
12
|
+
self_test() {
|
|
13
|
+
local tmp
|
|
14
|
+
tmp=$(mktemp -d)
|
|
15
|
+
trap 'rm -rf "$tmp"' RETURN
|
|
16
|
+
cd "$tmp"
|
|
17
|
+
git init -q
|
|
18
|
+
git config user.email "tdd-verify@bigpowers.local"
|
|
19
|
+
git config user.name "tdd-verify"
|
|
20
|
+
|
|
21
|
+
mkdir -p test
|
|
22
|
+
cat > package.json <<'JSON'
|
|
23
|
+
{"name":"tdd-fixture","scripts":{"test":"node test/run.js"}}
|
|
24
|
+
JSON
|
|
25
|
+
cat > test/run.js <<'JS'
|
|
26
|
+
const fs = require('fs');
|
|
27
|
+
const impl = fs.existsSync('src/impl.js');
|
|
28
|
+
process.exit(impl ? 0 : 1);
|
|
29
|
+
JS
|
|
30
|
+
git add .
|
|
31
|
+
git commit -q -m "test(scope): red — expect failure without impl"
|
|
32
|
+
|
|
33
|
+
git checkout -q HEAD
|
|
34
|
+
if node test/run.js; then
|
|
35
|
+
echo "FAIL: RED commit passed in isolation (expected failure)"
|
|
36
|
+
return 1
|
|
37
|
+
fi
|
|
38
|
+
echo "PASS: RED commit fails in isolation"
|
|
39
|
+
|
|
40
|
+
mkdir -p src
|
|
41
|
+
echo 'module.exports = {};' > src/impl.js
|
|
42
|
+
git add src/impl.js
|
|
43
|
+
git commit -q -m "fix(scope): green — implementation"
|
|
44
|
+
if ! node test/run.js; then
|
|
45
|
+
echo "FAIL: GREEN commit should pass"
|
|
46
|
+
return 1
|
|
47
|
+
fi
|
|
48
|
+
echo "PASS: GREEN commit passes"
|
|
49
|
+
echo "verify-tdd-red-commit: self-test OK"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if [[ "${1:-}" == "--self-test" ]]; then
|
|
53
|
+
self_test
|
|
54
|
+
exit $?
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
if ! git rev-parse --git-dir >/dev/null 2>&1; then
|
|
58
|
+
echo "ERROR: not a git repository"
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
if [[ "$(git rev-list --count HEAD 2>/dev/null || echo 0)" -lt 2 ]]; then
|
|
63
|
+
echo "SKIP: need at least 2 commits (test-only RED then fix GREEN)"
|
|
64
|
+
exit 0
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
VERIFY_CMD="${TDD_VERIFY_CMD:-}"
|
|
68
|
+
if [[ -z "$VERIFY_CMD" ]]; then
|
|
69
|
+
if [[ -f package.json ]] && grep -q '"test"' package.json 2>/dev/null; then
|
|
70
|
+
VERIFY_CMD="npm test --if-present"
|
|
71
|
+
elif [[ -f Cargo.toml ]]; then
|
|
72
|
+
VERIFY_CMD="cargo test"
|
|
73
|
+
else
|
|
74
|
+
echo "SKIP: set TDD_VERIFY_CMD for this repo"
|
|
75
|
+
exit 0
|
|
76
|
+
fi
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
RED_SHA=$(git rev-parse HEAD~1)
|
|
80
|
+
WORKTREE=$(mktemp -d)
|
|
81
|
+
trap 'git worktree remove -f "$WORKTREE" 2>/dev/null || rm -rf "$WORKTREE"' EXIT
|
|
82
|
+
|
|
83
|
+
git worktree add -q --detach "$WORKTREE" "$RED_SHA"
|
|
84
|
+
(
|
|
85
|
+
cd "$WORKTREE"
|
|
86
|
+
if bash -c "$VERIFY_CMD"; then
|
|
87
|
+
echo "FAIL: test-only commit $RED_SHA passed in isolation — RED gate violated"
|
|
88
|
+
exit 1
|
|
89
|
+
fi
|
|
90
|
+
echo "PASS: test-only commit $RED_SHA fails in isolation"
|
|
91
|
+
)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# story: e80s01
|
|
2
|
+
# story: e80s03
|
|
1
3
|
# story: e51s04
|
|
2
4
|
# story: e45s06
|
|
3
5
|
# story: e45s08
|
|
@@ -60,7 +62,13 @@ GREEN: Write minimal code to pass → test passes → commit: feat(<scope>): ..
|
|
|
60
62
|
REFACTOR (optional): clean up → commit: refactor(<scope>): ...
|
|
61
63
|
```
|
|
62
64
|
|
|
63
|
-
> **Two-commit red/green policy (HARD GATE — e45s08)** — Each behavior cycle requires **two separate commits**: (1) test-only commit that fails in CI (RED), then (2) implementation commit that makes it pass (GREEN). Never combine test + fix in one commit.
|
|
65
|
+
> **Two-commit red/green policy (HARD GATE — e45s08)** — Each behavior cycle requires **two separate commits**: (1) test-only commit that fails in CI (RED), then (2) implementation commit that makes it pass (GREEN). Never combine test + fix in one commit. Before proceeding, run the mechanical RED isolation check:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
bash scripts/verify-tdd-red-commit.sh
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Show `git log -2 --oneline` **and** the script output as evidence. If the test-only commit passes in isolation, the RED gate is violated — stop and fix before GREEN.
|
|
64
72
|
|
|
65
73
|
> **tasks.yaml ledger (e45s06)** — After each task's `verify:` exits 0, update `eNNsYY-tasks.yaml`: set that task's `status: passing`. Story-level `status: passing` only when all tasks pass.
|
|
66
74
|
|
|
@@ -124,5 +132,9 @@ Writes: state.yaml handoff.next_skill = verify-work
|
|
|
124
132
|
|
|
125
133
|
At story completion, if the story was sized with BCP Plus (13-dimension breakdown), log the `bcp_plus.total` alongside the standard `bcps:` count in the story's tasks.yaml. The breakdown is available from the epic capsule's `bcp_plus_breakdown` field. See `docs/references/bcp-plus.md` for the full methodology and NFR Gate pattern.
|
|
126
134
|
|
|
135
|
+
## Verify
|
|
136
|
+
|
|
137
|
+
→ verify: `test -x scripts/verify-tdd-red-commit.sh && bash scripts/verify-tdd-red-commit.sh --self-test && grep -q 'verify-tdd-red-commit' skills/develop-tdd/SKILL.md && echo OK`
|
|
138
|
+
|
|
127
139
|
|
|
128
140
|
<!-- story: e02s04 -->
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# story: e80s01
|
|
1
2
|
---
|
|
2
3
|
name: enforce-first
|
|
3
4
|
model: haiku
|
|
@@ -22,6 +23,15 @@ This skill is typically invoked internally by `develop-tdd` during the test-writ
|
|
|
22
23
|
|
|
23
24
|
See CONVENTIONS.md §Tests for the canonical F.I.R.S.T rubric definition, checklists, and fix patterns.
|
|
24
25
|
|
|
26
|
+
Mechanical self-check (runs before reporting audit complete):
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
grep -q '## Tests (F.I.R.S.T' CONVENTIONS.md
|
|
30
|
+
grep -qE 'Fast|Independent|Repeatable|Self-Validating|Timely' CONVENTIONS.md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Each criterion must be explicitly addressed in the audit report with pass/fail per test file reviewed.
|
|
34
|
+
|
|
25
35
|
## Applying the rubric
|
|
26
36
|
|
|
27
37
|
For each failing criterion:
|
|
@@ -32,3 +42,7 @@ For each failing criterion:
|
|
|
32
42
|
|
|
33
43
|
Report: "F.I.R.S.T audit complete. X criteria passed, Y fixed."
|
|
34
44
|
|
|
45
|
+
## Verify
|
|
46
|
+
|
|
47
|
+
→ verify: `grep -q '## Tests (F.I.R.S.T' CONVENTIONS.md && grep -qE 'Self-Validating|Repeatable' skills/enforce-first/SKILL.md && echo OK`
|
|
48
|
+
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# story: e80s01
|
|
1
2
|
# story: e45s05
|
|
2
3
|
---
|
|
3
4
|
name: gate-trace
|
|
@@ -90,3 +91,7 @@ gate_trace:
|
|
|
90
91
|
|
|
91
92
|
Gate: READY → next: release-branch (final step before merge)
|
|
92
93
|
Writes: state.yaml handoff.next_skill = release-branch
|
|
94
|
+
|
|
95
|
+
## Verify
|
|
96
|
+
|
|
97
|
+
→ verify: `test -x scripts/run-gate-trace-verify.sh && bash scripts/run-gate-trace-verify.sh --self-test && echo OK`
|