← all features · evolve-loop explainers

Ship & release

Four commit classes, one attestation chokepoint, a self-healing release pipeline — and the binary-deletion defect that hid on the success path.

How it works today

ClassVerification (code: phases/ship/verify.go:182-223)
cycleno control-plane edits (ADR-0064) + audit↔tree binding + persona-lint
manualconfirm (TTY or EVOLVE_SHIP_AUTO_CONFIRM) + commit-gate attestation (tree-SHA of the reviewed diff must equal the staged tree) + persona-lint
releasepipeline-only; audit skipped (version bump mutates post-audit)
trivialrequires trivial size estimate + zero pipeline-critical paths
The smoking gun (queued: ship-manual-deletes-running-binary, 0.94)discardBinaryChurn runs on the manual-ship SUCCESS path (gitops.go:210); with ShipBinaryPath never set it resolves os.Executable() and os.Removes the untracked go/bin/evolve (gitops.go:774) — the very binary all five trust hooks resolve first. Every manual ship silently degrades the kernel to the stale tracked fallback until a rebuild. Observed live twice on 2026-07-12; undocumented anywhere.
More verified drift (queued: docs-drift-sweep-2) — ship-classes doc table omits trivial; release step order reversed in docs; docs/release-protocol.md is referenced but does not exist; sandbox.allow_network=false is silently forced true for worktree phases.

How it got built

Ship-gate v8.13.0 ended a five-cycle parser-bypass arms race; the commit-gate’s bash runner was deleted only after a differential test proved the Go port byte-identical; the release CI hard-gate exists because a release once shipped on red CI. Every door out of the repo has a story about someone (usually an agent) trying to walk around it.

Generated by /evo:explain · verified against code 2026-07-13 (file:line citations) · doc drift found during verification is queued in .evolve/inbox (docs-code-alignment-2026-07 campaign).