Changelog

v0.36.1 - Pointless security updates but also some useful stuff

2025-10-31

  • Added encryption scaffolding with runtime toggles and KMS settings, expanded experience entries with encryption metadata, supplied an Alembic migration, documented crypto/key/KMS interfaces for future implementations, and ensured supporting dependencies are declared.
  • Introduced a HEXL dispatcher that normalizes timestamps and emits anonymized metric payloads after decryption via the trusted backend pipeline.
  • Refactored HEXL record aggregation to share sanitized data for admin and public analytics, navigation, statistics, and Stroop pages.
  • Added regression tests capturing dispatched payloads and verifying HEXL views continue serving sanitized analytics feeds.
  • Added configurable login throttling defaults and ensured clinician login attempt tables are created during app startup.
  • Introduced shared throttling utilities and wired them into the primary user login API to enforce exponential backoff with retry hints.
  • Hardened clinician authentication by logging attempts, applying throttling with retry headers, and enforcing a 30-minute inactivity timeout across protected routes and logout handling.
  • Added a Demo User settings card so admins can store or clear the demo login email and password while masking password changes in the admin audit log.
  • Created a reusable helper to fetch stored demo credentials and wired them into both the public login flow and the admin preview context so the button only appears when fully configured.
  • Updated the login page shortcut and client script to use the configured demo credentials and show a disabled state with messaging when no demo user is available.
  • Extended _delete_user_data to clear Fitbit, clinician, study, notification, and other dependent records while supporting optional transaction control so account removals no longer leave foreign key violations.
  • Reused the shared cleanup helper in the admin delete endpoint and reassigned any admin log entries to a surviving administrator before dropping the user record.
  • Added a regression test that signs up an admin and a study creator to confirm the admin deletion flow succeeds without integrity errors.
  • Added a fallback in _collect_hexl_record_components so HEXL records always expose a pseudonym derived from the user ID when no profile metadata exists.
  • Added a regression test ensuring the admin aggregates endpoint returns the fallback pseudonym for users lacking a HEXL profile row.

v0.35.0 - Hotfix HEXL comparison in user statistics

2025-10-30

  • Declared the SOS threshold constant at module scope so computeHexlComparison and other helpers share the same value without scope errors.
  • Updated the trigger bucket computation to rely on the shared SOS threshold rather than a shadowed local definition.
  • Fixed version number. The last update was supposed to be 0.35.0 so I just went ahead and made this one that.

v0.34.5 - PHI tagging and sleep data refinement

2025-10-29

  • Added X, Y, and SoS to Trigger Words table in user and HEXL Statistics page and made them sortable by column.
  • Highlighted Fitbit data as PHI, surfaced saved-data counts, and added deletion controls on the integration and Fitbit data pages so participants can manage stored imports explicitly.
  • Added helpers that describe requested Fitbit scopes, summarize stored Fitbit records, protect revoke/delete forms with CSRF, and introduced a deletion route that clears snapshots, sleep logs, and experience metrics only when the user requests it.
  • Added a “Display options” control group to the 3D scatter analytics card so viewers can toggle markers, trajectory lines, SoS coloring, and SoS-based sizing directly from the dashboard UI.
  • Set the Sleep Data chart controls to make Hypnogram the default selection, clarified the default label copy, and synchronized stored preferences across pages through local-storage handling and storage events.

v0.34.4 - Security fix and graph cleanup

2025-10-28

  • Enforced a non-placeholder SECRET_KEY, applied secure session cookie defaults with an opt-out flag, and documented the new configuration switches for local development and diagnostics.
  • Scrubbed Discord webhooks of PHI by only passing the message contents to Discord instead of the screenshot and username.
  • Replaced hard-coded clinician invite codes with generated or configurable values and updated clinician/admin flows to rely on the new role definitions.
  • Added the following to Context Event data: sleep quality, Fitbit steps, Fitbit active minutes, and inebriation levels.
  • Disabled 3D data graphs and merged 3D Scatter Plot with 3D Trajectory Plot. Moved the newly merged 3D graph to the Graphs page.
  • Added 3D scatter plot to HEXL Graphs page.
  • Resurfaced the Logs Over Time graph on the user Graphs page.
  • Included very active minutes with Fitbit data.

v0.34.0 - Password reset fix

2025-10-26

  • Auto-enabled login with email at user login to allow password resetting without losing access to AES-encrypted experience logs.
  • Fixed password reset requirements to adhere to the same standards as signup.
  • Added an admin security dashboard with navigation entry, rich activity summaries, and superadmin deletion controls to review unusual password reset patterns.
  • Delayed context-event “after” metrics until at least one minute after the event ends, reusing the current timestamp for ongoing events and adding a pending note when the after window has not started yet.
  • Added start and end timestamps to Context Events on the /logs/calendar page.