Netscan and the crawler both declined their own turn when the wiring was
nil, and the question fell through to the search leg. "какие устройства в
сети?" came back as a paragraph about routers in general, and a question
about his own LAN went to an upstream engine — the personal boundary
exists to stop exactly that. A URL he named came back answered as though
he had not named it.
Both now claim the turn once their own recogniser has matched, and say
which capability is missing: net_off and page_off in the query family.
TestQueryWebPassesWhenNotConfigured encoded the old decision, that
announcing a configuration status is only for a capability that exists and
failed. It is rewritten, not deleted: the gap is the answer now.
The summaries family is spoken by internal/memory, internal/morning and
internal/tasks. internal/phraser already imports internal/memory, so the
deck cannot stay in phraser without a cycle.
internal/say is a leaf: embed, json, math/rand, strings, sync. The four
phraser families keep their files and their floors and now call say.Load,
*say.Deck, Text, Matches, Variants, RequirePlaceholder and RegisterFloor.
No copy changed and no behaviour changed.
What a query source says when it answers from something other than the model,
and what it says when it has nothing. Two dozen of them lived in
actions_query.go alone.
Every gap keeps its own entry. "The feeds are not configured", "the search
failed" and "I do not know" are different truths, and one variant set would let
them answer for each other. The personal boundary and the refusal to re-ask a
question for another day are fixed: both are load-bearing wording.
query_unknown is not the phraser fallback that reads the same. Here she looked
and found nothing; there she failed to phrase an answer she had.