From dd877a9ca4933eeb90f55f797b4d4b4a6fdd4c5f Mon Sep 17 00:00:00 2001 From: garrytan Date: Tue, 3 Nov 2026 01:51:22 +0000 Subject: [PATCH] pregate: a carried run clears the remote gate through remote_gate_runs, so a paid-only remainder is not a dead end Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --- changelog.d/gsta-258-a-ci-carry.md | 1 + docs/pregate.md | 11 +++++ lib/pregate/index.ts | 21 ++++++++ test/pregate-carry-gate.test.ts | 79 ++++++++++++++++++++++++++++++ 4 files changed, 112 insertions(+) create mode 100644 test/pregate-carry-gate.test.ts diff --git a/changelog.d/gsta-258-a-ci-carry.md b/changelog.d/gsta-258-a-ci-carry.md index 2becf93a1..24f7eca1c 100644 --- a/changelog.d/gsta-258-a-ci-carry.md +++ b/changelog.d/gsta-258-a-ci-carry.md @@ -4,3 +4,4 @@ bump: minor - CI is now the one full test run. When a verified CI run already passed at the exact, clean tree, `gstack-pregate`'s tests stage and /ship's test lanes use it instead of running the suite again (GSTA-258, R65 item 1). The tests stage looks up the newest verified run at HEAD under the base branch's `run_profiles` by itself (`CI_CARRY: accepted …`; `--no-ci-carry` turns it off). A /ship lane carries only when the base branch's `.gstack/pregate.json` maps its exact command in the new `ship_lanes_from` key, and only when the run's `tree.json` covers the lane's inventory; gstack maps `bun run test` to its Free Tests run. A carried lane prints `LANE: