Skip to content

id phase-10: the world directory feed was not built — id world list --json is admin-only, has no presence counts, and 'open' means loaded-in-memory #812

Open

Description

@dezren39

Finding

The Phase 10 sketch ("World directory feeds and portals": a browsable directory of worlds a node serves and knows, with names, presence counts, open/closed, and the web UI and id world list sharing one serializer) was not built. What exists is an inline admin-only JSON list that does not match the sketch, and the gap is untracked.

Evidence

  • .opencode/plans/phase-9-portable-platform.md §10 sketch: "World directory feeds and portals. A browsable directory of worlds a node serves and knows (names, presence counts, open/closed), with the web UI and id world list sharing one serializer."
  • pkgs/id/src/commands/world.rs:519-532: id world list --json builds an inline json! with name, open, default — no presence counts, no web directory, no shared serializer.
  • pkgs/id/src/world_hub.rs:135-140: WorldInfo.open means "currently loaded in memory", not "open to join".
  • The command requires --admin-token (admin-only), so it is not a browsable directory.
  • No test asserts the JSON shape beyond test_cli_parse_world_roles_and_list_json (parse only).
  • Phase 11 plan .opencode/plans/phase-11-foundations.md line 84 lists "the directory feed" as still open; no issue tracks it (searches for "directory feed", "presence count", "world list json" return nothing).

Why it matters

The directory feed is the discovery surface for worlds-as-places (Phase 10's theme). Without presence counts and a public feed it does not meet the sketch, and the Phase 12 directory-feed work has no issue to build on.

Suggested scope (for the implementer to plan)

  • Move the serializer into a shared pub fn directory_json(&[WorldInfo]) (in world_hub.rs or similar) and rename open to loaded where it means in-memory.
  • Decide and design presence counting and a public (non-admin) feed: who may read it, and how to count presence without opening idle worlds.
  • Add a unit test of the serializer shape and an e2e check of the public feed once designed.

Acceptance criteria

  • A world directory feed exists listing the worlds a node serves and knows, with names, presence counts, and an open/closed state whose semantics mean "open to join" (not "loaded in memory").
  • The web UI directory and id world list render from one shared serializer (no inline per-surface JSON).
  • The directory is browsable without --admin-token (any auth boundary is deliberate and documented).
  • Tests assert the feed's JSON shape beyond CLI parse-only coverage.

Activity

  1. added
    kind/featureNew feature or capability request
    priority/lowNice to have; do when convenient
    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
    on Oct 26, 2026
  2. dezren39 commented on Oct 26, 2026

    @dezren39
    MemberAuthor

    Intake review

    Related: Phase 10 sketch in .opencode/plans/phase-9-portable-platform.md §10; sibling phase-10 gap #811 is tracked separately. No merged PR resolves this — PRs #804/#834 only filed/planned it (verified 2026-10-26).

    Notes: Current state per the filed evidence: id world list --json (pkgs/id/src/commands/world.rs:519-532) is admin-only, inline, has no presence counts, and WorldInfo.open means loaded-in-memory. This is unbuilt feature scope, not a regression; priority low / effort l reflects that. Acceptance criteria appended by this intake pass; original body preserved verbatim above them.

    Risks: Redefining open touches existing consumers of WorldInfo; the shared-serializer refactor can sprawl — stage it (serializer first, then feed semantics, then web UI).

    Suggested approach: Extract the shared serializer, add presence counts and join-open semantics to the feed model, then wire both the CLI and web directory to it.

  3. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · fresh evidence from the #1077 Phase 10 validation, slice 4 (queue task 1258)

    Re-verified this issue's claims against current main @ e71046dc (pkgs/id unchanged since 1bf2afb2). All material claims still hold:

    • id world list --json is still an inline json!({name, open, default}) in the command handler (pkgs/id/src/commands/world.rs:646-676); no shared serializer exists (directory_json appears nowhere in pkgs/id/src).
    • Still admin-only: --admin-token required (pkgs/id/src/cli.rs:1896-1902); the wire handler refuses non-admins (only_an_admin_creates_or_lists_worlds, pkgs/id/src/world_session/tests.rs:1074-1100).
    • Still no presence counts: WorldInfo is exactly {name, open} (pkgs/id/src/world_hub.rs:135-140).
    • open still means loaded-in-memory, not open-to-join (world_hub.rs:138; WorldHub::list at world_hub.rs:602-623).

    One clarification vs the filed evidence: a web "World explorer" surface does exist (pkgs/id/src/web/home.rs:181-206, fed from hub.list() via web/routes.rs:333). It is not a counterexample to this issue: it renders WorldInfo directly as HTML ("open" / "stored; opens on selection") — a second hand-rolled rendering, not the shared serializer the Phase 10 sketch requires, and it has no presence counts either. Test coverage is also marginally better than filed: wire-level tests assert the reply's type/default/first name, but no test asserts the CLI --json shape, open semantics, or presence.

    Verdict from the #1077 audit: directory row = partial, remainder = this issue. No change to scope or acceptance criteria.

  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Oct 28, 2026
  5. dezren39 commented on Oct 28, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  6. 77 remaining items

  7. removed
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 3, 2026
  8. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1

  9. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked

  10. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 3, 2026
  11. added a commit that references this issue on Nov 3, 2026
  12. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

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 addedmode/onlineFully doable remotely: design, config, code, cloudpriority/lowNice to have; do when convenientsource/creatorFiled by the new-issue-creator jobtask/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