Skip to content

id(ssh): input and presentation designs #535

Closed

Description

@dezren39

What and why

Designs for how SSH (and other terminal) sessions take input and present worlds, beyond the raw default and cmd: line mode that shipped in #211. Each needs a design, or a research package where marked, before implementation. Ticked when its design is committed and an implementation issue exists. Not tracked: D1-049 (two SSH channels on one connection), which both reports say not to build until a real client exists.

Items

Each box is done when the design (or research package) is committed and an implementation issue is linked here.

  • D1-040 — Documents as a session frame pair (web/CLI parity) (M, design)
    Move /documents and /document from an SSH-local blob read to a documents/document ClientFrame/ServerFrame pair in world_session.rs, like records, so web and CLI clients can read world documents too.
  • D1-045 — In-session command toggle (prefix key + visible mode indicator) (M, research package)
    While in raw mode, a prefix key (Ctrl-P or ~ Enter) opens a command prompt line with a visible indicator; /quit or the prefix returns to raw. Only if users ask for it.
  • D1-046 — Split UI on one PTY (world grid + pinned command row, focus routing) (L, research package)
    The server draws the world region plus a pinned bottom command row, and keystrokes route by focus; buffered output to the command region enables server-side autocomplete mid-game. The web client already has this shape (separate chat form).
    • Status: not started. No region or focus state in pkgs/id/src/world_ssh.rs; the web split exists (RPT cites pkgs/id/web/src/world.ts:524-533 chat form).
    • Source: REF:88-93 (shape 1); RPT §5 shape 1; RPT §7 Step 3.2
    • Prerequisites: id(ssh): incremental (diff) ANSI renderer instead of full clear-repaint #562 — D1-044 Incremental (diff) ANSI renderer instead of full clear-repaint, D1-045 In-session command toggle (prefix key + visible mode indicator) (in this list)
  • D1-048 — Roc partial-line surface: non-journaled 'viewer is typing' notification to guests (L, design)
    Pass the viewer's partial line to the program so a Roc app can render live autocomplete or a validating form. It is a new guest-facing surface and needs its own design: which event carries it, that it is never journaled, and its bounds.
    • Status: not started. Guests receive only committed Input bytes and System events (RPT cites sandbox.rs:677-685); no typing event kind exists in WorldEventKind.
    • Source: REF:161-164; RPT §5 'Extended to Roc apps'; RPT §7 Step 3.4
    • Prerequisites: D1-046 Split UI on one PTY (world grid + pinned command row, focus routing) (in this list), id: Phase 12 designs to run through the research workflow #534 (tracking issue) — D1-025 F12.7 Versioned guest ABI spec, plaza_abi_version export, conformance suite
  • D1-052 — Presentation capability tiers with in-band terminal detection (ghostty-class default) (XL, design)
    Target ghostty/kitty/wezterm as tier 1 (kitty keyboard protocol, kitty graphics or sixel, synchronized output DEC 2026, high fps), xterm-class as tier 2 (escape-timeout keys, cell grid, batching and diff rendering), and line mode as tier 3. Detection is in-band (XTGETTCAP, CSI ? u, DECRQM), so it works the same over SSH and iroh.
  • D1-053 — Kitty keyboard protocol on the raw input path (M, design)
    Negotiate the kitty keyboard protocol (CSI > u) where supported, so Escape vs Alt is unambiguous and key events go beyond the legacy byte stream; extend Key.parse and the browser encoder to match.
    • Status: not started. Key.parse decodes legacy sequences only (pkgs/id/examples/roc-world/Key.roc; RPT §2 lists the tag union). No negotiation in world_ssh.rs.
    • Source: RPT §14 Tier 1 and last paragraph
    • Prerequisites: D1-052 Presentation capability tiers with in-band terminal detection (ghostty-class default) (in this list)

Source

  • REF:106-112, 135-149 (shape 3, triggers)
  • REF:161-164
  • REF:88-93 (shape 1)
  • RPT §12 Later
  • RPT §14 (all)
  • RPT §14 Tier 1 and last paragraph
  • RPT §16 Q3
  • RPT §16 Q4
  • RPT §16 Q6
  • RPT §5 'Extended to Roc apps'
  • RPT §5 shape 1
  • RPT §7 Step 1 'Decision to record'
  • RPT §7 Step 3.1
  • RPT §7 Step 3.2
  • RPT §7 Step 3.4

RPT = doc/2026-10-18T18-40-00Z_report_platform_world_state/2026-10-18T18-40-00Z_report_platform_world_state.md, REF = doc/2026-10-18T00-00-00Z_reference_platform_state/2026-10-18T00-00-00Z_reference_platform_state.md. Both are uncommitted reports in the platform-world-apps-migration worktree.

Size

XL overall (items M to XL)

Prerequisites

Listed per item above.

Acceptance criteria

  • Every item listed above has its design (or research package, where marked) committed to the repo
  • Every item has a linked implementation issue, and its checkbox above is ticked only once both are true
  • No item is closed out on the basis of a plan or report reference alone — the committed artifact is the evidence

Activity

  1. dezren39 commented on Oct 24, 2026

    @dezren39
    MemberAuthor

    id train triage (2026-10-24): needs-decision — project owner: D1-052/D1-053 are now designed in #791 (F13.4 #786 / F13.5 #787); the remaining D1-040/045/046/048 (documents frame pair, in-session toggle, split UI, partial-line surface) have no home.

  2. added
    kind/featureNew feature or capability request
    source/humanFiled directly by a human
    priority/normalOrdinary priority (the default)
    effort/lLarge: multi-day or open-ended; expect staged check-ins
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    and removed
    enhancementNew feature or request
    on Oct 26, 2026
  3. dezren39 commented on Oct 26, 2026

    @dezren39
    MemberAuthor

    Intake review

    Verified as an open design tracker on main 14dd66b6 (2026-10-26, fleet monitor). SSH input/presentation designs (documents as a session frame pair, in-session command toggle, and further items in the body); the body's per-item statuses report not-started and nothing in the tree contradicts that — documents handling is still SSH-local rather than a world_session frame pair. No acceptance-criteria section existed, so one has been appended (original body preserved verbatim above it), following the per-item rule the body states.

    Related: item prerequisites name #548 and #546 — both should be enriched/checked before any item here is picked up.

    Risks / suggested approach: these are designs first, code second: each item needs its design (or research package, where marked) committed and an implementation issue linked before implementation starts. The command-toggle item is explicitly demand-gated in the body ("only if users ask for it") — leave it parked until that signal exists.

  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Nov 1, 2026
  5. 8 remaining items

  6. added
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 1, 2026
  7. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    Picked up — task 4819, lane C shift 2026-11-01 09:55 CST.

    Working the unblocked pair from #535: the D1-040 design (documents/document frame pair in world_session.rs, modelled on records) and the D1-045 research package (in-session command toggle). Design/research artifacts only — no implementation code changes, per the task scope. Delivery: laptop worktree branch + PR; the D1-040 implementation issue gets filed and linked here, and the D1-045 demand-gate verdict recorded here.

  8. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    D1-045 research package delivered — demand-gate verdict: NOT MET (task 4819, lane C).

    The research package is committed in PR #3760: doc/2026-11-01T16-06-00Z_research_in_session_command_toggle/ — it decides the trigger (~+Enter, OpenSSH escape semantics, ~~ for a literal tilde), the visible mode indicator (in-band prompt line; a pinned row would invert the D1-046 dependency), the return paths (~+Enter toggles back, /return, /quit still quits the session), and names the guest-repaint as the main implementation risk (prototype first, via the existing Resize repaint precedent).

    Gate assessment: this item is conditioned on "only if users ask for it". Searched 2026-11-01: repo issue search for "command toggle" and "prefix key" returns only #535 itself; #535's comments hold no user request; the idea's only origin is the internal design report (RPT §7 Step 3.1), which proposed it conditionally — a proposal is not a request. Verdict: gate not met. Per the task acceptance, no implementation issue is filed and the D1-045 checkbox stays unticked. The gate is met when a request from an actual SSH-client user is on the record; the package then files the implementation issue with no further research needed.

  9. added a commit that references this issue on Nov 1, 2026
  10. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    Done — task 4819, lane C shift 2026-11-01.

  11. added
    queue/queuedHas a queued task in the Supabase agent queue
    and removed
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    on Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)effort/lLarge: multi-day or open-ended; expect staged check-inskind/featureNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)queue/queuedHas a queued task in the Supabase agent queuesource/humanFiled directly by a humanstatus:done

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions