Home / Projects / Orchestrata Ultimate / Decisions / ADR index / ADR-0105
ADR-0105: The components branch pushes only after the affected-test gate learns the packages/** layout — a 345-commit push is not shipped past the gate with --no-verify
| field | value |
|---|---|
| Status | Accepted — Accepted (ruling, Mohamed, 2026-10-18, on the push-decision prompt, verbatim: "Remediate the gate, then push") |
| Date | 2026-10-18 |
| Register | factory (docs/adr, 4-digit ids) |
| Source | docs/adr/0105-the-components-branch-pushes-only-after-the-affected-test-gate-learns-the-packages-layout-a-345-commit-push-is-not-shipped-past-the-gate-with-no-verify.md — permalink at 7328a1d12 (unchanged on master since that commit) |
| Wiki register entry | ADR-0105 (wiki status: Accepted) |
The record
Status: Accepted (ruling, Mohamed, 2026-10-18, on the push-decision prompt, verbatim: "Remediate the gate, then push") · Date: 2026-10-18
Context
Session 271 (2026-10-18), Mohamed's instruction: "clean up and push" on the wt-components project.
The cleanup completed in five commits (chore gov/out ignore cd59b9b97; VOLKS lift v11 landing
5d8265be5; SPEC-AUDIT reverify evidence 028993f1d; WIKI toolchain scripts 0822e643f;
session context/docs sync 191765874) and the working tree is clean. The branch components
(HEAD 191765874) is 345 commits ahead of origin/master, has never been pushed, and no
origin/components exists.
The push is blocked, and every push path to it is blocked by the same finding:
git push origin componentsruns the pre-push hook (scripts/hooks/pre-push), which runsuv run python scripts/run_tests.py --affected origin/master...HEAD. The affected resolver (scripts/affected_tests.py) reports 7,176 changed files as UNTESTED, andrun_tests.py --affectedreturns 1 on any untested file (fail-closed,_UNTESTED_IS_NOT_A_FULL_SUITE). Git aborts the push (failed to push some refs).deploy/ship.sh(the sanctioned push path) measures its blast radius from the last verified tree (reports/.ship-verified→8a413deed, 2026-10-14) and runs the SAMErun_tests.py --affected <base>— 7,178 UNTESTED from that base. The run-evidence-reuse skip cannot fire because no green run exists at this source id. Both paths are blocked identically.
UNTESTED breakdown (range origin/master...HEAD), by subtree:
| Subtree | Files |
|---|---|
| packages/kernel | 2,742 |
| packages/contracts | 1,388 |
| packages/volks | 828 |
| packages/governance | 806 |
| packages/knowledge_graph | 502 |
| packages/design-scripts | 475 |
| packages/session | 234 |
| packages/gateway | 175 |
| .dsh/skills (symlink tree, 15 links) | 15 |
| packages/review-tools | 10 |
| packages/tools | 1 |
By extension: 6,505 .py, 568 .json, 22 .toml, 20 .mmd, and a tail of lock/err/feature/
xml/gitignore files.
Root cause: the affected-selection model predates the multi-package layout. Only top-level
src/ and tests/ are recognized coverage homes. The component lift (ADR-0103, VK-01 scaffold)
lands components under packages/<pkg>/** with parity suites under packages/<pkg>/tests
(measured on disk: contracts 128, kernel 298, governance 164, knowledge_graph 120, session 78,
volks 220 test files) that run in per-package venvs — each packages/<pkg>/pyproject.toml is its
own uv project, and the root pyproject.toml declares none of them as dependencies, so the root
runner cannot even collect those suites. The gate therefore cannot see any of the packages'
verification: component-wave parity reports (volks v11: parity PASS 32/32), lander records,
per-package test runs, import_each.py. No pushed commit on origin/master ever touched
packages/** — there is no precedent to follow.
Decision (proposed)
The components branch pushes only after the affected-test gate learns the packages/** layout.
A 345-commit push is NOT shipped past the gate with --no-verify. The gate extension is a
bounded packet:
- an
affected_testsresolution source mappingpackages/<pkg>/**to the package's own parity test tree (which genuinely covers it); - a runner seam so
run_tests.pyexecutes per-package suites in the package's own venv (or a root wrapper the runner invokes and verifies) — the parity suites are not collectable under the root venv today; - manifest rules for the machine-inert artifact classes: the
.dsh/skillssymlink tree → a link-tree test;.realize-outledgers and design JSONs;packages/*/uv.lock→ the lock parity check VK-01 already claims; - then verify via
deploy/ship.shand push. Until the packet is green, the branch stays unpushed; the five cleanup commits remain on it.
Alternatives rejected
git push --no-verifynow (bare bypass): ships 340+ commits without the gate ever passing on the range. The UNTESTED stop is fail-closed by design, and the ship.sh doctrine'sPUSH_NO_VERIFYis sanctioned only because "this IS the hook's work, already done" — here the hook's work has not been done. Bypass would also leave the gate gap in place for every future packages/** commit.- 6,505 root-level wrapper tests (one per UNTESTED file under
tests/): padding tests that assert nothing real, against the ≥90%-coverage and real-assertions doctrine. - Declaring
packages/**doc-inert: a false claim — they are code with real suites.
Consequences
origin/masterand prod are untouched either way; the components branch simply stays local until the gate packet lands.- The gate packet itself is verifiable without a push: running
run_tests.py --affectedafter the extension proves the selection resolves, and the parity suites run in their own venvs. - After the first green ship, ship.sh stamps the verified source id and subsequent pushes bound their range from it, per the recorded-run design.
Provenance
- Mohamed's instruction, session 271, 2026-10-18: "clean up and push"; ruling on the Proposed record the same day, verbatim: "Remediate the gate, then push".
- Gate output measured the same day:
run_tests.py --affectedreturns 1 on 7,176 UNTESTED files (rangeorigin/master...HEAD) and 7,178 (range from last verified tree8a413deed). - Mechanism citations:
scripts/hooks/pre-push;scripts/affected_tests.py(_UNTESTED_IS_NOT_A_FULL_SUITE, manifestplans/affected-tests-manifest.json);scripts/run_tests.py§2b (untested → return 1);deploy/ship.sh(blast radius from the last verified tree, PUSH_NO_VERIFY rationale).
Related ADRs
- Also mentioned: ADR-0103
Rulings cited
None.
Specs cited
None (or no spec page exists for the ones named).