Skip to content

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

Description

@htsukamoto5

Update (2026-09-16): The proposed backend direction has changed from Firebase to JATOS. The original issue below is retained as historical context; see the latest comments for the current allocation, presence, DataPipe, and verification plan.
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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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