Skip to content

feat(os): model & effort routing policy as data + ADR-0017 (M16 16.1)#257

Merged
danielPoloWork merged 1 commit into
mainfrom
feat/m16-1-routing-policy
Jul 9, 2026
Merged

feat(os): model & effort routing policy as data + ADR-0017 (M16 16.1)#257
danielPoloWork merged 1 commit into
mainfrom
feat/m16-1-routing-policy

Conversation

@danielPoloWork

Copy link
Copy Markdown
Owner

Closes #252 (M16 16.1). Plan: .issues/M16-model-effort-routing-milestone.md (#256). ADR: ADR-0017.

What

The eighth OS spec, orchestrator/os/routing/ — "which model, how much effort?" as
policy-as-data instead of a manual per-issue judgment.

  • routing.yaml + _schema.md — work signals (tracker labels + the asserted
    sets-pattern / decision-heavy flags) resolve by monotonic escalation: start at the
    cheapest floor (fast/low), every matched rule raises to at least its
    min_tier/min_effort, final = max. Rules never lower — the same only-add-never-relax
    principle as domain overlays; deterministic and order-independent.
  • Tiers, not model names. Rules speak fast/standard/frontier-reasoning; names live
    only in the dated catalog: (today, Claude Code: Sonnet 5 / Opus 4.8 / Fable 5) with
    per-host effort_aliases ("ultracode" → max). Model churn = a catalog edit + refreshed
    as_of:, never a policy/code change. Precedent: risk-weights-as-data (feat(risk): risk-model weights as per-domain data in risk.yaml (M6 6.2 / F3) #79), ADR-0009.
  • The tier call ships as a M14: examples: blocks — judgment-laden guidance as validated knowledge-as-data #224 worked-example decision surface (6 cases seeded from the
    maintainer-reviewed M15 assessment), registered in eados_lint EXAMPLE_FILES — the only code
    touch (one tuple entry).
  • ADR-0017 records the posture: advisory-first, human keeps final model authority
    (RFC-0001); auto-application only for delegated subagent work (lands with 16.4/[16.4] Auto-apply routing where the host allows: delegated subagent work carries model + effort #255).
  • Docs: os/README.md spec table, AGENTS.md §4 spec list, ADR index, CHANGELOG [Unreleased].

One deliberate deviation from the issue letter

#252 sketched a separate models.yaml; the catalog is instead a top-level catalog: key of
routing.yaml
, because os-spec-completeness schema-validates only the <spec>.yaml
instance — a sibling file would get parse-checking but no schema keys. Folding it keeps the
whole policy under the strongest existing gate. Same data, better perimeter.

Verification

  • eados_lint.py self-lint: OK (os-spec-completeness auto-discovered the new spec; os/**
    gate-coverage pattern already applies — no registry change needed).
  • Full discovered suite: 46/46 OK (run_all.py), incl. test_examples over the new block.
  • Differential parse: yamlmini.load_yaml vs PyYAML safe_load on routing.yaml
    structurally identical (incl. quoted as_of staying a string in both).
  • Referential integrity (rules→tiers/efforts/flags, every host maps every tier) is documented as
    _schema.md invariants; loud enforcement lands with the 16.2 evaluator ([16.2] tools/route_advice.py — pure evaluator: issue signals → recommended tier + effort + rationale #253) per the ADR.

🤖 Generated with Claude Code

Closes #252.

New eighth OS spec orchestrator/os/routing/: work signals (tracker
labels + sets-pattern/decision-heavy flags) escalate monotonically from
a cheapest floor to a capability tier (fast/standard/frontier-reasoning)
and an OS-neutral effort (low-max). Model names live only in the dated
catalog (tiers-not-names); the tier call ships as a #224 worked-example
decision surface registered under the examples gate. Advisory-first per
RFC-0001: the human keeps final model authority.

- os/routing/_schema.md + routing.yaml (auto-discovered by
  os-spec-completeness; os/** gate-coverage already applies)
- eados_lint EXAMPLE_FILES += routing.yaml
- ADR-0017 + index row; os/README spec table; AGENTS.md spec list;
  CHANGELOG [Unreleased]

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@danielPoloWork danielPoloWork added enhancement New feature or request adr Requires or records an ADR labels Jul 9, 2026
@danielPoloWork danielPoloWork self-assigned this Jul 9, 2026
@danielPoloWork danielPoloWork marked this pull request as ready for review July 9, 2026 20:28
@danielPoloWork danielPoloWork merged commit c3798f0 into main Jul 9, 2026
2 checks passed
@danielPoloWork danielPoloWork deleted the feat/m16-1-routing-policy branch July 9, 2026 20:28
danielPoloWork added a commit that referenced this pull request Jul 9, 2026
…rd (#260)

The owner enriched the M15 backfill table (Title/Model/Effort columns,
ultracode spelled as the Claude Code alias of max); on top: status ->
in progress, a delivery record (16.1 #257 / 16.2 #258 merged, 16.3 #259
open, 16.4 queued on M15 #239), and the backfill marked APPLIED
2026-07-09 (owner-approved; Routing: lines written to #234-#250).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

adr Requires or records an ADR enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[16.1] Routing policy as data + ADR: work signals → model tier & effort (tiers, not model names)

1 participant