Delivery Loop Stories
The delivery loop is the shipped story stack for turning a scoped brief into verified work on the integration branch:
brief -> maker worktree -> deterministic gate -> lost-work-safe integrate
-> re-verify on the merged commit -> cleanup -> shipped | needs-human
The stack is intentionally split:
stories/ship-it/delivers one brief. It imports the maker loop, integrates the result safely, re-runs the same gate on the merged commit, and exits with eithershippedorneeds-human.stories/fleet/fansship-itover a brief list and keeps integration serialized behind its board state.stories/deliver/is the epic front door: decompose an accepted epic into a validated brief manifest, lint it, then hand the manifest tofleet.stories/git-ops/remains the standalone operator story for normal git workflow and the shared design reference for lost-work-safe integration.
ship-it
ship-it is the single-brief delivery story. Its contract is:
- Capture
briefandgate_command. - Run the maker in an isolated worktree.
- Integrate the produced branch onto the current integration branch.
- Re-run
gate_commandon the merged commit, not only in the maker worktree. - Clean up the worktree and branch.
Every failure path carries last_error and exits needs-human; it must not report a shipped result from a swallowed host failure.
The story's operator reference lives in stories/ship-it/README.md.
fleet
fleet loads a decomposition manifest into a board and dispatches each pending brief through ship-it. A brief that exits needs-human is parked with its error while the board can continue with other work. The v1 board is deliberately deterministic and fixture-friendly; it does not require a real LLM to validate the fan-out mechanics.
deliver
deliver is the author-facing entry point above fleet, and the canonical decomposition story: it takes an accepted epic, decomposes it into briefs (with a budgeted refine loop and an adversarial review gate), lints the result, and routes into fleet.load when the manifest is valid. It is also reachable directly from stories/dev-story/ as the decompose-vs-direct sibling of the plain impl pipeline. See deliver.md for the full narrative (story graph, manifest contract, dev-story integration, per-surface proofs) and stories/deliver/README.md for the room-by-room reference.
Validation
Use no-LLM flow fixtures when changing these stories:
go run ./cmd/kitsoki test flows stories/ship-it/app.yaml
go run ./cmd/kitsoki test flows stories/fleet/app.yaml
go run ./cmd/kitsoki test flows stories/deliver/app.yaml
The gate command inside a real brief should also be deterministic: go test, pnpm test, kitsoki test flows, or another scriptable check. Do not use a live LLM as the proof that a delivery is done.