gstack merge trains now land pull requests in any repo

2 hours ago

gstack merge trains now work in any repository: your own CI, or a test on a Ubicloud machine, gates every prefix of the train, so the first red one names the culprit and the pull requests ahead of it still land. Also: /ship's reviewers now read the checkout /ship ships even from a worktree, a /ship review that costs less and catches more (33 of 41 known blockers against 27), the packet reviewers rolled back (a PR reviewed on gstack 1.91.326.0 through 1.91.330.0 may still hide a blocker), a /ship token cap, review receipts that survive a merge from main, /ship pausing on a red main, three new skills (/verify, /modernize, /write-skill), sealed-guard waivers that must name the full commit sha, and flaky-test reruns that keep CI green. Covers gstack 1.91.274.0 to 1.92.1.0 (108 releases, 2026-10-27 to 2026-10-31), for Claude Code users. Changelog: https://github.com/garrytan/gstack/blob/main/CHANGELOG.md Merge train gates: https://github.com/garrytan/gstack/blob/main/docs/ship-policy.md#train-gates Token cap: https://github.com/garrytan/gstack/blob/main/docs/ship-budget.md Receipt carry, red-main pause and ship policy: https://github.com/garrytan/gstack/blob/main/docs/ship-policy.md Review depth: https://github.com/garrytan/gstack/blob/main/docs/review-policy.md Flaky-test reruns: https://github.com/garrytan/gstack/blob/main/docs/flaky.md Sealed output and waivers: https://github.com/garrytan/gstack/blob/main/docs/pregate.md gstack: https://github.com/garrytan/gstack

Ask about this presentation

Chapters

  1. 0:00Trains
  2. 0:15Culprit
  3. 0:31Review
  4. 0:45Rollback
  5. 0:59Worktree
  6. 1:12Budget
  7. 1:27Receipts
  8. 1:40Red main
  9. 1:55Skills
  10. 2:10Security
  11. 2:24Fixes
Show transcript
  1. gstack merge trains used to need gstack's own eval workflow. Now any repository can run one, gated by its own CI or a test on a Ubicloud machine, so a team stops merging one pull request at a time.

    Slide text
    gstack logo

    gstack merge trains now land pull requests in any repo

    workflows your own CI runs on every prefix of the train
    command or a test command on a Ubicloud VM, under one spend cap
    lands each green slot merges in order
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.92.0.0
  2. Before, a train only tested its tip, and finding the pull request that broke it took a bisect. Now every prefix is tested. The first red one names the culprit, and the pull requests ahead of it still land.

    Slide text

    Every slot on the train gets its own verdict, so the first red one names the culprit

    slot 1 green → slot 2 green → slot 3 red → slot 4 waits
    Slots 1 and 2 still land. No bisect, since every prefix already has its verdict.
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.92.0.0
  3. /ship review now runs one batched specialist that reads every checklist your diff calls for, sized to what the diff can break. It caught thirty-three of forty-one known blockers, where the old review caught twenty-seven.

    Slide text

    /ship review costs less and catches more

    one reader a batched specialist reads every checklist the diff calls for
    depth small diffs get a light pass, gate code still gets every reviewer
    full effort Red Team, adversarial pass and fix-check
    41 known blockers 33 found · 27 before
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.91.307.0 · 1.91.350.0
  4. For a few releases, /ship gave each reviewer a prepared packet instead of the code. Those reviewers caught about half the blockers, so they're gone. A pull request reviewed on those versions may still hide one.

    Slide text

    /ship and /review are back on the reviewers that catch blockers

    restored reviewers · known blockers found, 14 merged PRs
    19
    packet reviewers, now removed
    10
    A PR the packet reviewers passed may still hide a blocker, and a /ship begun on those versions should start over.
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.91.331.0
  5. Run /ship from a git worktree on a shared machine, and its reviewers used to review whatever branch the main checkout held. Now each reviewer names the tree it read, and a reply from the wrong tree is refused.

    Slide text

    /ship’s reviewers now read the checkout /ship ships, even from a worktree

    before readers reviewed the primary checkout’s branch
    now REVIEWED_TREE checked · wrong tree refused
    A clean review of the wrong tree looked the same as a clean review of the right one.
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.91.379.0
  6. Give /ship a token cap and it now checks the cap before every step, where one run used to spend twice its cap. Each step is priced from this run's real spending, so a tight cap still lets cheap work through.

    Slide text

    /ship stops cleanly at a token cap you set

    before cap written in the brief · 54M spent on 25M
    now each step runs only if it fits
    Each step is priced from what this run has already spent.
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.91.316.0 · 1.91.324.0
  7. After you merge main into a reviewed branch, /ship checks whether your own code changed. If it didn't, it skips the review. A stacked pull request now keeps its review too, once its parent lands.

    Slide text

    /ship keeps its review after you merge main

    merge main → your code unchanged → receipt carried
    carries a merge that only regenerates outputs
    carries a stacked PR once its parent lands
    re-reviews any other rebase
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.91.291.0 · 1.91.306.0 · 1.91.315.0
  8. When main breaks for a reason outside your pull request, /ship now pauses until main is green, then you resume it. Your repo turns this on in its ship policy. On a merge train, the fix for main rides first.

    Slide text

    /ship pauses on a red main instead of failing your PR

    main is red → SHIP_PAUSED → BASE_GREEN → /ship --resume
    Only when every failure also fails on main and your PR touches neither the test nor its paths. Needs a base_red block in the base branch’s ship policy.
    On a merge train, the PR that fixes main rides slot 1 and the paused PRs follow it.
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.91.374.0 · 1.92.0.0
  9. /verify runs your checks and the tests /ship would pick, and fixes what breaks until they pass. /modernize recommends whether to rebase, rework, or close an aging pull request. /write-skill writes and slims your own skills.

    Slide text

    Three new skills, for a green build, aging PRs and your own skills

    /verify Runs the repo’s checks and the tests /ship would pick, fixes what breaks, repeats until green no green without a covering test
    /modernize Modernize, rework or close, decided before anything is pushed never closes the PR itself
    /write-skill Writes a new skill, changes one, or puts one on a diet /learn template · 5,797 → 2,955 bytes
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.91.359.0 · 1.91.284.0 · 1.91.287.0
  10. A sealed-guard waiver used to match any commit that shared its first seven characters, and a matching commit takes minutes to generate. Waivers now need the full commit hash, so an old short one stops waiving.

    Slide text

    A sealed-guard waiver now has to name the full commit sha

    before 7 characters waived any matching commit
    now full sha only · 40 characters, 64 on SHA-256
    A short waiver is ignored, so its finding refuses the push, and the error names the line.
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · 1.91.338.0
  11. A test that fails once and passes on a rerun now keeps your CI green. A reviewer that never saw your diff no longer counts as clean. And an unattended /ship asks before it bumps the version. I'd upgrade today, for reviews that catch more and merge trains in your own repo.

    Slide text

    Fixes for flaky CI, empty reviews and unasked version bumps

    A test that fails once and passes on rerun keeps the CI job green and is logged as flakygstack-flaky run · any command that writes a JUnit report · 1.91.372.0
    A reviewer that never saw the diff no longer reads as a clean review 1.91.365.0 · 1.91.367.0
    An unattended /ship stops and asks before it writes a version bump 1.91.353.0
    CHANGELOG.md · docs/ship-budget.md · docs/ship-policy.md#train-gates · docs/flaky.md garrytan/gstack
    Trains Culprit Review Rollback Worktree Budget Receipts Red main Skills Security Fixes
    garrytan/gstack · CHANGELOG.md · docs/ship-budget.md · docs/ship-policy.md · docs/flaky.mdgarrytan/gstack

What happened in AI today, in your inbox

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

Built with ❤️ in New York