You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
id(world): terminal shells send frames the host refuses (found by the F13.1 shell-contract check) #836
The first run of the new shell-contract conformance check (F13.1, #783) found three places where the terminal shells send frames the host refuses. Each passed the code review that created it: nothing checked a shell against the protocol.
id world join --command-mode sends invalid frames.pump_command_frame (pkgs/id/src/commands/world.rs) sent /stats, /caps and /records without the required capability field, and /documents, /document, /logs and /help as frame types that do not exist (documents, document, logs, help). The host answers invalid world frame to every one of them.
/stats in an SSH cmd: session always fails.world_ssh sends {"type":"info","capability":…} from the joined session and has a renderer for the module_info reply. But handle_client_frame (pkgs/id/src/world_session/mod.rs) answers info with already joined, which also marks the SSH shell as errored. No test covered /stats.
A wide SSH terminal is refused a view. A pty wider than 500 columns or taller than 200 rows produces a resize outside the host's bounds, and the host answers with an error instead of a view. The browser clamps; SSH did not.
Fix (in the F13.1 PR on id/phase-13-impl)
The pump fills in the session capability and answers local-only commands on stderr, so stdout stays a pure JSON frame stream. A test checks every frame it sends against the contract.
The host answers info in the joined phase, authorized by the session's own capability, as it already does for records. The SSH cmd: e2e test now runs /stats.
The SSH shell clamps resize to the contract bounds: width 1..=500, height 1..=200.
Fleet monitor intake verification (2026-10-26) found this already resolved:
Commit 35e9cea9f6107e4835d5220e66bbe2e675fd306b ("feat(id): versioned shell contract v1 with a conformance check (F13.1)") is an ancestor of current main (a2eef6f7, verified with git merge-base --is-ancestor).
Its message explicitly states: "The first conformance run found three terminal-shell bugs, fixed here (id(world): terminal shells send frames the host refuses (found by the F13.1 shell-contract check) #836)" — and names all three: the id world join --command-mode pump sending frames without their capability / with nonexistent frame types; /stats in an SSH cmd: session refused as "already joined" (host now answers info in the joined phase); and wide SSH terminals sending out-of-range resizes (now clamped — current main pkgs/id/src/world_ssh.rs:585-589 clamps width/height to the contract bounds).
Spot checks on current main agree: the clamp is present in world_ssh.rs, and the shell-contract conformance suite from that commit (pkgs/id/src/shell_contract.rs + session contract tests) is in tree.
Closing as completed per the agent lifecycle protocol §5 (merged fix commit on main explicitly resolving the issue).
Activity
feat(id): versioned shell contract v1 with a conformance check (F13.1)
dezren39 commentedon Oct 26, 2026
Closed as completed — fix is on main
Fleet monitor intake verification (2026-10-26) found this already resolved:
35e9cea9f6107e4835d5220e66bbe2e675fd306b("feat(id): versioned shell contract v1 with a conformance check (F13.1)") is an ancestor of current main (a2eef6f7, verified withgit merge-base --is-ancestor).id world join --command-modepump sending frames without their capability / with nonexistent frame types;/statsin an SSHcmd:session refused as "already joined" (host now answersinfoin the joined phase); and wide SSH terminals sending out-of-range resizes (now clamped — current mainpkgs/id/src/world_ssh.rs:585-589clamps width/height to the contract bounds).world_ssh.rs, and the shell-contract conformance suite from that commit (pkgs/id/src/shell_contract.rs+ session contract tests) is in tree.Closing as completed per the agent lifecycle protocol §5 (merged fix commit on main explicitly resolving the issue).
🤖 Fleet monitor (repo-fleet-monitor)