%% View 3c — Runtime flow: a world query, tool-backed.
%% Traced through internal/router/worldquery.go, internal/router/source.go,
%% cmd/mavend/actions_query.go queryWalk + querySources, cmd/mavend/personalboundary.go,
%% cmd/mavend/searchwire.go, cmd/mavend/kiwixwire.go.
%% Shows destination anchoring, which sources are skipped and why, and the
%% four-step fallback to the model's own weights.
sequenceDiagram
autonumber
participant K as Owner
participant H as runTurn
participant R as router cascade
participant QC as actionQuery
participant W as queryWalk
participant LOC as local sources
participant PB as personal boundary
participant SX as SearXNG
participant KX as kiwix-server
participant PH as phraser / resident model
participant REC as decision record
Note over K,H: "что такое TCP?"
K->>H: utterance
H->>R: rt.resolve
R->>R: stage 0 — WorldQueryGrammars matches a literal definition frame
R->>R: d.SourceAnchored = true, set HERE and nowhere else
R-->>H: IntentQuery, Source=SourceWorld, anchored
H->>QC: applyAction → actionQuery
QC->>REC: Expect the full 22-source roster
QC->>W: queryWalk(SourceWorld, anchored=true)
rect rgb(70,40,40)
Note over W: removes ONLY sources with guesses:true whose dest ≠ world
W-->>REC: skipped: attention, list, feeds, home, network, weather, self
W-->>REC: skipped: personal boundary — anchored, so a literal pattern may drop it
Note right of W: a model or a softmax naming SourceWorld
would NOT drop the boundary (V-666)
end
W-->>QC: the sources that LOOK still walk, in table order
loop first source to claim answers the turn
QC->>LOC: fact-by-key, day-plan, habits, tasks, money, history, calendar
LOC-->>QC: no rows → pass
QC->>LOC: embed → memory → notes (vector recall, gated by min score + margin)
LOC-->>QC: below the gate → pass
QC->>PB: personal boundary
PB-->>QC: SKIPPED this turn
QC->>SX: Search(utterance verbatim, max 4)
alt results
SX-->>QC: snippets
QC->>PH: phraseSource("search", utterance, evidence)
PH-->>QC: reply
QC->>REC: claimed by "search", and everyone below is NeverAsked
else empty or unreachable
QC->>KX: ZIM search, ru then en
alt hit
KX-->>QC: article snippet
QC->>PH: phraseSource("kiwix", ...)
else miss
QC->>QC: "web" claims only if he named a URL out loud
QC->>PH: queryGeneral — the model answers from its own weights, LAST
end
end
end
QC-->>H: reply text
H-->>K: spoken or written answer
Note over LOC,SX: What leaves the box is the query string and nothing else.
His notes, his facts, the persona block and the history never travel.
Note over W,PB: With no destination named — the classifier arm sets none —
the whole chain walks in table order. That is the floor.