mirror of
https://github.com/garrytan/gstack.git
synced 2026-10-31 14:06:50 +01:00
captain: train land per slot under changelog_fragments (skill and skills.md)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
7bc2034724
commit
12fac5392a
3 files changed
+18
-2
No files matched your search
@@ -261,6 +261,13 @@ Never merge out of order, never merge anything else while a train is merging, an
|
||||
skip the second verify: a mismatch there is what writes the freeze. When every slot has
|
||||
merged, `train prune --train "$NONCE"` deletes the train branch.
|
||||
|
||||
**Under `changelog_fragments`** (a stamped train: `train build` printed `S1:`..`Sk:` lines)
|
||||
there is no slot call and no lane stamp. Per slot, in `ORDER`, run
|
||||
`gstack-ship-queue train land --train "$NONCE" --pr "$PR"` until it exits 0. It pushes the
|
||||
stamped prefix S_i as a commit on [pin, `BASE`], waits for the policy's `required_checks`,
|
||||
merges with `--match-head-commit` and confirms `BASE` is S_i exactly. A rerun resumes from
|
||||
its journal, and any other `BASE` freezes the queue as above (docs/ship-policy.md#train-land).
|
||||
|
||||
**The tree rule.** A gate covers a tree, not a commit. A head whose diff from the gated
|
||||
prefix touches only `STAMP_FILES` reuses the gate; that is what lets the lane stamp after
|
||||
the gate ran. Anything else is a new tree and needs a new gate.
|
||||
|
||||
@@ -189,6 +189,13 @@ Never merge out of order, never merge anything else while a train is merging, an
|
||||
skip the second verify: a mismatch there is what writes the freeze. When every slot has
|
||||
merged, `train prune --train "$NONCE"` deletes the train branch.
|
||||
|
||||
**Under `changelog_fragments`** (a stamped train: `train build` printed `S1:`..`Sk:` lines)
|
||||
there is no slot call and no lane stamp. Per slot, in `ORDER`, run
|
||||
`gstack-ship-queue train land --train "$NONCE" --pr "$PR"` until it exits 0. It pushes the
|
||||
stamped prefix S_i as a commit on [pin, `BASE`], waits for the policy's `required_checks`,
|
||||
merges with `--match-head-commit` and confirms `BASE` is S_i exactly. A rerun resumes from
|
||||
its journal, and any other `BASE` freezes the queue as above (docs/ship-policy.md#train-land).
|
||||
|
||||
**The tree rule.** A gate covers a tree, not a commit. A head whose diff from the gated
|
||||
prefix touches only `STAMP_FILES` reuses the gate; that is what lets the lane stamp after
|
||||
the gate ran. Anything else is a new tree and needs a new gate.
|
||||
|
||||
+4
-2
@@ -45,7 +45,7 @@ Detailed guides for every gstack skill — philosophy, workflow, and examples.
|
||||
| [`/write-skill`](#write-skill) | **Skill Editor** | Write or improve an agent skill without bloat: edit ladder, size per level, skill-to-bin drift check, full diets with a before/after test. |
|
||||
| [`/test-audit`](#test-audit) | **Test Auditor** | Sweep existing tests for low-value, implementation-coupled or duplicate tests. Report-only unless you approve a batch. |
|
||||
| [`/landing-report`](#landing-report) | **Ship Queue Dashboard** | Read-only snapshot of the workspace-aware ship queue. Which version slots are claimed, which sibling workspaces have WIP. |
|
||||
| [`/captain`](#captain) | **Crew Controller** | Run many coding agents from one controller. Lanes build and send a READY block; the controller validates it, merges through trains (stamp on call, verify, merge with the expected head, verify again), keeps the digest, relays approvals in three fixed shapes and runs a daily flaky-fix pass. Also answers to `/crew`. |
|
||||
| [`/captain`](#captain) | **Crew Controller** | Run many coding agents from one controller. Lanes build and send a READY block; the controller validates it, merges through trains (stamp on call, verify, merge with the expected head, verify again; `train land` per slot under `changelog_fragments`), keeps the digest, relays approvals in three fixed shapes and runs a daily flaky-fix pass. Also answers to `/crew`. |
|
||||
| [`/benchmark-models`](#benchmark-models) | **Model Benchmark** | Side-by-side cross-model benchmark for skills (Claude vs GPT vs Gemini). Latency, tokens, cost, optional LLM-judged quality. |
|
||||
| [`/eval-plan`](#eval-plan) | **Eval Planner** | Preregister a paid eval (bars, arms, decoys, stop rules), dry-run it for $0 with the stub model, pilot three priced items, then approve the spend from the extrapolation table. |
|
||||
| | | |
|
||||
@@ -1464,7 +1464,9 @@ receipt at the pin and the logged flaky cases); a green PR page or a cheap test
|
||||
never merge evidence. The controller batches READY pins into a **merge train**, reads one
|
||||
full gate on the train head (an in-run flaky rerun once; a case that failed twice is
|
||||
real), then merges slot by slot: slot call, lane stamps on call with a commit that holds
|
||||
only tool output, `verify --train`, `gh pr merge --match-head-commit`, verify again. A red
|
||||
only tool output, `verify --train`, `gh pr merge --match-head-commit`, verify again. Under
|
||||
`changelog_fragments` there is no slot call: `train land` publishes each slot's stamped
|
||||
prefix and merges it. A red
|
||||
train is bisected on its red cases and rebuilt at most once; a backstop gate on every
|
||||
base push freezes the queue when a tree no train covered lands. Approvals have three
|
||||
shapes (the per-thread record, the plan ask with before → after and a "do it" reply, the
|
||||
|
||||
Reference in new issue
Block a user