# The first destination number Measured 2026-08-08 on the classifier cascade with the ONNX multilingual embedder, the configuration homesrv runs. `make t PKG=./internal/router/eval/ RUN=TestONNXBaseline V=1`. Covers V-659, the follow-up V-655 named. ## What was measured V-655 split a routing decision in two. The cascade sorts an utterance into one of seven intents, and `Decision.Source` then says where the answer lives. The first half had a fixture. The second half arrived with none, so twelve destinations shipped with no accuracy number. `want_source` is now a field on `eval.Case`. It is a pointer, because the destination has three states and a bare string has two. Absent is every intent but query, which never reaches `queryWalk`. Present and empty is the `SourceUnknown` contract: name nothing and let the daemon walk the chain. Present and named is a destination the route must produce. Thirty-three of the ninety-six cases carry one. A destination miss does not fail the case, so `Accuracy` and `IntentAccuracy` mean what they meant. `SourceAccuracy` is a second number over the labelled cases only. ## Result Intent is **73/96 (76.0%)**, against 69/91 (75.8%) before. Four of the five new cases pass and no existing case moved. Destination is **12/33 (36.4%)**, and the split is the whole finding. | destination | scored | note | |---|---|---| | world | 5/5 | `WorldQueryGrammars` names it at stage 0 | | the `SourceUnknown` floor | 5/7 | the two misses lost the intent first | | calendar | 2/6 | `calendar-query` names it, the possessive agenda rules do not | | recall | 0/15 | nothing anywhere names it | Recall is the number to move. Fifteen cases ask about his own words and his own facts. The route lands `query` on eleven of them and the destination comes back empty every time. Those turns are answered today, because the daemon walks the chain in order and the three recall passes are early in it. What is missing is a decider that says so, and that is the fourth head on V-546. Two cases labelled the floor lost their intent before a destination was possible. A clarify names nothing, so it would satisfy an empty label for free. `Score` requires the route to land the case's intent before it credits a destination hit, or the floor label would score itself. ## Seven cases assert the floor, and five of them cluster The five are homelab operations. `SourceRecall`, `SourceNetwork` and `SourceAttention` overlap on every question about the box, because `mavpoll` writes its netdata and uptime-kuma observations into the fact store recall reads. "почему сервер тормозит" is answerable from all three. Naming one takes the other two off the turn. That is a finding about the enum rather than a gap in the labelling. The floor is the right answer there and the fixture now says so out loud. All seven were written by an agent and confirmed by the owner on 08-08-2026. ## A drift the labelling found `WorldQueryGrammars` went into `buildRouter` with V-655 and never into `baselineGrammars`, the fixture's mirror of it. So the fixture was scoring a grammar set the daemon does not run. The comment above that function forbids exactly that. Adding it moved the destination number from 9/33 to 12/33 and moved nothing else. The three cases it recovered are `что такое TCP?`, `сколько будет 17 на 23?` and `кто такой Линус Торвальдс?`. All three already routed `query` through `NarrativeQueryGrammars`. So the drift was invisible to every number this fixture reported, until the destination had one of its own. ## What this does not measure The model arm. This is the classifier cascade, which names a destination only where a stage 0 rule filled one in. The resident model has no destination in its router prompt yet, so 36.4% is a floor and not a comparison. Two pairs of cases are the same utterance. `ru-query-020` and `ru-query-024` are both "что дальше?", and `ru-query-021` and `ru-query-025` are both "расскажи про битву при Ватерлоо". They differ in tags and note only, so both pairs are counted twice here and in every earlier number this fixture reported.