Skip to content

Attrition: detect partner dropout and abort the game loop with a payment path #5

Description

@htsukamoto5

Phase 1 — unblocked, and the highest-value attrition fix. Explicitly does not need a presence API.

The problem

The survivor of a dropout does not hang — they grind, which is worse, because it burns their time before they give up.

round_timeout sets its timer at round start. When it fires, the round ends with ended_by: "timeout" and a null assignment, feedback shows, and the timeline advances to the next round, starting a fresh timer. There is no cross-round abort and no presence check:

per-round dead wait rounds left if partner drops on round 1 total dead time
Hawkins 60 s 71 ~71 min
C&WG 180 s 5 ~15 min

And the survivor is never told anything — the plugin has no partner-status copy, no disconnected state, no UI affordance at all. They see a normal, fully interactive board that simply never responds, 72 times over. They abandon, so one dropout burns two payments and generates a support ticket.

Work

  • Count consecutive ended_by: "timeout" rounds. Two or three in a row is a perfectly good dropout proxy with no presence API.
  • On trip: flush data, show an honest "your partner appears to have disconnected" screen, and exit to a partial completion code so the survivor gets paid.
  • Break out of the game loop properly. conditional_function on gameLoop is evaluated once, so a mid-game abort needs either a per-round conditional_function on gameRound or jsPsych.abortCurrentTimeline() from the round's on_finish.
  • Record n_trials_completed so partial dyads can be filtered. The partial-data policy decision determines whether the abort path salvages or discards.

There is an upgrade path to real disconnect detection once a presence API exists, but this work should not wait on it.

See READINESS.md section 2.

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

    phase-1Unblocked: can be done nowprolific-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