gitea ed8b271b4e
CI / compile (pull_request) Successful in 9s
CI / unit (pull_request) Successful in 18s
CI / integration (pull_request) Successful in 18s
Gate librarian cog on a full ping round-trip, not a bare GET
The librarian health check was a plain GET to '/', which only proved
Flask was listening - not that the service could actually take a query,
run it through its internal queue+worker, and answer back. So the cog
could load against a librarian whose worker was wedged or that couldn't
reach the bot on the return leg.

Replace it with a ping that travels the SAME path a real search does, on
both sides:
  bot: QueryControl -> OUT_COMM_Q -> scan_queue -> awaiting_q
  librarian: POST /ping -> librarian_queue -> worker pulls it off
             (no Crossref/DOI search) -> pongs back with the same uuid
  bot: /conjurer -> incoming_q -> scan_incoming matches uuid, wakes waiter
The cog enables only when that whole loop closes within 3s. This also
proves the librarian->bot return path, which a GET never did.

Safety: uuid is random per ping; the wait and POST are both bounded so
startup can't stall; a pong that finds no waiter is dropped (never
orphaned into IN_COMM_Q, which would make the cog post a bogus 'no
results' message); and a ping whose pong never returns is swept out of
awaiting_q after PING_TTL_SECONDS so nothing leaks. All awaiting_q writes
stay within scan_queue (append) and scan_incoming (remove) - no locks,
no cross-thread mutation.

Integration tests cover: OK round-trip, timeout when accepted-but-no-pong,
unreachable, non-200, orphan-pong-dropped, and that real results still
reach IN_COMM_Q. Suite: 24 integration + 41 unit green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-01 15:00:04 +02:00
2026-07-21 22:50:57 +02:00
2026-07-28 12:56:14 +02:00
2024-06-19 17:46:38 +02:00
2024-04-10 14:22:00 +02:00
2026-07-31 14:12:42 +02:00
2025-08-20 21:21:15 +02:00
2025-04-09 18:21:37 +01:00
2024-04-28 12:27:29 +02:00
2024-11-14 00:14:49 +01:00
2023-06-05 21:31:57 +02:00
2025-04-19 17:15:11 +02:00
2024-11-11 15:38:32 +01:00
2025-04-19 17:15:11 +02:00
2026-07-31 14:12:42 +02:00
2024-06-19 16:26:48 +01:00
2024-11-10 23:01:00 +00:00
2024-11-11 20:12:47 +00:00
2024-11-14 00:14:49 +01:00
2024-11-14 00:14:49 +01:00

conjurer

Discord.py bot for fun, sex and BDSM Additional line to trigger build.

S
Description
No description provided
Readme Unlicense 23 MiB
Languages
Python 99.6%
Shell 0.3%