Home / Projects / Orchestrata Ultimate / Decisions / ADR index / ADR-0100
ADR-0100: Model review and the Prolog gate run once per slice at hand-back and once per batch, not on every commit; the deterministic gates stay per commit
| field | value |
|---|---|
| Status | Superseded — Superseded by ADR-0101 (accepted 2026-10-13 18:40 by ruling, verbatim: "agreed, next"; superseded the same evening because its Context described a hook chain git commit does not run, see ADR-0101) |
| Date | 2026-10-13 |
| Register | factory (docs/adr, 4-digit ids) |
| Source | docs/adr/0100-model-review-and-the-prolog-gate-run-once-per-slice-at-hand-back-and-once-per-batch-not-on-every-commit-the-deterministic-gates-stay-per-commit.md — permalink at c3752887b (unchanged on master since that commit) |
| Wiki register entry | ADR-0100 (wiki status: Superseded) |
The record
Status: Superseded by ADR-0101 (accepted 2026-10-13 18:40 by ruling, verbatim: "agreed, next"; superseded the same evening because its Context described a hook chain git commit does not run, see ADR-0101) · Date: 2026-10-13 · Amends the per-commit placement of two hooks in .pre-commit-config.yaml (unified-code-review, prolog-gate); keeps ADR-0001's enforcement boundary (committed worktree state is what is judged) by moving the judgement to the two points where a slice's committed state is final
Context
Every commit in orchestrata-ultimate runs fifteen pre-commit hooks. Thirteen are deterministic and fast (ruff format and check, mypy, architecture checker, Prolog boundary, doc-truth lint, undeclared-dependency check, generated-artifacts gate, type-hint ratchet, traces lint, requirement-id format, two pyright ratchets, RUL-007 attribution). Two are not:
| Hook | What it does | Measured on 2026-10-13 |
|---|---|---|
unified-code-review (code-review.py) |
three model reviews of the diff | the daemon-publish builder: "3 reviews, no blocking findings" per real commit; every builder today made WIP checkpoints with --no-verify to avoid paying it mid-slice and paid it once at the end |
prolog-gate (scripts/gate.py run) |
the Key-Rule gate over the whole tree | the sync-fix builder: "exceeded the 280 s limit and was killed" |
The effect is that the per-commit boundary is bypassed for every intermediate commit and enforced once anyway, at the last commit of the slice, where it costs minutes on a builder's critical path and still reviews the whole slice diff. Since ADR-0036 (codetools) the integration proof is a batch gate run per master fast-forward; orchestrata's deploy/ship-merge-master.sh is its equivalent point.
Decision (proposed)
- Deterministic gates stay per commit: the thirteen fast hooks, plus the git sentinel and RUL-007, run on every commit as now;
--no-verifyremains forbidden for them (a builder that cannot pass them stops). - Model review runs once per slice, at hand-back, on the slice's full diff against its merge base, by the coordinator's review step before
ship-merge-master.sh; its findings go to the slice's builder (fix-in-slice) and its verdict line into the slice's iteration-log row. A slice is not shipped with an open blocking finding. - The Prolog gate runs once per batch, on master after each fast-forward, by the ship script (or the batch gate when it lands for orchestrata), with its ledger row; a red gate bisects by the merge list as ADR-0036 rule 2 does.
- Nothing loosens for the judged state: what is reviewed and gated is still committed state (ADR-0001); what changes is when, from every checkpoint to the two points where the slice is final.
Alternatives rejected
- Keep both per commit and forbid
--no-verify. Every checkpoint pays minutes; builders stop checkpointing, which loses recoverable state (the daemon-publish slice recovered from a WIP checkpoint today). - Cache the review by diff hash. Helps repeated identical diffs only; a slice's diff changes at every checkpoint.
- Drop the model review. It found real defects this year; the change is placement, not existence.
Consequences
.pre-commit-config.yamlloses two entries;deploy/ship-merge-master.shgains the gate run; ascripts/review_slice.py(or the existingcode-review.pywith a--range) is the hand-back review.- Builder briefs' DONE WHEN drop "through the real pre-commit" for review and gate and gain "review verdict attached at hand-back".
- The per-commit clock drops to the deterministic set (seconds); the per-slice clock pays the review once, off the builder's path.
Provenance
Builder reports of 2026-10-13 (daemon-publish, sync-fix, MCP) quoted in Context; .pre-commit-config.yaml at master c6f7472ac; Mohamed, 2026-10-13: "think, what can we improve in the workflow" → "do the four mechanical ones, mint the two adrs". Drafted by the coordinating session.
Related ADRs
Rulings cited
- RUL-007: RUL-007 — No AI attribution in commits, tags, or PRs
Specs cited
None (or no spec page exists for the ones named).