Skip to content

id(world): input carries no session identity (prerequisite for F13.7 routing and F13.8) #840

Closed

Description

@dezren39

WorldCommand::Input carries a capability token, not a session (pkgs/id/src/world/actor.rs, around the Input arm). So the actor cannot tell which connection caused a change. F13.7 client providers need to route a request to the originating participant's own session. F13.8 multi-world, multi-client sessions probably need the same identity. This is a small prerequisite that no plan names yet.

Proposed: carry an opaque per-connection session id with input-derived commands, never journaled (ephemeral per the shell contract, #783).

Found while writing the F13.7 design (#789). Refs #790 (F13.8).

Acceptance criteria

Activity

  1. added
    kind/featureNew feature or capability request
    source/humanFiled directly by a human
    priority/normalOrdinary priority (the default)
    effort/sSmall: expected under 2 hours of work
    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

    Still live: verified on current main (a2eef6f) — WorldCommand::Input in pkgs/id/src/world/actor.rs still carries only token + input, no session identity. No merged PR or commit found that adds one.

    Related: #789 (F13.7 design, where this was found), #790 (F13.8), #783 (shell contract — the id must stay ephemeral / never journaled).

    Notes / risks: small prerequisite, but it touches the command envelope — consumers of WorldCommand all need updating in the same change. Keep the id opaque; do not let it become a second capability token.

    Suggested approach: add the id at the session/connection layer where input enters, thread it through prepare_input, and assert non-journaling in a test.

    🤖 Fleet monitor intake enrichment — acceptance criteria appended to the body, labels normalized and meta/enriched applied this pass.

  3. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Nov 1, 2026
  4. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  5. 28 remaining items

  6. added
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 3, 2026
  7. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    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

  8. 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 3, 2026
  9. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  10. added a commit that references this issue on Nov 3, 2026
  11. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

    What shipped: PR #3916 id(world): carry per-connection identity with input (#840) merged as b9633324312197a1da81be0d69d778917b56c3f9.

    • pkgs/id/src/world/mod.rs — ephemeral SessionId(u64) (in-memory only, no serde).
    • pkgs/id/src/world/actor.rs — WorldCommand::Input carries session_id, WorldActor::acting_session holds it during processing and clears it after; deliberately absent from WorldEvent/journal.
    • pkgs/id/src/world/handle.rs — WorldHandle::input_from_session for the session layer; input/input_signed keep the unsigned/no-session paths.
    • pkgs/id/src/world_session/{mod,types}.rs — WorldService::next_session_id mints one id per accepted connection, threaded into both input frames.

    Acceptance criteria: input-derived commands carry an opaque per-connection id; the id is never journaled (pinned by test); two connections are distinguishable by the actor (test); F13.7/F13.8 can read the id from actor context with no protocol change.

    State correction: the PR had gone mergeable_state: dirty against main (main added the signed_move plumbing to the same WorldCommand::Input). This run merged origin/main into the branch, resolved the 7 conflicts by combining both changes, and pushed a653cb9eab32b345b315b247c4ccd38c80f10e4b.

    Tests: cargo test -p id --lib -- input_session_attribution cloned_service_allocates → 2 passed, 0 failed. PR CI has no per-PR id jobs configured (the workflow runs on push to main), so main-tier verification is the backstop.

    Follow-ups: none; #789 (F13.7) and #790 (F13.8) can consume the id.

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/sSmall: expected under 2 hours of workkind/featureNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedmode/onlineFully doable remotely: design, config, code, cloudpriority/normalOrdinary priority (the default)source/humanFiled directly by a humantask/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