Legacy Common Lisp proxy: Woo/libev signal watcher lifecycle aborts across repeated transport fixtures #89

Open
opened 2026-09-20 01:19:23 +00:00 by nsaspy · 0 comments
Owner

Symptom

The packaged Common Lisp forwarding runtime aborts during repeated proxy fixture startup/shutdown:

ev_signal_start: Assertion ("libev: a signal must not be attached to two different loops", ...)
WOO.SIGNAL::START-SIGNAL-WATCHERS

On PR #106 run 35480587993 the ordinary CL method/path, binary body, status, duplicate-header and chunked-stream tests pass first. The next fixture aborts while Woo starts signal watchers for a new loop.

This is the same lifecycle class already observed in the stale #74/#76 scheduler stack. It predates and is independent of current Python HTTP/SSE/WebSocket admission.

Current architecture boundary

Per repository AGENTS/current expert architecture:

  • Python llm_log/ owns current capture/HTTP/SSE/WebSocket transport.
  • Common Lisp owns the expert runtime/Tek9/SWI-Prolog boundary.
  • proxy/ remains a packaged alternate/legacy forwarding runtime but is not the production transport authority for #104.

Required fix

  • isolate Woo signal watchers from per-fixture loop churn, or run one loop/server lifecycle for the contract suite;
  • prove repeated start/stop does not retain signal watcher ownership;
  • retain chunked and large-body transport tests;
  • do not mask a real CL runtime failure as a Python admission failure.

Until fixed, keep this diagnostic visible but do not use it to block unrelated Python transport changes.

## Symptom The packaged Common Lisp forwarding runtime aborts during repeated proxy fixture startup/shutdown: ``` ev_signal_start: Assertion ("libev: a signal must not be attached to two different loops", ...) WOO.SIGNAL::START-SIGNAL-WATCHERS ``` On PR #106 run 35480587993 the ordinary CL method/path, binary body, status, duplicate-header and chunked-stream tests pass first. The next fixture aborts while Woo starts signal watchers for a new loop. This is the same lifecycle class already observed in the stale #74/#76 scheduler stack. It predates and is independent of current Python HTTP/SSE/WebSocket admission. ## Current architecture boundary Per repository AGENTS/current expert architecture: - Python `llm_log/` owns current capture/HTTP/SSE/WebSocket transport. - Common Lisp owns the expert runtime/Tek9/SWI-Prolog boundary. - `proxy/` remains a packaged alternate/legacy forwarding runtime but is not the production transport authority for #104. ## Required fix - isolate Woo signal watchers from per-fixture loop churn, or run one loop/server lifecycle for the contract suite; - prove repeated start/stop does not retain signal watcher ownership; - retain chunked and large-body transport tests; - do not mask a real CL runtime failure as a Python admission failure. Until fixed, keep this diagnostic visible but do not use it to block unrelated Python transport changes.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
nsaspy/llm-log#89
No description provided.