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
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
this refinement. Interactive sessions negotiate `lazaret-control/2` through
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-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-23** | Each interactive Client Session shall use the retained-screen refinement defined in **Retained terminal presentation**. |
### 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-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-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-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. |