# Does the ZIM answer when the line is down? (V-508)

Measured 2026-08-05 on the deploy, through `POST /api/chat`. The question was
`что такое фотосинтез` in every run. Which source claimed is read off
`voice: query claimed by source` and off the badge V-539 added.

## It fires, and it is fast when the host is gone

`docker stop searxng`, then one question:

| | Claimed by | Turn |
|---|---|---|
| Search reachable | search | 3.5 s |
| Container stopped | kiwix | 3.5 s |
| Host blackholed | kiwix | 15.4 s |

With the container stopped, DNS failed and the ZIM answered inside the same
second:

```
15:40:51 voice: search "что такое фотосинтез": ... lookup searxng: no such host
15:40:51 voice: kiwix: "photosynthesis" → 5 hits, top "Photosynthesis"
15:40:53 voice: query claimed by source "kiwix"
```

The rewrite, the search and the reply all fit in the same turn budget as a live
search. The fallback works.

## The blackhole is the case that hurts

192.0.2.1 is reserved and routed nowhere. Pointing `search.url` at it is the
shape of a real outage: the router drops the packet instead of refusing it. The
search sat for its full 8-second budget before the ZIM was asked. The turn took
15.4 seconds against 3.5. He waits through all of it with nothing
being said.

Fixed by capping the connect phase alone at 1.5 s (`dialTimeout` in
`internal/websearch/searxng.go`). The instance is on the LAN, so a connection it
will ever accept is accepted in milliseconds. A reachable instance that is
merely slow still gets the whole 8 seconds. It is fanning out to real engines,
which is worth waiting for.

## The Russian ZIM is now on the box and is read directly

`wikipedia_ru_all_maxi_2026-02` (41 GB) was copied to the kiwix zims directory
and kiwix-serve picked it up. Note that the catalog name is derived from the
filename. `books.name=wikipedia_ru_all_maxi_2026-02` returns Фотосинтез,
С4-фотосинтез and Википедия. The `<name>` field in the catalog says
`wikipedia_ru_all`, which returns nothing.

A Cyrillic question now searches that book verbatim (`book_ru` in the `kiwix`
block). The rewriter was never a feature. An English ZIM cannot match a Russian
sentence, so the resident model translated the question into English keywords
first. That costs a model call. It also drops whatever the keywords do not carry.
Against a Russian book it is a translation of his own words back at him.

## Not measured here

- The Russian book answering a driven turn. The `book_ru` field is a binary
  change, so it needs a rebuild the owner runs. The book itself was verified by
  querying kiwix-serve directly.
- Recall against the Russian book compared with the rewrite path. Reading his
  own language directly should win, and it was not scored.
- `ru.stackoverflow.com_mul_all_2026-02.zim` is still in the staging directory
  and is wired to nothing.
