The design invariants are the load-bearing rules every Verbs and dog upholds — the small set of guarantees that keep the command language unambiguous and the store safe. The goal is to state them in one place so a change that would break one is easy to spot. The method: a handful of write-path, branching, and resolution invariants, plus the open edges still being settled; the per-verb pages and Store carry the detail, this page carries the contract.
The write path has exactly one commit-maker and one ref-writer, a linear first-parent spine, and a strict fast-forward rule, so history stays simple and safe.
refs row but never a commit.! picks parent/foster, named-sha rows → picked.!: trailing ! is POST's forget modifier, so the parse stays unambiguous (dirty words).Branches are cheap one-row entries, speculative work forks preventively, and one store backs many worktrees, with detach the one explicit escape hatch.
be put ?./A creates it, be get ?./A enters it..be at the primary (see Worktree).?<sha> checkout with no branch detaches, and POST and PATCH refuse on a detached wt.URI shape alone fixes the resource, remotes are cached unless a transport scheme is named, projectors never mutate, and git peers see a flat byte-faithful namespace.
//host reads cached refs only; scheme://host opens the wire (the cache refresh, see Store).main.A few cross-cutting contracts are still unsettled; the per-verb pages carry their own TBDs, this section the architectural ones.
git mergetool adapter.picked <sha> is settled (a commit header next to foster, dedup-only); a path-scoped <sha>:<path> extension is still TBD.refs into one commit is still TODO.?* orders parents-before-children over the delta DAG; the bare be head summary output format is still TBD.