model-router
Deterministically assigns every ticket a model tier and ladder mode from the ticket DAG and ledger history, with no LLM calls.
model-router
ADLC phase: P2 Decompose · Gate: every ticket routes to a model tier justified by its rail density and DAG float.
What it defends against
Picking a model per ticket by vibe leaves the seams showing: a cheap model on an
unrailed, hard-to-verify ticket, or a frontier model burned on slack work.
model-router reads the ticket DAG's rail density and critical-path float, plus
per-model first-pass rates mined from the manifest ledger, and emits a
deterministic tier + mode for every ticket. The same inputs always produce
the same routing.
Usage
adlc model-router [--tickets <path>] [--floor <number>] [--json]| Flag | Default | Description |
|---|---|---|
--tickets <path> | .adlc/tickets.json | Path to the tickets file. |
--floor <0-1> | 0.2 | Minimum rail density for cheap-tier assignment; below it a ticket is forced to frontier and flagged as a P3 finding. |
--json | off | Machine-readable output: { assignments, p3Findings }. |
Assignment is rule-based: contract/spec/architecture categories (or any
ticket below the rail-density floor) route to frontier/direct; critical-path
tickets (float === 0) skip the ladder; tickets with slack start cheap and
ladder up on gate failure.
Exit codes
Example
$ adlc model-router
id tier mode railDensity float reason
---------------------------------------------------------------
AUTH-1 cheap ladder 1.000 3 float=3 → ladder starting at 'cheap' (railDensity=1.000)
AUTH-2 frontier direct 0.000 0 category 'spec' requires frontier model
exit 0Go deeper
preflight
Batches every environment and permission check the agent fleet needs into one pass before fan-out, so failures front-load instead of stalling mid-flight.
merge-forecast
Predicts merge conflicts before any agent runs, certifies the safe fan-out width, and emits a foundation-first merge schedule.