gstack now merges pull requests in trains of five behind one full gate

2 hours ago

gstack for Claude Code turned merge trains on for its own repository: up to five ready pull requests now share one full gate, or a smaller train leaves once its oldest pull request has waited three hours. A dry-run train passed first. The version gate now accepts a train pull request that keeps main's version and files its changelog entry under Unreleased, which had blocked every train. Covers gstack 1.91.164.0 to 1.91.165.0. How to run a merge train: https://github.com/garrytan/gstack/blob/main/docs/ship-policy.md#run-a-merge-train Release notes, 1.91.164.0: https://github.com/garrytan/gstack/blob/main/CHANGELOG.md#1911640---2026-10-19 Release notes, 1.91.165.0: https://github.com/garrytan/gstack/blob/main/CHANGELOG.md#1911650---2026-10-20 Commits: https://github.com/garrytan/gstack/commits/main

Ask

Ask about this presentation

Answers are generated from this presentation.

Chapters

  1. 0:00Live
  2. 0:16Dry run
  3. 0:31Version gate
  4. 0:47Rules
  5. 1:01Docs
Show transcript

Live

gstack logo

gstack now merges pull requests in trains of five behind one full gate

"train": {
  "max_size": 5, "fill_hours": 3
}
LiveDry runVersion gateRulesDocs
garrytan/gstack · CHANGELOG.md · 1.91.164.0

gstack turned merge trains on for its own repository. Up to five ready pull requests now share one full gate instead of paying for one each. A smaller train leaves once its oldest pull request has waited three hours.

Dry run

A dry-run train merged two pull requests behind one green gate

VERDICT GREEN
rule 108/108 · judge 24/24
MERGE_CONDITION: sha=33fb98512123…
Skipped in the dry runpush routing · stamp at merge · screen · bisect · main backstop
LiveDry runVersion gateRulesDocs
garrytan/gstack · CHANGELOG.md · 1.91.164.0

Before going live, a dry-run train put two scratch pull requests behind one full gate, and every rule and judge case passed. That run skipped push routing, stamping at merge, screens, bisects and the main backstop.

Version gate

A pull request on a train passes the version gate without a bump

beforeVERSION not bumpedQUEUE_NOT_READY
nowunstamped head passes
LiveDry runVersion gateRulesDocs
garrytan/gstack · CHANGELOG.md · 1.91.165.0

On a train, a pull request keeps main's version and files its changelog entry under Unreleased. The version gate still demanded a bump, so the ship queue refused it and every train stalled. Now it passes.

Rules

The version gate still holds a train to strict rules

Stamped pull request must land exactly one bump above main
No train block means the same gate as before
Gate fixes on main reach open pull requests on their next update
LiveDry runVersion gateRulesDocs
garrytan/gstack · CHANGELOG.md · 1.91.165.0

A pull request that does stamp a version must land exactly one bump above main. Repositories without a train block keep the old gate. A gate fix on main now reaches open pull requests at their next update.

Docs

Merge trains are off until your ship policy declares a train block

docs/ship-policy.mdRun a merge train
How many pull requests wait to merge in your repository on a normal day?
LiveDry runVersion gateRulesDocs
garrytan/gstack · CHANGELOG.md · 1.91.165.0

Merge trains stay off in any repository whose ship policy has no train block, and the ship policy guide covers turning them on. How many pull requests wait to merge in your repository on a normal day?