Why this matters
Every research case is supposed to carry a machine-checkable routing.json — the record of how the task was classified and scoped before any analysis. New cases are required to have one. But 19 older cases are grandfathered out via cases/legacy-routing-exempt.txt, so today the case library is split: new work is auditable, old work isn't. That's a blind spot — you can't ask "show me every actionability case that skipped the decision-pressure gate" and trust the answer while a third of the library is exempt.
This issue burns that exemption list down to zero, so the whole library answers routing questions consistently.
What's involved
- Backfill
cases/<id>/routing.json for the 19 exempt cases, removing each from cases/legacy-routing-exempt.txt as it's done.
- Order: any canonical/golden or actively-referenced cases first (highest value), oldest one-off backtests last.
- Each backfill is validated instantly by
just check-case <id> against schemas/routing.schema.json.
- When the list reaches zero, delete the file and the
validate_case_routing exempt branch in validate_repo.py.
Done when
cases/legacy-routing-exempt.txt is empty (then removed), and every case with a memo/evidence-log has a schema-valid routing.json.
just check stays green throughout (it will, since each case is validated as added).
Context
The exempt list was a deliberate grandfather snapshot (PR #51) to avoid turning the schema rollout into a 21-case migration. It doubles as a visible debt counter — this issue is the burndown. See architecture/harness-productization-notes.md (WS1.5 / WS2).
Why this matters
Every research case is supposed to carry a machine-checkable
routing.json— the record of how the task was classified and scoped before any analysis. New cases are required to have one. But 19 older cases are grandfathered out viacases/legacy-routing-exempt.txt, so today the case library is split: new work is auditable, old work isn't. That's a blind spot — you can't ask "show me every actionability case that skipped the decision-pressure gate" and trust the answer while a third of the library is exempt.This issue burns that exemption list down to zero, so the whole library answers routing questions consistently.
What's involved
cases/<id>/routing.jsonfor the 19 exempt cases, removing each fromcases/legacy-routing-exempt.txtas it's done.just check-case <id>againstschemas/routing.schema.json.validate_case_routingexempt branch invalidate_repo.py.Done when
cases/legacy-routing-exempt.txtis empty (then removed), and every case with a memo/evidence-log has a schema-validrouting.json.just checkstays green throughout (it will, since each case is validated as added).Context
The exempt list was a deliberate grandfather snapshot (PR #51) to avoid turning the schema rollout into a 21-case migration. It doubles as a visible debt counter — this issue is the burndown. See
architecture/harness-productization-notes.md(WS1.5 / WS2).