Skip to content

id(web): a hosted world can't be viewed without an interactive guest join — add a host view #2144

Closed

Description

@dezren39

From the 2026-10-29 screenshot walkthrough of id serve --web:

A hosted world cannot actually be viewed from the web UI without interactive choreography. The /world page renders a pre-join lobby shell ("Not connected"): viewing anything requires pasting a guest capability into the join form interactively, and the Records panel reads {} unless a world program (Roc/Wasm module) has been installed into the world and a guest session has joined and written records. There is no host-side view of a world this node is already serving.

Gaps to close:

  • A node that hosts a world (serve --world, optionally --world-module) should be able to display that world's live view and records in its own web UI without minting and pasting a guest capability by hand — the host is already trusted locally.
  • Installing a world program into a world should have a discoverable path (CLI at minimum, documented; web UI ideally), so "the world is empty" is a state a user can act on rather than a dead end.

Design questions to answer in triage:

  • What is the intended viewing model for a hosted world — is the guest-join flow meant to be the only door, with the host view a convenience, or should a hosted world render server-side by default?
  • What does the world program's output surface look like when rendered for the host (same program view as guests see, plus host-only panels)?

Related: #2057 (world-VM Wasm portability audit) touches the runtime, not this serving/viewing gap. Walkthrough notes: ~/workspace/id-walkthrough/NOTES.md (screenshot 07-world.png shows the pre-join shell).

Activity

  1. added
    kind/featureNew feature or capability request
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Oct 29, 2026
  2. developing-today commented on Oct 29, 2026

    @developing-today
    Contributor
  3. added
    source/humanFiled directly by a human
    priority/normalOrdinary priority (the default)
    queue/queuedHas a queued task in the Supabase agent queue
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    effort/mMedium: expected under 1 day of work
    on Oct 29, 2026
  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 1, 2026
  5. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  6. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    Triage verdict (verified against current main e6577a96d)

    Viewing model: keep capability-gated guest join as the external guest path, and add an explicit authenticated host/owner view as a convenience for the operator. Do not make /world visitors hosts by default or mint/use a guest capability to render the host's own world. Start with a read-only host view of authoritative program output and records; the host should not appear as a guest participant.

    Evidence: web/src/world.ts:288-314,606 only connects with a stored/pasted guest capability and sends a join frame; src/world_session/mod.rs:1058-1067 validates that join through the guest capability.

    Program installation: the requested path already exists: id world install is a CLI subcommand (src/cli.rs:1434-1454), documented in examples/roc-counter/README.md:33-43, and the web UI has Wasm/Roc install controls (src/web/templates.rs:806-823). The web controls are tucked under “Host: create a guest invite,” so the follow-up will give them a distinct install/update section and an actionable no-program state rather than create another install mechanism.

    Scoped implementation follow-up: #3378. It keeps listener/bindings (#2145), program-as-website routing (#2146), and dynamic publish (#2147) out of scope.

    🤖 Agent note · triaged — host/guest model answered and follow-up scoped

  7. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  8. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

  9. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: triaged → closed (superseded by its own implementation issue)
    Agent: queue worker (repo-worker-code), OpenChamber scheduled lane 02cafe76
    Found via: queue claim (task 7847, triage)

    The 2026-11-01 triage of this issue answered its design questions and handed the implementation to #3378 (id(web): explicit host view and actionable program-install state). That follow-up is live and still open, so this origin issue no longer needs to be the tracker.

    Fresh evidence (2026-11-03):

    Closing as superseded by #3378. Reopen only if the remaining install path needs the broader design discussion from this body.

  10. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: triaged (coverage pass)
    Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
    Found via: coverage pass 2026-11-03

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/mMedium: expected under 1 day of workkind/featureNew feature or capability requestpriority/normalOrdinary priority (the default)queue/queuedHas a queued task in the Supabase agent queuesource/humanFiled directly by a humanstatus/needs-triageNot yet triaged; needs a first looktask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions