Troubleshooting
Quick fixes for the issues people hit most often.
Authoring & preview
The trial table is empty or the preview hangs. Open the Rows and Console tabs in the bottom dock. The most common cause is an accidentally huge design — the trial count is the product of your factors, levels, samples, and repeats, so a few extra levels can explode it. Watch the per-step row counts in Trial Design and reduce levels or repeats.
A derived column shows the expression text instead of a value.
Check the syntax. Expressions reference the row/trial and study parameters as row.<col> /
params.<name> (with helpers like nth, indexOf, length) in Studio, and trial$x / row$x
(R) or col.x / row.x (Python) in code. A typo'd reference is treated as literal text. See the
expression DSL.
A stimulus shows the binding name instead of the data. In the Screen editor, confirm the component's Source is set to a trial field and the column actually exists in the generated rows. Use the Preview row selector to verify it resolves across trials.
Scoring & feedback
Feedback says "Correct" on missed (timed-out) trials.
This is the !outcome.correct footgun: on a timeout outcome.correct is undefined, and !undefined
is true. Use explicit comparisons — outcome.correct == false or outcome.timedOut == true — and
read the canonical response fields, never raw telemetry paths.
Launch, monitor & data
Publish, hosted runs, recruitment, or data export are greyed out. You're in local-draft mode. Those steps require a connection to the PsyCloud backend — see Launch. Validation and preflight still work offline.
Monitor shows no sessions / Data says "No runs yet." Monitor in local mode only shows local Preview sessions, and Data export operates on hosted runs. Publish and host a run to collect exportable data.
Importing
Some jsPsych plugins didn't convert.
Open import/report.md (or the Studio import report). Unsupported plugins (media recording, eye
tracking, sketchpad, a few specialized ones) are listed there; replace them with PsyCloud
components after import. Always review timing and flagged plugins before deploying — see
Importing & Migrating.
Recruitment
Prolific: "connector not configured" / 401 / 429.
Connect your Prolific token to the workspace (or set PROLIFIC_API_TOKEN when self-hosting). A 401
means the token doesn't match the intended workspace; a 429 means you're rate-limited (it recovers
automatically).
MTurk: workers see a blank page or can't submit. Almost always an HTTPS/mixed-content issue — production MTurk requires a public HTTPS run URL with a valid certificate. Test in the sandbox first, and confirm the worker handshake before going live.
For anything participant-specific, Time Machine replays the exact session and its Explain view shows the provenance behind each frame — often the fastest way to find the cause.