| name | route |
| description | The suite's front door: classify a request into one of five lanes AND read the tier from the sizing artifact — emit pipeline + tier together. Depth is a routing output, not a brain judgment (ADR-0002). Trigger: a "which pipeline / where do I start / what process for this" question, or an ambiguous ask whose right path is unclear. |
Route v2 — pipeline + tier, together
Route names the ordered pipeline (which entry points, in what order) AND the tier
(vote count, probe set, independence) in one output. The source suite's doctrine —
"router = what pipeline; brain = how deep" — is reversed here: depth is sized by
tables at routing time, per docs/adr/0002-router-sizes-depth.md. Route recommends
and hands control back; it never dispatches and never hard-blocks.
Step 1 — read the tier (never estimate it)
bash ${CLAUDE_PLUGIN_ROOT}/hooks/lib/sizing.sh
cat .maestro/evidence/<diffhash>/sizing.json
No diff exists yet (pure question / greenfield ask) → use the lane's tier floor from
the table below, and re-run the hook once a diff exists; the computed tier then
replaces the floor if higher.
| Tier | Countable condition (any) | Votes | Probe depth |
|---|
| T1 | ≤2 files, no presence flags, fan-in below threshold | 1 | table probes for touched claim types |
| T2 | 3+ files or moderate fan-in, no irreversibility flag | 3 | + dependents probe per changed symbol |
| T3 | migration/schema/auth/payment/deletion/public-API flag, or high fan-in | 5 | + independent-agent probe; pinned countersign for any waiver |
Step 2 — classify the lane
Intent verb picks the row; sizing flags override upward:
- understand / audit / review / why → analysis · broken / bug / error / crash /
wrong-output → bugfix · build / add / implement / create / feature / design /
refactor → change-or-feature · health / tech-debt / production-ready / roadmap
→ health. ("Fix" follows its object: fix a crash → lane 3; fix a typo with no
behavioral failure → lane 2.)
- Any presence flag in sizing.json (migration, schema, auth, payments, deletion,
public API) → the lane escalates to lane 4. Flags are counted by the hook, never felt.
- A change crossing a documented seam in
docs/architecture/ → lane 4.
| Lane | When | Pipeline (in order) | Tier floor |
|---|
| 1 · Analysis | understand/audit/review, no change verb | maestro:deep-analysis → docs/deep-analysis/ | T1 |
| 2 · Trivial change | change verb AND computed tier T1 AND zero flags | maestro:implement → verify → maestro:regression | T1 |
| 3 · Bug fix | broken/error/crash | debug → fix → verify → maestro:regression → scribe incident | T2 |
| 4 · Feature / high-risk | build/feature/design, OR any lane that trips a flag or seam | prd-builder → architect → taskmanager (plan → run) → verify → maestro:regression | T3 |
| 5 · Health | health/tech-debt/roadmap | maestro:deep-analysis → roadmap → re-enter (each item re-classifies through lanes 2/3/4) | T1 |
Effective tier = max(lane floor, sizing.json tier). The tier only moves up
(the escalation ladder is a one-way ratchet); no prompt may lower it.
Lanes 1 vs 5 share the deep-analysis first step: pick 1 to stop at the findings;
pick 5 only when a re-entering roadmap is the ask.
Two stamps on every lane
- Read
docs/ first: STATUS.md, the relevant docs/architecture/, the open
docs/adr/. docs/ absent → say so and point to scribe:init.
- The tier rides the recommendation.
adversarial-verify and regression READ
their vote count and probe set from sizing.json — they no longer size themselves.
Conflicting signals
- Any flag set → the flag wins; lane 4, no exceptions.
- Zero flags and thin signals → lane 2, plus the named escalation condition printed
with the route ("if this touches the
orders→billing seam, re-route to lane 4").
What route never does
- Never dispatches or hard-blocks — the real gates (evidence-bundle commit/stop
gates, taskmanager's done-gate) stay downstream.
- Never invents a tier —
sizing.json is the only source; artifact missing → run
the hook, never guess.
- Never re-detects "is this a feature?" — it names existing entry points and
composes with their triggers.