v0.6 Release Notes
v0.6.1
Released: 2026-02-09
What's Changed
Changes since last production release
- Fix VideoAdmin drag-and-drop test to match renamed CSS classes (c93db21e)
- Remove legacy recruitment fields from export/import tests (10b478b3)
- Compute deployment participant counts from rooms and show active sessions (2434fa41)
- Unify upload video and upload image modal styling (a54f2a0f)
- Fix permission icons wrapping to 2x2 grid in Deployments table (393b66db)
- Sync config to Prolific before publishing study (b3be71ad)
- Fix Prolific API error extraction for nested error objects (fc27b392)
- Remove legacy experiment-embedded recruitment system (857a9402)
- Require study description for Prolific publish and fix error classification (7466ca56)
- Fix Prolific deployment study creation 500 error and rename docKey params (f47f28ed)
- Add green focus-visible rings to custom-styled buttons across components (47185dab)
- Fix deployment card UX: top-pinned expand, single-click close, drag reorder, completed sessions (1890bd7a)
- Derive experiment visibility from resourcePermissions instead of stale doc field (13e3fdaa)
- Replace default blue focus outlines with green focus rings on recruitment page (5536bdf2)
- Fix sessionRecorder emulator test expecting undefined instead of empty array (52df265c)
- Fix org-level permissions missing from deployment and legacy experiment listings (ee915e9c)
- Add room subcollections, experiment stats, and sync metrics batching (8a03b0fd)
- Add caching, Firestore transactions, and simplify server-side pagination (e1d34c69)
- Fix deployment auto-stop not triggering when target participants reached (816cd8e4)
- Fix expired token errors by preferring Firebase SDK over stale localStorage (c057cee9)
- Simplify Data Management access column to show only view and export badges (03b87470)
- Remove draft deployment state, create deployments directly as active (cf2b4e88)
- Fix Global State Matrix column alignment at narrow window sizes (0f18ad74)
- Fix waitingRoomManager emulator tests for subcollection removal (d05df5a6)
- Add deployment deletion, fix deploymentId tracking, replace SSE with WebSocket, remove participants subcollection (5258e617)
- Replace experiments table with deployments table in Data Management (6cf5e0ed)
- Fix deployment invitation missing real-time updates and draft study participation (0d411579)
- Update EligibleRooms test assertions to match Experiment-to-Study terminology change (49fe03cd)
- Add deployment lifecycle management and use deployment names in participant-facing UI (96c29f56)
- Fix private recruitment 500 errors and show directly assigned participants (48aff9f3)
- Replace deployment creation modal with direct navigation and WebSocket auto-save (dc513215)
- Fix test mocks to use text() for safeParseJson compatibility (1724b34b)
- Fix recruitment UI bugs: flickering sessions, broken search, non-editable config (9099ddf7)
- Redesign recruitment UI with expandable cards and collapsible detail sections (0c1bd357)
- Fix acceptExperimentParticipantInvitation: swap misapplied code review fix (436a7766)
- Fix 24 failing emulator tests and 2 production permission bugs (e1c1a627)
- Add deployment-scoped recruitment system (4ed7ee72)
- Fix missing Comprehension tab in Data Management by including pre-experiment events (bb6b3048)
- Fix ImageUploader tests to match simplified permissions and updated drag-drop text (f2c0f56d)
- Fix recruitment deployment system: API resilience, caching, card UI, and edit discoverability (b3bb3d10)
- Clean up Image and Video uploaders: simplify permissions, improve drag-drop UX (d008eb97)
- Fix Image Manager showing empty folders by switching to client-side filtering (a3441690)
- Fix collaboration cursors for scroll offset and add selection highlighting (92ee0176)
- Fix org members not seeing shared experiments due to missing resourcePermissions entries (d409bb04)
- Fix recruitment system: Firestore indexes, query simplification, experiment loading, and invitation redirect (9fbe0893)
- Fix dataAccessControl tests to match resourcePermissions migration (4224bb00)
- Generalize instruction questions to support scored and unscored types (58baaaee)
- Add Recruitment tab with deployment service for decoupled experiment campaigns (ba413e23)
- Fix failing tests for V3 permission migration and race condition in UnifiedPermissionManager (ff31d8cc)
- Migrate data permissions to resourcePermissions and remove dead V2 data routes (576540ac)
- Replace PreExperimentTab with dedicated ComprehensionTab in data management (3c830e3f)
- Migrate media permissions to resourcePermissions as single source of truth (04155d61)
- Migrate experiment permissions to resourcePermissions as single source of truth (51d13c2a)
- Update base64 audio recovery script to use org-scoped storage paths (d73843af)
- Fix recording storage architecture: unify audio and video under org-scoped paths (02b4e5e1)
- Skip personal workspace creation when registering via team invitation (b999b1ef)
- Fix Register tests for invitation flow changes (bad9fe35)
- Fix video preloading failures by enabling CloudFront HLS delivery (bc94bbb4)
- Fix invitation flow: email pre-fill, auto-approval, and auth hardening (2f99dc9a)
- Fix audio recording uploads by fixing participant permission check (2f7d776e)
- Add real-time collaboration UI for experiment designer (7a896f6b)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.0...v0.6.1
v0.6.2
Released: 2026-02-09
What's Changed
Changes since last production release
- Fix Redis reconnection failures and remove conflicting IngressRoute (39328e25)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.1...v0.6.2
v0.6.3
Released: 2026-02-10
What's Changed
Changes since last production release
- Fix ShowImageComponent test missing isSignedUrl mock (1903889b)
- Skip crossorigin for signed GCS URLs to avoid CORS failures (9b5c41b8)
- Remove global button element selectors from app.css and forms.css (cfea1a9e)
- Fix signed URL corruption in image proxy for stimulus mappings (e8754b1c)
- Fix image drag-to-folder validation and folder button icon visibility (a97f422b)
- Fix InstructionsDisplay test missing mocks for imageService and videoService (080429b4)
- Fix Instructions test selector for block-based content editor (973ff172)
- Fix Redis client-closed error on shutdown and sync room join timeout (c7c9c66f)
- Fix ColorPickerButton props_invalid_value and each-block reconciliation crash (1dfc07f5)
- Harden AudioRecordingComponent against resource leaks, race conditions, and silent failures (90199256)
- Add media (image/video) support to instruction pages (9c1450f4)
- Fix svelte-check accessibility and CSS warnings across 5 components (17cd502e)
- Fix waiting room timeout and countdown bugs (b0d1f968)
- Add key-category stimulus mapping type with folder-based sampling (e1f1cbf2)
- Fix reactive loop in VariableManagerPanel causing 429 rate limit errors (2c058562)
- Fix pre-experiment comprehension data not appearing in data management (e72ad142)
- Fix deployment participant completion counts always showing 0/N (554712a8)
- Add pre-experiment pipeline tracking for deployment dashboard (5beb2130)
- Store video duration at selection time for sparse rating editor (40f9eec6)
- Fix instructionsPages not persisted on experiment creation (ebbd41a7)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.2...v0.6.3
v0.6.4
Released: 2026-02-10
What's Changed
Changes since last production release
- Fix HLS video streaming on Safari with CloudFront signed URLs (00cf8035)
- Enforce consent → instructions → waiting room sequence (c56252e4)
- Prevent SSL outages during deployments by skipping unnecessary Traefik restarts (68507e35)
- Fix experiment permission 500 error and owner Unknown display (ba48deb9)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.3...v0.6.4
v0.6.5
Released: 2026-02-12
What's Changed
Changes since last production release
- Add opt-in monitoring for active deployment cards (cdc8921e)
- Fix effect_update_depth_exceeded and WaitingComponent console errors (f87509e1)
- Fix effect_update_depth_exceeded and parseTemplate warning spam (e8c4ca60)
- Fix lookup() to handle key-category stimulus mappings (7c698de9)
- Fix deployment API 500: handle Firestore Timestamps in sort (92e67b66)
- Fix bridgeService tests for structured Kernel event values (41d209fb)
- Fix Kernel Flow2 event forwarding: sync connection state and improve event data (bb75fdba)
- Fix deployment API 500 error and platform admin access (2539aee9)
- Fix Instructions page tab scrollbar artifact and Grant Access button sizing (5074f88c)
- Add key-category batch draw support for MultipleChoice image source (368f1ab1)
- Improve Instructions editor: drag-and-drop blocks, remove purple theme, fix Add Page button (41819245)
- Add inline question blocks, preview toggle, and changeable question types (a9bc0985)
- Fix empty folder picker and add help text for stimulus mappings (d7e97a8c)
- Fix emulator tests for org-level deployment permissions (bff22846)
- Fix Instructions test assertions after tab bar redesign (0abbe830)
- Integrate deployments into unified permission system (aad3006a)
- Fix cross-page question corruption and improve instructions designer layout (5d79241b)
- Fix low audio volume: add loudness normalization, raise bitrates and default volume (eef1a245)
- Add dynamic image selection for MultipleChoice component (3c2ecabc)
- Fix HLS video buffering: prefetch segments at startup, fix sync engine PID windup (b8e037c8)
- Add question preview to instructions designer preview panel (e67a2db4)
- Fix Kernel Flow fNIRS events silently dropped due to missing id field (96a78daf)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.4...v0.6.5
v0.6.6
Released: 2026-02-13
What's Changed
Changes since last production release
- Fix Comprehension tab accuracy for data-only questions and unscored event recording (c4cf8f43)
- Parallelize Firestore batch queries and add server-side deploymentId filter for data management (39147883)
- Fix Kernel Flow2 event delivery by serializing value field to string (a4d59329)
- Add Type column to data management Deployments table (4fef22e9)
- Fix experimenter account request flow showing Access Denied instead of Pending Approval (4ba1c6b0)
- Fix answer leaking between questions in InstructionsQuestionBlock (a4dcc501)
- Make Monitor button a toggle with highlighted active state (bf70a063)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.5...v0.6.6
v0.6.7
Released: 2026-02-16
What's Changed
Changes since last production release
- Fix Pupil Neon connection bugs and simplify setup UI (b967601f)
- Streamline Neon REST connection: Bridge resolves hostname internally (54366fa1)
- Wire up Frenz EEG event/marker sending via bridge LSL (43611739)
- Fix gaze overlay not working due to LSL data not reaching frontend (ac222bdd)
- Remove auto-select fallback for global component tabs (5226f7c3)
- Fix GlobalComponentConfigurator showing wrong config schema for selected component (e86d9252)
- Hide GazeOverlay from global components UI when Pupil Neon is disabled (851d4691)
- Fix global component config saving to wrong component on tab switch (713c54bf)
- Move Neon recording option into DeviceCard component (a68b9eb1)
- Fix Pupil Neon bridge protocol mismatches and add recording config (d582f344)
- Set emailVerified on approval and surface re-enable failures (9f57e33b)
- Fix device event ordering and async cleanup in experiment lifecycle (9887e9b0)
- Fix registration failure for orphaned Firebase Auth users (72889afd)
- Register GazeOverlay as a global component with configurable trail (206e48a4)
- Deploy dev TLSStore in shared deployment workflow (4dcb08bf)
- Block unapproved experimenters at registration and API level, remove dead auth code (2750aac9)
- Add Pupil Labs Neon eye tracker integration (b07307d7)
- Fix post-experiment questionnaire selection highlighting, data shape, and back navigation (b68660e2)
- Harden auth system: fix race conditions, remove dead code, add tests (d0d2b59d)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.6...v0.6.7
v0.6.8
Released: 2026-02-17
What's Changed
Changes since last production release
- Fix sessionRecorder mock missing addParticipantToRoom and createOrUpdateRoom (0770d0d4)
- Hide completed rooms in deployment tracker and allow reactivation (1c7cff8c)
- Fix participants not appearing in data management panel (ef2dfca5)
- Fix 3 failing emulator tests after recent refactors (b1bdb5e4)
- Upgrade API keys route to use resourcePermissions for auth checks (ee9b7573)
- Fix deployment participant counter never incrementing (647d4169)
- Remove legacy permission fallbacks and clean up stale data paths (b838b161)
- Fix comprehension data leaking across rooms via lobbySessionId stamping (33ded8c3)
- Fix tab overflow in data management panel by adding flex-wrap (fc8b0094)
- Fix experiment tracker showing wrong completion info for finished sessions (530129a4)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.7...v0.6.8
v0.6.9
Released: 2026-02-18
What's Changed
Changes since last production release
- Fix Kernel and TTL device status check ignoring Bridge "Connected" response (65dc227b)
- Fix Neon Bridge integration: race condition, recording order, and gaze setup (6a5cedcf)
- Fix question buttons clipped when preview panel is open in Instructions tab (ed0cee4d)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.8...v0.6.9
v0.6.10
Released: 2026-02-19
What's Changed
Changes since last production release
- Fix emulator tests: create deployments without org for non-owner rejection tests (83c06342)
- Fix deployment emulator test error messages for unified permissions (5ce63813)
- Fix tests for read-only mode permission refactor (f751a141)
- Add read-only mode for Data Manager, Media Manager, and Deployments (a815ad50)
- Fix error toast for view-only users opening ExperimentDesigner (ca6f9b47)
- Register LikertScaleComponent in ExperimentRunner (2825d256)
- Fix instructions tracker visibility and effect_update_depth_exceeded error (bf8bb73e)
- Emit tracker update on lobby session creation (consent visibility fix) (f4c1dd59)
- Fix session completion race condition (SESSION_COMPLETED 401 error) (c3e84231)
- Fix fix-hls-status script to check both s3Key and docId HLS paths (c3e7f5ef)
- Fix HLS 403 by deriving manifest filename from input stem (47edb26e)
- Fix HLS silent failure by adding safety timeout and progressive fallback (28df995f)
- Replace Firestore onSnapshot with REST + Socket.IO in DeploymentTracking (feb08a2b)
- Fix square top corners on expanded active deployment cards (78efb209)
- Fix cloudFrontService test mock missing logger.info and logger.warn (83ca8363)
- Replace REST+WebSocket tracking with Firestore onSnapshot for live session table (80f48031)
- Fix false reconnection overlay after waiting room matching (9346c512)
- Fix false reconnection overlay and CloudFront PEM key handling (0bd748fc)
- Fix HLS 403 from duplicate CloudFront signing params and move tracker notifications server-side (f056845c)
- Add deployment tracker: pre-experiment visibility, session interventions, and messaging (63438474)
- Fix remaining emulator test failures across 8 test files (430e478f)
- Fix emulator tests: rename sessionId to roomId in test helpers (c8c1e253)
- Fix mediaPreloader progress tracking test (5b94afa9)
- Fix Firefox hang during multi-person experiment with HLS on S3 (692c5842)
- Fix 25 failing CI tests across 6 frontend test files (496c8323)
- Remove participations collection and migrate history to participantSessions (7210772d)
- Upgrade Storybook v8 to v10 to resolve @sveltejs/vite-plugin-svelte v6 peer dependency conflict (5e972c6d)
- Eliminate dual-writes, deprecate participations, and optimize downstream reads (da0e4ad9)
- Leverage V4 sessions for deployment tracking, permission caching, and Prolific gateway (3e067c7e)
- Clean up stale sessionId references missed in roomId consolidation (6d1ca24e)
- Consolidate participant sessions and rename sessionId to roomId on events (682bee31)
- Update dependencies across all workspaces (6ac59886)
- Fix Prolific deployment issues and add HLS-aware video URL generation (40fc2916)
- Add tests for gaze calibration and sharing, fix effect_orphan in gazeShareService (4792ee0f)
- Add gaze calibration, require-calibration config, and multi-participant gaze overlay (1a00c34b)
- Fix gaze overlay not rendering by handling varied bridge data formats (b5e1ccad)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.9...v0.6.10
v0.6.11
Released: 2026-02-19
What's Changed
Changes since last production release
- Remove unreliable active sessions count from collapsed deployment cards (880afd9c)
- Fix participant messaging: use socketMap instead of socket.roomId (53a4a8b7)
- Restyle participant messaging button as Help pill above Feedback button (4213f55d)
- Disconnect LiveKit on experiment completion and add redirect countdown timer (5fb7d8b9)
- Add cancel/remove actions for private recruitment invitations and assignments (82107d67)
- Fix effect_update_depth_exceeded in InstructionsQuestionBlock (4d52de6e)
- Fix HLS video loading: switch MediaConvert to SINGLE_DIRECTORY (f589bfa6)
- Fix duplicate experiment IDs causing Svelte each_key_duplicate crash (75a3fd49)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.10...v0.6.11
v0.6.12
Released: 2026-02-20
What's Changed
Changes since last production release
- Prolific system review: fix V4 gateway, domain consistency, status guards, bonus V4 support, dead code cleanup (4d9a7286)
- Fix Prolific real-time tracking by forwarding deploymentId through gateway redirects (84a791f1)
- Fix Prolific study pause/resume/stop 502 errors for AWAITING_REVIEW status (fbe33a38)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.11...v0.6.12
v0.6.13
Released: 2026-02-20
What's Changed
Changes since last production release
- Fix video volume resetting to saved value instead of 100% each session (9693ad20)
- Fix audio recording duration showing 0s in Data Management (b97e8b18)
- Fix pre-experiment events missing from Data Management by using V4 session tokens (cd4cb95d)
- Fix experiment permissions system and deployment invite access (8cbf62e6)
- Fix Prolific workspace selection gaps and improve API key error handling (305f8ed9)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.12...v0.6.13
v0.6.14
Released: 2026-02-21
What's Changed
Changes since last production release
- Fix emulator test race condition in endExperiment questionnaire tests (fd3f2e7b)
- Expand test coverage across backend and frontend (c94ccb1d)
- Refactor Prolific gateway to V4 deployment-scoped route and fix V4 data quality (b96e39f3)
- Fix required questions in instruction pages being bypassed (f48a99f2)
- Fix submit button not centered in RapidRateComponent (d2cd14e0)
- Fix deployment owners getting 403 on experiment tracking session operations (3cfc2ab8)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.13...v0.6.14
v0.6.15
Released: 2026-02-21
What's Changed
Changes since last production release
- Migrate experiment components from experimentDataService facade to dataServiceV4 directly (70b4fb86)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.14...v0.6.15
v0.6.16
Released: 2026-02-21
What's Changed
Changes since last production release
- Fix required questions skippable via outer Next button on instruction pages (88a1d13e)
- Fix participants rerouted to instructions after waiting room matching (dbd41c54)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.15...v0.6.16
v0.6.17
Released: 2026-02-22
What's Changed
Changes since last production release
- Add missing stateManager lock mocks to waiting room emulator tests (54937808)
- Fix waiting room re-matching loop in multi-pod deployments (1081908a)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.16...v0.6.17
v0.6.18
Released: 2026-02-23
What's Changed
Changes since last production release
- Fix data leak on account switch and cross-org visibility for org admins (037a93fa)
- Fix folder PUT handler ignoring permission field, breaking cascade (84d5e17c)
- Fix Kernel Flow not receiving experiment lifecycle events (70be8b90)
- Add composite index for cross-org public resource permission queries (552cd2ef)
- Fix Access column field mismatch and add cross-org debug logging (53a16a8a)
- Fix cross-org visibility for public images, folders, and videos (a8a8eb00)
- Fix image folder visibility field name mismatch and add cross-org query resilience (05bba06a)
- Enable public access toggle for image and video folder permissions (c7f33652)
- Fix public media not visible to non-organization members (dd271065)
- Fix email template formatting and enforce consistent branding (bfc10c56)
- Fix video playback CORS error for cross-member experiment deployments (1c7dea2b)
- Add batch dismiss endpoint to fix slow Clear All notifications (c3823b57)
- Fix new experimenters seeing all historical release note announcements (4eddd7d3)
- Fix cross-org media access for shared/public experiments (eb50669d)
- Fix public experiments not visible to members of other organizations (3f943c41)
- Add PROLIFIC_GATEWAY_SECRET to deployment pipeline (c4967650)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.17...v0.6.18
v0.6.19
Released: 2026-02-24
What's Changed
Changes since last production release
- Add EyeLink 1000 Plus frontend integration (6def85ae)
- Fix Prolific completion codes returning ABANDON instead of SUCCESS (977acdd1)
- Fix Prolific sending ABANDON codes instead of correct completion codes (ca8605f3)
- Fix questionnaire preview not syncing to selected page tab (b266ec06)
- Fix EventProcessor not reading componentType from V4 event.data (a469d6b4)
- Fix questionnaire events not recording due to session status rejection (7abb984c)
- Redesign PostExperimentQuestionnaire editor UI (f16b801b)
- Fix Prolific "Unknown Code" on researcher dashboard (31ba184a)
- Add ENCRYPTION_KEY to deployment pipeline (43e57d01)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.18...v0.6.19
v0.6.20
Released: 2026-02-24
What's Changed
Changes since last production release
- Fix multi-page questionnaire responses from page 2+ not being recorded (5fefdd96)
- Include recording media files in Download All zip (fb46c9e3)
- Fix missing questionnaire responses for text input questions (049b3c9c)
- Add missing data types to Download All: participants, questionnaire, comprehension (fbf326fa)
- Switch Download All Data from lossy CSV to raw JSON (c9beb257)
- Fix questionnaire badge count and move jszip to runtime dependencies (813254bb)
- Fix V3 processors crashing on missing Firestore indexes and Prolific completion codes (06b44de2)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.19...v0.6.20
v0.6.21
Released: 2026-02-24
What's Changed
Changes since last production release
- Fix flush race condition, options override, and recording filenames (9f469e77)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.20...v0.6.21
v0.6.22
Released: 2026-02-24
What's Changed
Changes since last production release
- Add missing flush mock to PostExperimentQuestionnaireDisplay test (d5ec2887)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.21...v0.6.22
v0.6.23
Released: 2026-02-25
What's Changed
Changes since last production release
- Fix backend Docker build failure caused by UID/GID 1000 conflict (0a66245f)
- Remove exposed credentials from tracking, harden Traefik, and clean up dead code (63076008)
- Fix memory leaks, harden security, and optimize monitoring infrastructure (79ad2ddc)
- Fix deploymentId data visibility bug, OOM-kill cascade, and data loss on crash (dfd926bc)
- Make gaze consumption layer device-agnostic with activeGazeService router (5cc8e4e0)
- Integrate metrics pipeline and restructure Usage & Billing dashboard (49b72c34)
- Fix Prometheus crash: replace wildcard rule_files glob with explicit paths (6a9242f4)
- Add Prometheus scrape annotations to backend StatefulSet (93f1f5ed)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.22...v0.6.23
v0.6.24
Released: 2026-02-26
What's Changed
Changes since last production release
- Restore lcov reporter removed during coverage config changes (8805ad9f)
- Raise frontend test coverage from 45% to 71% with 5,700+ new tests (d306d3a4)
- Fix experiment designer WebSocket disconnect/reconnect bugs (8594eae7)
- Fix un-centered submit buttons in AudioRecordingComponent (fb49a363)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.23...v0.6.24
v0.6.25
Released: 2026-02-27
What's Changed
Changes since last production release
- Update invitation service test to expect deploymentId field (6c163892)
- Hide Send Invite button when participant already exists on platform (d212b088)
- Fix email invitation flow for private experiment participants (87e2e4ae)
- Fix participant 403 on experiments accessed via public deployment links (0d14765f)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.24...v0.6.25
v0.6.26
Released: 2026-02-27
What's Changed
Changes since last production release
- Fix effect_update_depth_exceeded in ExperimentDesigner (d71ac1f4)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.25...v0.6.26
v0.6.27
Released: 2026-02-27
What's Changed
Changes since last production release
- Fix second effect_update_depth_exceeded loop in ExperimentDesigner (c1450a35)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.26...v0.6.27
v0.6.28
Released: 2026-03-01
What's Changed
Changes since last production release
- Create shared RefreshButton component, remove dead code, data-driven nav (4c73ed70)
- Improve stimulus display: boolean toggle, media browser, right/below layouts (f09de6c7)
- Add inline stimulus image display to input components (410bf741)
- Fix delete button removing group instead of selected state within group (5d2746a7)
- Fix video/audio tracks not toggling on videochat visibility state transitions (33308693)
- Add configurable encoding preset for LiveKit recording egress (8e3e4069)
- Fix Kernel Flow event timestamp ordering for correct duration calculation (f6070c80)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.27...v0.6.28
v0.6.29
Released: 2026-03-02
What's Changed
Changes since last production release
- Fix cluster scaling: PDB deadlock, anti-affinity, HPAs, and dev environment (a2c14f46)
- Add stimulus metadata to component responses and data management table (921e5fd4)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.28...v0.6.29
v0.6.30
Released: 2026-03-03
What's Changed
Changes since last production release
- Fix deployment reactivation immediately re-completing (287b6b40)
- Fix video not reappearing after chat window collapse/expand (0ebbd3f0)
- Fix submit button hidden when scroll/overflow mode active (082fa379)
- Add display options (overflow mode, fit strategy) to RapidRate config editor (af89ae33)
- Fix participant count excluding egress bots and corrupted back button (4d5fbefc)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.29...v0.6.30
v0.6.31
Released: 2026-03-04
What's Changed
Changes since last production release
- Fix PlatformAdminDashboard test to account for Plan Quotas tab (10fb06d0)
- Fix monthly reset missing livekitMinutesThisMonth and add Plan Quotas admin UI (ed1858ce)
- Fix LiveKit recording event visibility and timing precision (1ce976f8)
- Fix participant disconnect and Prolific completion bugs (f974e453)
- Fix each_key_duplicate error in StateListWithGroups (559bdbdb)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.30...v0.6.31
v0.6.32
Released: 2026-03-05
What's Changed
Changes since last production release
- Fix non-Prolific participants showing COMPLETED_NO_CODE completion status (c1a07c4e)
- Merge branch 'worktree-rosy-sleeping-pascal' into dev (640e7a62)
- Merge branch 'worktree-peppy-forging-umbrella' into dev (9f696358)
- Fix Prolific participant stuck state and completion code bugs (1b268280)
- Fix questionnaire data recording reliability for non-text components (bc471004)
- Fix recording events missing from CSV export and recording duration overshoot (6f407701)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.31...v0.6.32
v0.6.33
Released: 2026-03-10
What's Changed
Changes since last production release
- Fix DeploymentsTable tests failing due to stale cache between test runs (7c34bcee)
- Fix owner name resolution and consolidate user display name logic (79f4677d)
- Cache deployments data in singleton store to eliminate loading spinner on breadcrumb navigation (cf601521)
- Fix recordings cache staleness and add speaker detection diagnostics (52e5a5f8)
- Fix role-specific behavior ignored due to stale experiment-level configMode (dc66a365)
- Fix missing authorization header in external user search (6d257f9e)
- Fix broken audio level meter during device setup (99268790)
- Add completionOutcome tracking to experiment sessions (c5d033c0)
- Fix normalizeRecordingStatus to separate STARTING from ACTIVE (654f89de)
- Fix recording event timestamps round 2: duration, offset, and duplicate events (71fa01d4)
- Fix recording events to use authoritative LiveKit capture timestamps (237aca18)
- Fix silence event emit to match original LiveKit behavior (ca193be5)
- Patch LiveKit silence detection to use shared AudioContext (9b671897)
- Fix dev deployment timeouts from resource exhaustion (6f8c451d)
- Fix LiveKit audio track ended loop from duplicate getUserMedia stream (f32ad8fd)
- Fix pre-buffer duplicate URL loss, upgrade livekit-client, improve freeze diagnostics (4d73255e)
- Fix HLS worker race condition and LiveKit AudioContext UI freeze (82b72e79)
- Fix measureLatency tests using wrong socket object (3148a495)
- Guard LogRocket initialization to production only (b39584be)
- Fix sparse rating UI freeze from redundant persistence and resume contention (4ce987a7)
- Fix measureLatency() using wrong socket and event name (18c8f228)
- Fix HLS.js main-thread transmuxing freezes and pre-buffer video display (10e55c44)
- Add missing mock methods for claimPreBufferedHls and attachHlsEventHandlers in ShowVideoComponent test (d483fa3a)
- Fix HLS.js worker blocked by missing CSP worker-src directive, filter HLS from LogRocket (d4bd2741)
- Add HLS pre-buffering and fix stimulusMappings preload gap (690405ee)
- Replace || with ?? for numeric input bindings to stop masking valid 0 values (4f579e26)
- Fix dataServiceV4 test: avoid microtask yield when no in-flight promises (442241cd)
- Fix nested path updates failing in designer WebSocket, add metadata save diagnostics (69333778)
- Fix main thread freeze, V4 event flush race condition, and HLS startup thrashing (28de9c4f)
- Fix spurious batch events on rating clicks, add HLS freeze diagnostics, re-enable Sentry/LogRocket (93b98258)
- Switch dev SSL cert from DNS-01 to HTTP-01 challenge to fix expired cert (bd30fb08)
- Defer Sentry init during experiments to fix periodic main thread freezes (fac62d8f)
- Fix video autoplay during sparse rating pauses, defer LogRocket during experiments (5668afb5)
- Add deeper instrumentation to diagnose UI freeze trigger points (364e2fd5)
- Add main thread freeze monitor, fix logger perf, restore RapidRate transition (d7ea7493)
- Fix ActiveSpeakersChanged test to account for single-participant guard (801fd225)
- Fix SparseRating modal lag caused by VideoChat reactive overhead (b94c0ac6)
- Fix participant reconnection not working after disconnect (5bf051fb)
- Fix WaitingRoom test: fire joined-waiting-room event before asserting timer (0fbe5569)
- Fix questionnaire components missing data and inconsistent submit UX (5f16f9f5)
- Fix Prolific completion code mappings and add server-side write for offline participants (3a319b83)
- Show remaining time countdown in waiting room instead of elapsed time (95fca820)
- Fix VideoChat black video on uncollapse/unhide and reduce UI lag (b5c72688)
- Fix video recording timestamps and eliminate duplicate completion events (38e34a2e)
- Surface participant disconnections in deployment tracking table (28666eaa)
- Reduce experiment runner UI lag: eliminate redundant reactive updates (525b4d5a)
- Fix systematic UI lag from LiveKit participant state update cascades (71edc4d9)
- Fix sparse rating UI lag from redundant reactive cascades (48e6fc14)
- Fix VideoChat collapse: black video on uncollapse and blocked header clicks (87c77258)
- Replace sparse rating client polling with server-driven pause timers (36f3b0ba)
- Fix ExperimentRunner test mock missing dataServiceV4.flush (7e25f1b1)
- Fix sparse rating missing pauses on second video and countdown UI lag (b00d6cc9)
- Fix VideoChat black video on uncollapse, add recordWhenHidden config (b6529357)
- Fix sparse rating timeout tests to account for 2s server buffer (00a87ac5)
- Fix LiveKit video black after VideoChat uncollapse (a7e4ee8d)
- Fix experiment designer loading failures (4 Sentry bugs) (1376a79b)
- Fix sparse rating modal freeze and data loss, add pause diagnostics (86590a16)
- Fix sparse rating reliability: restore blocking init and eliminate reactive cascades (fb654dd5)
- Fix video sync effect not re-running on collapse/uncollapse (b35e7ba0)
- Eliminate sparse rating schedule pre-fetch in favor of server-driven pause events (97a79631)
- Fix sparse rating modal race condition and reliability bugs (048a6fba)
- Fix LiveKit video not showing after collapse/uncollapse (ac6bb17b)
- Revert v0.6.32 commits to restore v0.6.31 stability (9dcbefac)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.32...v0.6.33
v0.6.34
Released: 2026-03-11
What's Changed
Changes since last production release
- Fix recordWhenHidden videochat recording unreliability (b67c1e1e)
- Remove dead Firebase upload path and clean up webhook handler (0bb6bd4b)
- Fix role-specific configs storing full copies instead of deltas (de72d7c3)
- Fix CountdownTimer not ticking and add countdown support to LikertScale (4ad7b8e1)
- Fix duplicate component.response events in questionnaire and instructions contexts (731f5f9b)
- Fix recording offset race condition and missing recording events (0bb21476)
- Fix room participant count using subcollection data instead of drifted denormalized counter (e5b83cac)
- Fix completion code recording for non-Prolific participants (12622c26)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.33...v0.6.34
v0.6.35
Released: 2026-03-12
What's Changed
Changes since last production release
- Add Escape key support to close custom modals (b523d503)
- Add write/admin scopes to API key generation (afabdf9d)
- Fix backend Docker build missing shared/ directory and roles format in test (faa35f70)
- Fix emulator tests for component type validation (9f7d2037)
- Fix alias resolution in Docker build and CI tests (d886858b)
- Add per-component JSON Schema validation (Phase 4) (a152ef73)
- Add V3 experiment CRUD routes with API key authentication (f80f2331)
- Fix experiment import rejecting valid component types and add schema-driven validation (ac1cc714)
- Fix submit button visibility on MultipleChoice, Ranking, and RapidRate components (6d33e80a)
- Clean up HLS video playback technical debt (f8d49c0b)
- Fix CollaboratorCursors infinite effect loop and toFixed type errors (032355f1)
- Add multi-layer video error recovery to prevent experiment freeze (34ce4784)
- Fix EventProcessor state lookup mismatch causing confused component names (6fea3b34)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.34...v0.6.35
v0.6.36
Released: 2026-03-13
What's Changed
Changes since last production release
- Fix ghost states from duplicate state IDs in experiment designer (662a8220)
- Fix Escape key in API key modals by using window-level handler (cbe9a0f9)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.35...v0.6.36
v0.6.37
Released: 2026-03-14
What's Changed
Changes since last production release
- Improve Consent tab UI consistency and reduce editor-preview code duplication (0c49aaac)
- Add fresh production screenshots and TTL device photos to landing page (532eb146)
- Fix video wrapping at end of playback in sync mode (fd184dd5)
- Fix fit-to-screen view modes by implementing strategy-specific scaling and layout collapse (c72d3e5b)
- Suppress remote audio playback when videochat is hidden with recordWhenHidden (f102e286)
- Update landing page with accurate feature descriptions and accessibility improvements (82fe0acd)
- Add complete OpenAPI 3.1.1 spec and Scalar docs UI for V3 API (87c44d8e)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.36...v0.6.37
v0.6.38
Released: 2026-03-14
What's Changed
Changes since last production release
- Rename Compliance card to Collaboration and reorder deployment screenshots (f8943e22)
- Add experiment tracker and Prolific configuration screenshots to landing page (de415c81)
- Fix unifiedPermissionService test failure with optional chaining on response.headers (dec87fe7)
- Update landing page feature cards with fresh screenshots and layout fix (a94bf414)
- Fix permission removal JSON error and add server-side user enrichment (b2a2ee7e)
- Fix blank API v3 docs page by allowing Scalar CDN in CSP for docs route (9f3832d2)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.37...v0.6.38
v0.6.39
Released: 2026-03-14
What's Changed
Changes since last production release
- Allow cross-origin access to OpenAPI spec endpoint (88782ba2)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.38...v0.6.39
v0.6.40
Released: 2026-03-16
What's Changed
Changes since last production release
- Update GitHub repo URLs from ljchang to hyperstudyio org (694c47da)
- Add Terms of Service, Privacy Policy, and legal agreement infrastructure (3170c94f)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.39...v0.6.40
v0.6.41
Released: 2026-03-18
What's Changed
Changes since last production release
- Fix tests for video sync throttling and buffering grace timer (580d843d)
- Fix Firefox CPU spike during HLS video sync (d9f50f56)
- Fix syncParametersManager tests for 2-state Kalman filter (b890df67)
- Fix designer server to reassign duplicate state IDs instead of dropping them (c9b2dbfb)
- Improve sync engine: 2-state Kalman, PID pause awareness, derivative filter (4201e3ca)
- Fix video sync lifecycle issues: ended replay, slow calibration, stale state (d9db5cd8)
- Fix sync metrics tab not showing for non-host participants (e0245cc1)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.40...v0.6.41
v0.6.42
Released: 2026-03-19
What's Changed
Changes since last production release
- Add true sampling without replacement (no pool reset) (9a6041d8)
- Preserve state groupings and randomizeStates through experiment export/import (9d850169)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.41...v0.6.42