27 lines
1.4 KiB
Markdown
27 lines
1.4 KiB
Markdown
# 0004: A bounded runtime actor owns each PTY
|
|
|
|
Status: accepted for the first local runtime slice.
|
|
|
|
The desktop UI never owns or directly polls `PtySession`. A single runtime
|
|
actor owns the PTY, child process, input ordering, resize ordering, output
|
|
sequence, and process-tree cleanup. Its command and event channels are bounded,
|
|
so a slow UI produces explicit backpressure instead of unbounded transcript
|
|
memory.
|
|
|
|
The first implementation runs this actor on a dedicated thread in the GPUI
|
|
process. That is an implementation step, not the final deployment boundary. The
|
|
commands and events remain free of GPUI types so they can move behind the
|
|
versioned local IPC connection when the standalone `lumbridge-runtime` process
|
|
arrives. Process-local session IDs are correlation IDs only; durable IDs are
|
|
assigned by the persisted runtime protocol later.
|
|
|
|
Runtime events contain ordered raw PTY bytes. The UI spike may line-frame plain
|
|
fixture output for display, but ANSI/VT parsing, screen state, cursor behavior,
|
|
scrollback, and terminal input modes belong to `lumbridge-terminal`. The UI must
|
|
not infer terminal semantics from raw strings.
|
|
|
|
Dropping the UI-side actor disconnects its bounded channels, releases an actor
|
|
blocked by event backpressure, terminates the process group through
|
|
`lumbridge-pty`, and joins the actor thread. Tests use only synthetic shell
|
|
fixtures and never provider credentials or real transcripts.
|