Fork half of cinny #318 (the "host doesn't follow the call frame" part).
After a homeserver stall the frame shows "Connection lost · You were disconnected from the call · Reconnect", but the Lotus host kept showing the call as joined: call bar, mute/deafen, soundboard. None of those did anything any more.
Change (GroupCallErrorBoundary / ErrorPage), while the error page is mounted:
it reports io.lotus.call_error { code, recoverable } to the host, and { code: null } when the page goes away. recoverable covers ConnectionLost, LivekitConnection and PeerConnectionTimeout errors;
it accepts io.lotus.reconnect (allow-listed in LOTUS_TO_WIDGET_ACTIONS), which runs the page's own Reconnect / Try again. It does nothing for non-recoverable errors.
Hosts that don't send or handle these are unaffected.
Verified with a local build in Lotus (with the cinny half), freezing Synapse mid-call:
The frame shows "Connection lost" at 25 s, and the host's call bar shows "Call disconnected" at the same moment.
After SIGCONT the host sends io.lotus.reconnect once sync is back, and the call rejoins within 5 s.
The lotusActions test lists are updated. All src/lotus tests and GroupCallErrorBoundary tests pass (135). tsc and oxlint are clean.
Fork half of cinny #318 (the "host doesn't follow the call frame" part).
After a homeserver stall the frame shows **"Connection lost · You were disconnected from the call · Reconnect"**, but the Lotus host kept showing the call as joined: call bar, mute/deafen, soundboard. None of those did anything any more.
**Change** (`GroupCallErrorBoundary` / `ErrorPage`), while the error page is mounted:
- it reports **`io.lotus.call_error { code, recoverable }`** to the host, and `{ code: null }` when the page goes away. `recoverable` covers ConnectionLost, LivekitConnection and PeerConnectionTimeout errors;
- it accepts **`io.lotus.reconnect`** (allow-listed in `LOTUS_TO_WIDGET_ACTIONS`), which runs the page's own Reconnect / Try again. It does nothing for non-recoverable errors.
Hosts that don't send or handle these are unaffected.
**Verified** with a local build in Lotus (with the cinny half), freezing Synapse mid-call:
- The frame shows "Connection lost" at 25 s, and the host's call bar shows "Call disconnected" at the same moment.
- After `SIGCONT` the host sends `io.lotus.reconnect` once sync is back, and the call rejoins within 5 s.
The `lotusActions` test lists are updated. All `src/lotus` tests and `GroupCallErrorBoundary` tests pass (135). `tsc` and oxlint are clean.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
After a homeserver stall the frame shows "Connection lost · Reconnect"
while the host kept showing the call as joined, with controls that did
nothing. While the error page is up, report io.lotus.call_error
{ code, recoverable } (and { code: null } when it clears), and accept
io.lotus.reconnect to run the page's own Reconnect / Try again.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Fork half of cinny #318 (the "host doesn't follow the call frame" part).
After a homeserver stall the frame shows "Connection lost · You were disconnected from the call · Reconnect", but the Lotus host kept showing the call as joined: call bar, mute/deafen, soundboard. None of those did anything any more.
Change (
GroupCallErrorBoundary/ErrorPage), while the error page is mounted:io.lotus.call_error { code, recoverable }to the host, and{ code: null }when the page goes away.recoverablecovers ConnectionLost, LivekitConnection and PeerConnectionTimeout errors;io.lotus.reconnect(allow-listed inLOTUS_TO_WIDGET_ACTIONS), which runs the page's own Reconnect / Try again. It does nothing for non-recoverable errors.Hosts that don't send or handle these are unaffected.
Verified with a local build in Lotus (with the cinny half), freezing Synapse mid-call:
SIGCONTthe host sendsio.lotus.reconnectonce sync is back, and the call rejoins within 5 s.The
lotusActionstest lists are updated. Allsrc/lotustests andGroupCallErrorBoundarytests pass (135).tscand oxlint are clean.🤖 Generated with Claude Code
https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
After a homeserver stall the frame shows "Connection lost · Reconnect" while the host kept showing the call as joined, with controls that did nothing. While the error page is up, report io.lotus.call_error { code, recoverable } (and { code: null } when it clears), and accept io.lotus.reconnect to run the page's own Reconnect / Try again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5