gstack’s /ship now stops when the second-opinion review says not ready

1 hour ago

gstack 1.91.197.0 to 1.91.199.0 (2026-10-25): /ship and /codex now stop when the outside reviewer says "not ready", even with only P2 or P3 findings. Pregate gives touched Rust files a test lane and runs nested Vitest or Jest packages under their own runner, and /sync-gbrain names the autopilot that blocks it. Release notes: https://github.com/garrytan/gstack/blob/main/CHANGELOG.md#1911990---2026-10-25 https://github.com/garrytan/gstack/blob/main/CHANGELOG.md#1911980---2026-10-25 https://github.com/garrytan/gstack/blob/main/CHANGELOG.md#1911970---2026-10-25 Troubleshooting: https://github.com/garrytan/gstack/blob/main/docs/troubleshooting.md Commits: https://github.com/garrytan/gstack/commits/main

Ask about this presentation

Chapters

  1. 0:00Review
  2. 0:15Rust
  3. 0:27Nested
  4. 0:40Hardening
  5. 0:53GBrain
  6. 1:05Next
Show transcript

Review

gstack logo

gstack’s /ship now stops when the second-opinion review says not ready

P2 · P3 findings
Verdict: not ready
VERDICT: cleanVERDICT: findings · exit 3
ReviewRustNestedHardeningGBrainNext
garrytan/gstack · CHANGELOG.md · 1.91.198.0

gstack’s ship and Codex skills now stop when the outside reviewer says not ready. Before, a reply listing only minor P2 or P3 findings passed as clean, verdict and all.

Rust

/ship’s pregate now runs the tests for every Rust file you touch

has no test lanecargo test -p <crate>
Selected · the touched crate and every crate that depends on it
No cargo installed · the lane reports incomplete
ReviewRustNestedHardeningGBrainNext
garrytan/gstack · CHANGELOG.md · 1.91.197.0

In a mixed Rust repo, every touched Rust file failed pregate with no test lane, so ship never got a receipt. Now it runs cargo test for that crate and its dependents.

Nested

A nested Vitest or Jest package runs under its own runner

bun test from the repo root
pnpm execyarnbun xnpx
Picked from the package’s packageManager field or its nearest lockfile. npx and bun x may fetch a missing tool.
ReviewRustNestedHardeningGBrainNext
garrytan/gstack · CHANGELOG.md · 1.91.197.0

A nested Vitest or Jest package used to run under bun test from the root, causing about ninety-eight false failures in one repo. Now it runs through its own package manager.

Hardening

Three fixes harden the new Rust lane

Crate names · a name like evil;touch pwned never reaches the shell
Workspace globs · a hostile members glob no longer stalls for seconds
Plain tests · a #[test] function in src/ marks the file as a test
ReviewRustNestedHardeningGBrainNext
garrytan/gstack · CHANGELOG.md · 1.91.197.0

Three fixes harden the Rust lane. A crate name can no longer run a shell command. A hostile workspace glob no longer stalls it for seconds. And a plain test function in source now counts.

GBrain

/sync-gbrain now names the autopilot that blocks it

(process:gbrain autopilot)
Every match · pid and command line, any password in a URL masked
The fix · stop that autopilot or its --install service
Still machine-wide · an autopilot for another brain also blocks
ReviewRustNestedHardeningGBrainNext
garrytan/gstack · CHANGELOG.md · 1.91.199.0

When sync GBrain refuses because an autopilot is running, it now names each process and its command, then says how to stop it. The check stays machine wide, so another brain’s autopilot still blocks.

Next

If you run /ship on a Rust repo, I would upgrade now

docs/troubleshooting.mdHow the verdict is read from a review
CHANGELOG.mdgarrytan/gstack · 1.91.197.0 to 1.91.199.0
ReviewRustNestedHardeningGBrainNext
garrytan/gstack · CHANGELOG.md · 1.91.198.0

If you ship a Rust or mixed repo, I would upgrade now, because pregate finally runs your tests. The troubleshooting doc explains how a review verdict now blocks.

What happened in AI today, in your inbox

One short email each evening. Read it and you’re caught up.

Built in New York with ❤️