Repository navigation
Open
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)effort/lLarge: multi-day or open-ended; expect staged check-insLarge: multi-day or open-ended; expect staged check-inskind/featureNew feature or capability requestNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedmode/onlineFully doable remotely: design, config, code, cloudFully doable remotely: design, config, code, cloudpriority/lowNice to have; do when convenientNice to have; do when convenientsource/creatorFiled by the new-issue-creator jobFiled by the new-issue-creator jobtask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this item
Description
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 andid world listsharing one serializer."pkgs/id/src/commands/world.rs:519-532:id world list --jsonbuilds an inlinejson!withname,open,default— no presence counts, no web directory, no shared serializer.pkgs/id/src/world_hub.rs:135-140:WorldInfo.openmeans "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.mdline 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])(inworld_hub.rsor similar) and renameopentoloadedwhere 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 listrender 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.
Metadata
Metadata
Assignees
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)effort/lLarge: multi-day or open-ended; expect staged check-insLarge: multi-day or open-ended; expect staged check-inskind/featureNew feature or capability requestNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedmode/onlineFully doable remotely: design, config, code, cloudFully doable remotely: design, config, code, cloudpriority/lowNice to have; do when convenientNice to have; do when convenientsource/creatorFiled by the new-issue-creator jobFiled by the new-issue-creator jobtask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this item
Activity
docs(id): Phase 14 plan — close-out: finish, measure, verify, open th…
dezren39 commentedon Oct 26, 2026
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, andWorldInfo.openmeans 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
opentouches existing consumers ofWorldInfo; 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.
dezren39 commentedon Oct 27, 2026
🤖 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/idunchanged since1bf2afb2). All material claims still hold:id world list --jsonis still an inlinejson!({name, open, default})in the command handler (pkgs/id/src/commands/world.rs:646-676); no shared serializer exists (directory_jsonappears nowhere inpkgs/id/src).--admin-tokenrequired (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).WorldInfois exactly{name, open}(pkgs/id/src/world_hub.rs:135-140).openstill means loaded-in-memory, not open-to-join (world_hub.rs:138;WorldHub::listatworld_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 fromhub.list()viaweb/routes.rs:333). It is not a counterexample to this issue: it rendersWorldInfodirectly 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'stype/default/firstname, but no test asserts the CLI--jsonshape,opensemantics, or presence.Verdict from the #1077 audit: directory row = partial, remainder = this issue. No change to scope or acceptance criteria.
dezren39 commentedon Oct 28, 2026
🤖 Agent note · picked up
77 remaining items
dezren39 commentedon Nov 3, 2026
agent-note:v1
dezren39 commentedon Nov 3, 2026
🤖 Agent note · parked
Merge pull request #4954 from developing-today/queue/7685-812-presenc…
dezren39 commentedon Nov 3, 2026
🤖 Agent note · done
awaiting_cicheckpoint: re-checked PR id: world directory feed — presence counts + public directory frame (#812) #4954 fresh —production line limit (2500)check SUCCESS, mergeable/clean, Codex review failed to run on usage limits with zero inline findings (disposition posted on PR id: world directory feed — presence counts + public directory frame (#812) #4954) — and merged it.79ce0d4f21ba86e2e8d38e815fdd8c8c27bc57df. Issue 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 stays open: the remaining per-user visibility toggles / true-name opt-in plumbing is design work explicitly excluded from task 7685.queue/7685-812-presence-directory