Files
Garry Tanandcapy-ai[bot] 923ed3cddc v1.91.359.0 feat(verify): /verify skill and gstack-checks bin (GST-116 PR 1) (#3672)
* verify: add /verify skill and gstack-checks (GST-116 PR 1)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: pre-landing review fixes

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: pre-landing review fixes (pass 2)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: adversarial review fixes

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: win32 NUL discard for the Go build check; unique Health Stack names (rule 23 grant)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* docs: changelog fragment for /verify

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-31 09:54:03 +00:00

88 lines
3.1 KiB
Cheetah

---
name: verify
preamble-tier: 1
version: 0.1.0
description: |
Build loop while coding: run the repo's checks and the tests /ship would
pick, fix, repeat until green. Never green when no test covers a change.
Use when asked to "verify", "check my work", "run the checks", "make it
green", or after each change before /ship. (gstack)
triggers:
- verify my change
- run the checks
- make the tests pass
- check my work before ship
allowed-tools:
- Bash
- Read
- Edit
- Grep
- Glob
- AskUserQuestion
---
{{PREAMBLE}}
# /verify — build, check, fix, repeat
Use this while building, before /ship. It runs checks and fixes code. It never
reviews, bumps a version, edits CHANGELOG, pushes, or opens a PR: that is /ship.
## 1. See what will run
Each Bash call is a fresh shell, so every block sets `C` again.
```bash
C="{{RUNTIME_ROOT}}/bin/gstack-checks"; "$C" detect
```
`detect` reads files only. It lists each check with its source, the pregate
test selection, and `TRUST trusted|untrusted`. `CHECKS: none` means the repo declares no check,
pregate policy or test file: there is nothing to run, so say so and stop. Never invent a
command the repo does not declare.
When `untrusted`: in an interactive session, show the user the listed commands
and ask before `"$C" trust`. In a session launched to run repo commands, pass
`--allow-repo-commands` to `run` instead. Never trust without one of the two.
## 2. Loop: run, fix, run
```bash
C="{{RUNTIME_ROOT}}/bin/gstack-checks"; "$C" run
```
One line per check: `CHECK <name> <VERDICT> <secs>`, at most 40 failing lines
and a log path. Exit 0 is green; only `PASS` is green.
- `FAIL`: fix the code under test. A changed source file breaking an untouched
test is your bug, not a pre-existing one. Call a red "possibly pre-existing"
only if it was already red on your first `run` this session, before any edit.
- `UNMAPPED`: no test covers a touched file. Add a test that does, or map it in
`.gstack/pregate.json`. `ZERO_RUN`: the selected tests ran nothing; fix the
selector or the test file. `TOO_BROAD`: the change selects over 300 test
files; leave them to /ship's pregate and say so.
- `ENV` or `TIMEOUT` (exit 2): a missing tool, service, secret or network.
Report it with the log line; do not fix the environment or work around it.
A `FAIL` whose own error says a service, secret or env var is missing is
the same: report it, do not stub or skip it.
- Rerun one check with `"$C" run --only <name>` while fixing it, then a full
`run` before you stop.
Never weaken, skip, delete or edit a test, a checker config or a package.json
script to get green.
Stop after 5 runs, when the same failure comes back twice after a fix, or on an
`ENV`/`TIMEOUT`. Report what is still red and why. A stubborn red in your own
change goes to /investigate.
## 3. Hand off
```bash
C="{{RUNTIME_ROOT}}/bin/gstack-checks"; "$C" status
```
`status` reruns nothing. Only `READY_FOR_SHIP tree=<tree> ... not_covered=<lanes>`
(exit 0) means green at this exact tree. Print that line, name any
`not_covered` lanes (platform tests /ship's pregate owns), and stop with
"ready for /ship". `NOT_READY` means run again; never claim green from it.