Skip to content

Pairing: build a rolling waiting room (room bucketing, ghost expiry, odd arrivals) #10

Description

@htsukamoto5

Phase 2 — BLOCKED on adapter-multiplayer-firebase publishing. Largest single piece of missing work in the audit.

Two participants must find each other. What exists today is a two-tab-on-one-machine pilot rig, not a waiting room.

Important: a rolling waiting room is not something the Firebase adapter gives us. plugin-multiplayer-sync and plugin-multiplayer-role are per-session barriers, not a matcher. Room assignment has to be written on top.

What has to be built

  • Room bucketing — assign arrivals to two-person rooms as they show up, rather than assuming a private session that both partners already share via a pasted URL.
  • Stale-room expiry / ghost handling. wait_for counts any group entry carrying a name, and the adapter only removes an entry on an explicit disconnect() — there is no heartbeat and no beforeunload anywhere in the four bundles. A tab closed in the lobby leaves its entry behind. With persistent Firebase room state a live participant will be "matched" with a ghost, assigned a role, and then time out on every single round. Silent, and frequent.
  • Odd-arrival handling — currently the overflow spectator path is a dead end with no completion code.
  • Concurrency policy. Pair-based studies need participants simultaneously, which Prolific does not guarantee. Launching in a tight burst rather than leaving the study open is the main lever, which makes the waiting room and its timeout policy load-bearing on cost, not just UX.

Related unblocked work: the lobby timeout and payment paths can be done now, independently.

See READINESS.md section 1.

Metadata

Metadata

Assignees

No one assigned

    Labels

    blocked-upstreamGated on unpublished jspsych-multiplayer packagesphase-2After adapter-multiplayer-firebase publishesprolific-readinessRequired for a live paid Prolific run

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions