Operate
Troubleshooting
invalid_request means the frame is malformed, non-UTF-8, truncated, over 1 MiB,
or a validated field exceeds its limit. Split input writes, reduce metadata or
environment size, and send one newline-delimited JSON object per frame.
resource_exhausted means the 1,024-session daemon limit was reached. Delete old
sessions after retaining required evidence. JoyMux has no automatic retention or
disk quota in protocol v1.
The same code is returned when all 256 socket connection slots are occupied. Idle or partial clients are closed after 30 seconds without a complete frame. Reuse a connection sequentially or close it promptly after a response.
internal with database is locked means another writer held SQLite beyond the
five-second busy timeout. Read-only, full, or corrupt storage also surfaces as an
error; JoyMux does not silently replace the database. Preserve it before repair.
If a subscriber reports lag, call read_events with the last durable sequence.
The live buffer holds 256 events, while committed events remain in SQLite. Reads
return at most 10,000 entries, so advance the sequence and repeat. A slow consumer
does not directly block the process; persistence throughput ultimately can.
JoyMux sends SIGTERM then SIGKILL after 750 ms for subprocess cancellation. Timeout uses SIGKILL. A daemon SIGKILL can leave children alive until restart recovery; configure automatic restart. PID reuse between daemon death and recovery is a known residual risk because v1 persists a numeric process-group ID.
Derived text uses lossy UTF-8 and optional redaction. Only read_output is
byte-exact; compare its chunk sequences with replay when investigating evidence.