ADLC
Toolkit

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.

The ADLC lifecycle, with P2 highlighted. Read the theory for P2

What it defends against

F8: Coherence loss (theory ↗)

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]
FlagDefaultDescription
--tickets <path>.adlc/tickets.jsonPath to the tickets file.
--floor <0-1>0.2Minimum rail density for cheap-tier assignment; below it a ticket is forced to frontier and flagged as a P3 finding.
--jsonoffMachine-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

0: gate passes. All tickets assigned.1: operational error (bad tickets file, JSON parse error, cycle in the DAG).2: gate fails. One or more non-frontier-category tickets fall below the rail-density floor.

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 0

Go deeper

packages/model-router

On this page