command: ["timeout", "-k", "10", "1800", "node", "--test", "/home/jwoltje/.t3/worktrees/mosaic-stack/magica-row329/packages/bus/tests/web.test.mjs"]
TMPDIR: /mnt/storage/scratch/tmp/BWvWeH
begin: {"utc": "2026-10-24T21:31:51.279+00:00", "load1": "2.77"}
launch nice: 19
✔ web.search: a granted role gets labelled results, and the call is trailed with role, run, verb and query (22.397513ms)
✔ web.fetch: a granted role gets the page as labelled text, and the call is trailed with the url (28.030362ms)
✔ a role without the grant is refused, the refusal is logged with the verb, and nothing is fetched (19.857784ms)
✔ a broker with no web service refuses a granted role (14.84118ms)
✔ bad requests are refused: unknown verb, extra or missing argument, not a string, a human or reader session (18.067065ms)
✔ a session that is not the role holder is refused (13.023035ms)
✔ web.mjs's fences hold on the broker side: refusals are normal results with the fixed reason (39.913102ms)
✔ web.search with no search source configured is a refused result, not an error (14.422159ms)
✔ a search source that fails with its own refusal, or that throws, is handled (18.276761ms)
✔ a slow search source ends in a refusal at the deadline (65.055292ms)
✔ a secret in the arguments is refused before anything is trailed or fetched (13.916963ms)
✔ over the socket: the server routes web verbs to the service; other roles are refused; no service is web-not-configured (69.694453ms)
✔ busBusiness: the web grant comes from "web" in the resolved tool limit (0.282283ms)
✔ webServices: the business's search-source plug-in and web.searxng var make web.search work; without either it is refused as not configured (55.50822ms)
✔ an ungranted call is refused at once: no admission, no wait, nothing touched (17.707781ms)
✔ over the socket an ungranted caller is dropped by the server timeout and a granted one gets the longer wait (339.602135ms)
✔ a search that never answers is aborted at the deadline, the module sees the signal, and the call is trailed as refused (timeout) (74.739872ms)
✔ a fetch that stalls is cut off at the deadline: the request is destroyed, not left running (97.228728ms)
✔ one query limit: over SEARCH_MAX_QUERY_CHARS or empty is refused with the same reason before any backend, and the tool schema carries the same number (19.007701ms)
ℹ tests 19
ℹ suites 0
ℹ pass 19
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1042.857687
