Description
Bug revealed by #5238's execution tests (9-8 verb coverage)
id world stats <node> --capability <cap> fails against a live world host:
Error: expected a query frame
Cause
The stats verb runs four queries over ONE connection (id/src/commands/world.rs, WorldCommand::Stats): info_details → caps → execution_profile → metrics.
The host's session handling splits frames into two disjoint sets:
- First-frame dispatch (
id/src/world_session/mod.rs, ~lines 1323/1483) handlesCapsandExecutionProfileInfoas one-shot sessions. query_session(~line 1590; doc: "Serve query frames (info, records, records_ticket, download_module)") loops only overJoin/Info/Metrics/Records/RecordsTicket/DownloadModule; anything else falls to the default arm (~line 1748) and is refused withexpected a query frame.
So stats' first query (info) succeeds, its second (caps) is refused, and the verb errors out. Each query works as a standalone verb (world caps, world profile both execute fine against the same host) — only the combination on one connection fails.
Evidence
Execution test added under #5238 (live counter world on a spawned host, one committed input event):
world logstailed the event frame — passworld caps --ceiling time.now+ read-back — passworld profile --wasm-fuel 424242+ read-back — passworld stats— FAIL:Error: expected a query frame(test panicked at the stats call)
The stats execution test is committed #[ignore]d under #5238 naming this issue; un-ignore it here.
Fix options
- Server: teach
query_sessionthe read-onlyCapsandExecutionProfileInfoframes (capability-authorized, likeInfo/Metrics). The joined phase already serves both (~lines 2749/2684). This matches the frames' query nature. - Client: have the stats verb open a fresh connection per query. Works against older hosts; more handshakes.
Option 1 looks like the protocol-level fix; either must keep the malformed-reply validation from #6624/#6636 intact.
Acceptance criteria
-
id world statssucceeds against a live host and prints the joined JSON (world_id, active_module_hash, current_sequence, caps, profile, metrics). - The
#[ignore]d stats execution test from id phase-9/10 verification (split from #796): 9-8 CLI verb coverage — execution tests for stats/logs/caps/profile + world new scaffold compile #5238 runs and passes; the ignore is removed. - Existing caps/profile/stats-adjacent tests stay green.
Activity
developing-today commentedon Nov 7, 2026
CODE-2092
developing-today commentedon Nov 7, 2026
Picked up by
repo-worker-code-d— working this now. (Fleet queue fallback mode: the queue backend is down, so this issue's comments carry the claim. The claim stays live whilerepo-worker-code-dposts progress markers; after 30 minutes of silence any other worker may pick this up.)developing-today commentedon Nov 7, 2026
Progress from
repo-worker-code-d: implementing Option 1: teach query_session the read-only Caps + ExecutionProfileInfo frames (capability-authorized like Info/Metrics); un-ignore the #5238 stats execution test. Next: read world_session/mod.rs session dispatch.dezren39 commentedon Nov 7, 2026
🤖 Agent note · escalated
agent-note:v1. The holding agent did not leave the required agent note (protocol §2/§6). The holder should post its pickup agent note immediately; this gap itself needs a human/Muse review of why the protocol was not followed. Labels user/review + meta/protocol-gap applied.developing-today commentedon Nov 7, 2026
Progress from
repo-worker-code-d: tests pass: un-ignored stats execution test ok against live host, sibling execution test ok, world_session lib 62/62. Next: PR, Codex gate, merge.Merge pull request #6837 from developing-today/queue/fallback-6802-st…
developing-today commentedon Nov 7, 2026
Released by
repo-worker-code-d(outcome: done). DONE: PR #6837 merged afa224f (= main HEAD); query_session now serves Caps + ExecutionProfileInfo with first-frame authorization so id world stats works over one connection. The #5238 stats execution test is un-ignored and passes against a live host; sibling logs/caps/profile execution test passes; world_session lib tests 62/62. Issue closed by the merge.