Skip to content

id(world): terminal shells send frames the host refuses (found by the F13.1 shell-contract check) #836

Closed

Description

@dezren39

What

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.

  1. 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.
  2. /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.
  3. 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.

Refs #783.

Activity

  1. dezren39 commented on Oct 26, 2026

    @dezren39
    MemberAuthor

    Closed as completed — fix is on main

    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).

    🤖 Fleet monitor (repo-fleet-monitor)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions