feat(web): add the web stacklet with SearXNG search - #97
Conversation
|
Verified on the live rig.
Refusals name the obstacle, including the reddit drift found in #96:
Lifecycle - Config verified against the image, not from memory. Tests: 81 framework web tests, 4 e2e, all green. |
|
Follow-up commit after a landscape survey of agent web access. Three things it turned up that bear on this PR: 1. The image needed pinning, and the audit that should have caught it had a hole. SearXNG carried three builds on 2026-09-15 alone, and each one changes which upstream engines work - chasing other people's bot detection is the project's whole job. Now pinned to The repo already has 2. Only two engines actually answer. Measured on the running instance: Google's web engine and Bing ship 3. Also recorded in the plan, affecting Phase 4 rather than this PR: Scrapling dropped Camoufox entirely at v0.3.13, which inverts the plan's open decision - Camoufox's Lane: 6 e2e green. Pin tests: 6 green. |
An optional stacklet runs SearXNG on the family's own hardware, so a search reaches upstream engines from the instance rather than from a signed-in browser. This is not anonymity and the documentation says so. stack web search queries it from the terminal, and a search page is served on the LAN. stack web fetch reads a single page through the same ladder the archivist uses. The stacklet is opt-in. Link capture does not require it. Refs docs/design/web/plan.md (phase 2).
SearXNG publishes several builds a day and each changes which upstream
engines respond, so an unpinned image made search behaviour vary between
restarts.
Few engines answer on a default install: the Google web engine and Bing
ship disabled upstream, and Startpage is behind a captcha. Losing one
more leaves search returning fewer results rather than an error, which
is invisible to the family. The search lane now fails when fewer than
two engines respond, and nothing reads number_of_results, which the API
does not populate.
The compose audit also treated image: repo/name:${VAR:-latest} as
pinned, because the literal tag is not the word "latest".
a44548a to
56781e9
Compare
89d3ea5 to
a721c7e
Compare
Stacked on #96 - review that one first; this PR's diff is against it.
Adds the optional
webstacklet. SearXNG runs on the family's own hardware, so a search reaches upstream engines as a query from the house rather than from a logged-in browser. Not anonymity, and the docs say so.stack web searchneeds the stacklet up.stack web fetchdoes not, and that split is the point: link capture never needed a container, so a family that never searches downloads none of it.Phase 2 of
docs/design/web/plan.md.