Docs menu

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.