Repository navigation
Closed
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)kind/bugSomething isn't working (prefixed form of the classic bug label)Something isn't working (prefixed form of the classic bug label)priority/normalOrdinary priority (the default)Ordinary priority (the default)queue/queuedHas a queued task in the Supabase agent queueHas a queued task in the Supabase agent queuesource/creatorFiled by the new-issue-creator jobFiled by the new-issue-creator jobstatus/needs-triageNot yet triaged; needs a first lookNot yet triaged; needs a first looktask/small-fixQueue packet kind: bounded fix with reproduction and targeted testsQueue packet kind: bounded fix with reproduction and targeted tests
Description
id(shell-contract): the directory client frame (PR #4954) is missing from the shell contract — contract test red on main
Evidence
Verified on the laptop at origin/main 27f12c6 (also failing at eef89b9), file-captured log /tmp/scan20b.log:
cargo test -p id --lib -- every_client_frame_variant
test shell_contract::tests::every_client_frame_variant_is_in_the_contract_and_nothing_else_is ... FAILED
panicked at src/shell_contract/tests.rs:127:5:
assertion `left == right` failed
left (client_frame_variants()): { …, "directory", … } (34 variants)
right (contract client_frames): { … } (33 — no "directory")
pkgs/id/src/world_session/types.rs:149—ClientFrame::Directory {}exists on main. It was added by commit 4007821 ("id: world directory feed — presence counts + public directory frame (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)"), merged via PR id: world directory feed — presence counts + public directory frame (#812) #4954.pkgs/id/contract/shell-contract.v1.json— contains zero occurrences of"directory"(grep-verified): the new frame was never added to the contract.pkgs/id/web/src/shell-contract.tslikewise has nodirectoryentry.pkgs/id/src/shell_contract/tests.rs:125-128— the test asserts the contract's client-frame set equals theClientFramevariant set exactly, so the drift is a hard failure on main.
Why it matters
The shell contract is the shared source of truth between the Rust host and shell/web clients: a frame the host accepts but the contract does not name is invisible to contract-driven clients (they cannot build or validate a directory request), and the permanently red test on main masks other regressions in the same suite.
Acceptance criteria
shell-contract.v1.jsongains adirectoryclient-frame spec whose fields match theDirectory {}frame and its handler's expectations (no admin token; see the frame's doc comment inworld_session/types.rs), andshell-contract.tsis regenerated/updated to match if it is derived from the JSON.cargo test -p id --lib shell_contractpasses on main.- No other frame specs change.
Metadata
Metadata
Assignees
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)kind/bugSomething isn't working (prefixed form of the classic bug label)Something isn't working (prefixed form of the classic bug label)priority/normalOrdinary priority (the default)Ordinary priority (the default)queue/queuedHas a queued task in the Supabase agent queueHas a queued task in the Supabase agent queuesource/creatorFiled by the new-issue-creator jobFiled by the new-issue-creator jobstatus/needs-triageNot yet triaged; needs a first lookNot yet triaged; needs a first looktask/small-fixQueue packet kind: bounded fix with reproduction and targeted testsQueue packet kind: bounded fix with reproduction and targeted tests
Activity
dezren39 commentedon Nov 3, 2026
🤖 Agent note · filed
directoryclient frame added by PR id: world directory feed — presence counts + public directory frame (#812) #4954 has no entry in shell-contract.v1.json. Queued as a small-fix packet for the queue lane.directoryframe per the frame's handler semantics andcargo test -p id --lib shell_contractpasses on main.Merge pull request #5159 from developing-today/fix/5020-shell-contrac…
dezren39 commentedon Nov 3, 2026
Fixed in PR #5159 (merged 9102135).
The contract now names the frame the code has emitted since #4954:
directoryadded tocontract/shell-contract.v1.jsonas classquery, phases[opening],opens: closed, no fields — matching the hub handler inworld_session/mod.rs(answersWorldsand returns; no admin token; joined sessions reject it). Additive change, sorevisionbumped 4 -> 5 per the contract's own rule.web/src/shell-contract.tsneeded no edit: it reads this JSON at runtime, so the JSON is the single source.Verified on the laptop at the fix commit:
cargo test -p id --lib shell_contract— 8 passed / 0 failed (was: variant set assertion failed, 34 code variants vs 33 contract frames).Merge pull request #5168 from developing-today/fix/5020-contract-revi…
dezren39 commentedon Nov 3, 2026
Follow-up landed in PR #5168: bumping the contract revision to 5 turned one hard-coded expectation red —
commands::world::tests::the_contract_check_reports_conformance_or_every_violationasserts the conformance message literally, and the message formatsv{version}.{revision}from the live contract. The literal now reads v1.5; the named test passes on the laptop.fix(id): bump the shell contract revision to 6 for the merged resume …