Specify retained terminal presentation

This commit is contained in:
ms2k 2026-08-03 21:47:27 +09:00
commit ea463a6ca7

View file

@ -614,6 +614,42 @@ Interactive terminal control requires:
Disconnected Client Sessions close rather than reattach to an unbounded scrollback Disconnected Client Sessions close rather than reattach to an unbounded scrollback
owned by the coordinator. owned by the coordinator.
#### Retained terminal presentation
The application model owns terminal-route transitions. Their retained-screen
physical refinement is:
```mermaid
flowchart LR
Guest[Sandbox PTY output]
Buffer[Kernel PTY buffering]
Screen[HC retained screen]
Client[Paired Client terminal]
Trusted[Prompt or HostProcess presentation]
Guest -->|Sandbox route| Screen
Screen -->|derived rendering| Client
Guest -.->|Prompt or HostProcess route: reads paused| Buffer
Trusted --> Client
Trusted -->|return to Sandbox| Restore[redraw retained screen]
Restore --> Client
Buffer -->|resume in byte order| Screen
```
- The retained screen belongs to the existing fixed Host Coordinator and Client
Session pair. Existing Session Terminal cleanup discards it and any partial
input-decoder state; another Client cannot attach to or adopt it.
- Prompt and HostProcess presentation does not mutate the retained sandbox
screen. Returning to `Sandbox` restores that screen without guest input,
signals, resize, or application redraw.
- Requester-controlled bytes render inertly with argument boundaries preserved.
Approval defaults to denial and uses a bounded, fragmentation-independent
escape-sequence interval; incomplete, ambiguous, pre-prompt, interrupted, or
lost input cannot approve.
- The guest terminal profile exposes only qualified parser, renderer,
key-translation, and terminal-reply behavior. Replies derive from retained
state rather than the physical Client terminal.
The session connection carries the terminal events and messages described by The session connection carries the terminal events and messages described by
this refinement. Interactive sessions negotiate `lazaret-control/2` through this refinement. Interactive sessions negotiate `lazaret-control/2` through
TLS ALPN before any version-specific record is decoded. A new Client refuses an TLS ALPN before any version-specific record is decoded. A new Client refuses an
@ -1224,6 +1260,7 @@ not duplicated here.
| **FR-20** | Physical network readiness shall use product-owned known-live targets. DNS, public egress, and configured destination availability shall not gate it. | | **FR-20** | Physical network readiness shall use product-owned known-live targets. DNS, public egress, and configured destination availability shall not gate it. |
| **FR-21** | The Domain Store and Storage Catalog shall preserve the independently recoverable ownership, identities, and authority relationships described by the durable-generation and prepared-lower refinements. | | **FR-21** | The Domain Store and Storage Catalog shall preserve the independently recoverable ownership, identities, and authority relationships described by the durable-generation and prepared-lower refinements. |
| **FR-22** | Preparation shall use a supported OCI-aware preparer that materialises a Lazaret-owned immutable rootfs with source identity and prepared-artifact ID. | | **FR-22** | Preparation shall use a supported OCI-aware preparer that materialises a Lazaret-owned immutable rootfs with source identity and prepared-artifact ID. |
| **FR-23** | Each interactive Client Session shall use the retained-screen refinement defined in **Retained terminal presentation**. |
### 4.3 Developer-Experience Requirements ### 4.3 Developer-Experience Requirements
@ -1232,7 +1269,7 @@ not duplicated here.
| **DX-1** | `lazaret <profile>` shall launch the explicitly named Agent Profile in the current workspace and start `/bin/bash` as a new interactive Client Session. A trailing `-- <command> [arguments...]` shall replace that default with the exact supplied argument vector. | | **DX-1** | `lazaret <profile>` shall launch the explicitly named Agent Profile in the current workspace and start `/bin/bash` as a new interactive Client Session. A trailing `-- <command> [arguments...]` shall replace that default with the exact supplied argument vector. |
| **DX-2** | Tools installed in configured persistent sandbox paths and dependencies stored in Ignored Workspace State shall remain available on later launches of the same Domain. | | **DX-2** | Tools installed in configured persistent sandbox paths and dependencies stored in Ignored Workspace State shall remain available on later launches of the same Domain. |
| **DX-3** | Normal source editing, `git status`, staging, committing, and reference updates shall work from inside the Agent Sandbox. | | **DX-3** | Normal source editing, `git status`, staging, committing, and reference updates shall work from inside the Agent Sandbox. |
| **DX-4** | Escalation prompts shall identify the requesting profile, session, command, and justification without mixing terminal input or output between sessions. | | **DX-4** | Escalation prompts shall show the requester, command, and justification, with explicit approve and deny actions. |
| **DX-5** | Failures shall report actionable diagnostics and shall not leave the developer's terminal in a corrupted mode. | | **DX-5** | Failures shall report actionable diagnostics and shall not leave the developer's terminal in a corrupted mode. |
| **DX-6** | State inspection shall provide human-readable and machine-readable output without exposing persisted file contents by default, and reset shall show its resolved Domain and exact scope before confirmation. | | **DX-6** | State inspection shall provide human-readable and machine-readable output without exposing persisted file contents by default, and reset shall show its resolved Domain and exact scope before confirmation. |