verify
The facts
Its description
Build loop while coding: run the repo's checks and the tests /ship would pick, fix, repeat until green. (gstack) Triggers: verify my change; run the checks; make the tests pass; check my work before ship
The description the agent reads to decide when to use it. Phrases the author says should start it.
When it starts
A person who is mid-change and wants the repo's own checks and the tests /ship would pick run and fixed until green, before shipping. The description and triggers point at verifying a change, running the checks, and making the tests pass.
Things a person might say (the model's guesses)
- “verify my change”
- “run the checks and make the tests pass”
- “check my work before I ship”
A model's summary of when it is used.
Tools it may use, or may not
allowed-tools: Bash, Read, Edit, Grep, Glob, AskUserQuestion
Tools it may use while it runs without asking you first.
Runs scripts
bin/gstack-skill-start, bin/gstack-learnings-log, bin/gstack-skill-end, bin/gstack-checks (first 5 of 6 lines)
Scripts the text names. Found by matching words, so treat them as pointers.
Stops for a person
3 lines stop to ask a person
Lines that stop and wait for a person before going on. Found by matching words, so treat them as pointers.
What it leads to
- hands off to investigate when a red failure persists in your own change line 200
- hands off to ship when status reports READY_FOR_SHIP line 211
Other skills this one hands off to, calls, requires or offers instead, as a model read them.
What leads to it
- gstack hands off to this PROACTIVE all, or user names it gstack, line 211
Other skills that hand off to this one, call it, require it or offer it instead, as a model read them.
Licence
MIT, from LICENSE
The terms its author shares it under, which let it be shown here.
The text
Most marks come from matching words in the file, so treat them as pointers.
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly --> <!-- Regenerate: bun run gen:skill-docs -->
Raw lines 1 to 21Boilerplate, lines 22 to 99. The same text appears in 9 other files here. Close
Completion Status Protocol
When completing a skill workflow, report status using one of:
- DONE — completed with evidence valid for the final consumed inputs; name reuse and anything not independently verified.
- DONE_WITH_CONCERNS — completed, but list concerns.
- BLOCKED — cannot proceed; state blocker and what was tried.
- NEEDS_CONTEXT — missing info; state exactly what is needed.
Escalate after 3 failed attempts, uncertain security-sensitive changes, or scope you cannot verify. Format: STATUS, REASON, ATTEMPTED, RECOMMENDATION.
Boilerplate, lines 110 to 145. The same text appears in 26 other files here. Close
Plan Status Footer
Skills that run plan reviews (/plan-*-review, /codex review) include the EXIT PLAN MODE GATE blocking checklist at the end of the skill, which verifies the plan file ends with ## GSTACK REVIEW REPORT before ExitPlanMode is called. Skills that don't run plan reviews (operational skills like /ship, /qa, /review) typically don't operate in plan mode and have no review report to verify; this footer is a no-op for them. Writing the plan file is the one edit allowed in plan mode.
/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.
Raw lines 146 to 1541. See what will run
Each Bash call is a fresh shell, so every block sets C again.
C="$HOME/.claude/skills/gstack/bin/gstack-checks"; "$C" detectdetect 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
C="$HOME/.claude/skills/gstack/bin/gstack-checks"; "$C" runOne 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 firstrunthis 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.ENVorTIMEOUT(exit 2): a missing tool, service, secret or network. Report it with the log line; do not fix the environment or work around it. AFAILwhose 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 fullrunbefore 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
C="$HOME/.claude/skills/gstack/bin/gstack-checks"; "$C" statusstatus 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.
From garrytan/gstack at 3f79d81, 2026-11-01. Skills read by DeepSeek V4.1 Flash on 2026-11-04. Summary and techniques by Claude Opus 5.5 on 2026-11-06.