*PsyNet 13.1.0 released* :rocket:

Full changelog: https://gitlab.com/PsyNetDev/PsyNet/-/releases/v13.1.0

:warning: *Action required*
• SSH deployments now require `server_pem` config variable — SSH agent auth is no longer supported (Dallinger 12.1.2)
• Prolific: `eligibility_requirements` has been replaced with `filters` (via Dallinger 12.1.2) — update your Prolific config if you use custom eligibility requirements
• `CapRecruiter` has been renamed to `LabRecruiter`
• Run `psynet update-scripts` in your experiment directories — Dockerfiles have been overhauled for faster builds
• Docker installation route is now deprecated in favor of virtual environments

:rotating_light: *Important fixes*
• `psynet export` was silently skipping source code downloads — now fixed
• Lucid: completed participants were being incorrectly overwritten as "returned" due to a beforeunload race condition — now fixed

:sparkles: *New features*
• `make_next_definition` method for streamlined chain experiments (see new `chain_trial_maker` demo)
• Automatic SSH `known_hosts` management — no more manual SSH before first deploy
• `psynet locales` command to list supported translation locales
• New 'getting started' documentation section

:diamond_shape_with_a_dot_inside: *Lucid recruiter hardening*
• Fixed consent rejection leaving participants stuck in "working" status
• Fixed `/terminate_participant` crashing when participant record doesn't exist
• Fixed `get_status` crashing on empty submissions list
• 403/400 responses during completion/termination now handled gracefully
• Improved termination logging with RID in all messages

:wrench: *Other notable fixes*
• `psynet.debugger()` no longer crashes on repeated breakpoints
• Debugger path mapping fixed for multi-root workspaces in Cursor
• Improved performance and multiple bug fixes in graph-based experiments
• Fixed one-app-per-server deployment route being inaccessible
