HERMES-GIELIE/tests
Basit Mustafa 4a882bec66
fix(auth): persist sessions across restarts via STATE_DIR/.sessions.json (#962)
_sessions is an in-memory dict, so every process restart (launchd bounce,
systemd restart, container recycle) invalidates all active browser sessions.
Users get 401 on every authenticated endpoint until they clear cookies.

The HMAC signing key already persists to STATE_DIR/.signing_key via atomic
owner-only write. This PR applies the same pattern to the session table:

- _load_sessions(): reads .sessions.json on module import, prunes expired
  entries, tolerates missing/malformed files (returns {} on any error)
- _save_sessions(): atomic write via tempfile + os.replace(), chmod 0600,
  mirrors .signing_key write pattern exactly
- create_session(): saves after inserting new token
- invalidate_session(): saves after removing token (only if token existed)
- _prune_expired_sessions(): saves only when entries are actually removed

Cookie format and signing are unchanged; existing sessions survive upgrade.
6 regression tests cover: restart survival, invalidation persistence,
expiry pruning on load, 0600 permissions, corrupt-file tolerance.

Co-authored with Claude Sonnet 4.6 / Anthropic.
2026-04-24 11:21:41 -07:00
..
__init__.py
_pytest_port.py fix(tests): restore conftest default model in test_default_model_updates_hermes_config — fixes CI ordering failure 2026-04-21 02:25:14 +00:00
conftest.py perf: TTL cache for model list + incremental session index (#780) 2026-04-21 00:33:03 +00:00
test_745_code_block_newlines.py fix(renderer): preserve newlines in code blocks during paragraph split (#745) (#746) 2026-04-20 00:04:27 -07:00
test_886_ordered_list_numbering.py fix(renderer): ordered list items always showed 1. — emit value= on each li (#886) (#904) 2026-04-23 12:15:56 -07:00
test_approval_queue.py fix: queue simultaneous approval requests per session (fixes #527) 2026-04-15 19:16:14 +00:00
test_approval_unblock.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_auth_session_persistence.py fix(auth): persist sessions across restarts via STATE_DIR/.sessions.json (#962) 2026-04-24 11:21:41 -07:00
test_auth_sessions.py fix(auth): prune expired sessions on every verify to prevent memory leak (#196) 2026-04-09 18:05:23 -07:00
test_background_tasks.py fix(background): wire completion hook + keep running tasks in tracker 2026-04-24 01:32:47 +00:00
test_batch_fixes.py refactor(ui): three-column layout with left rail + main-view migration (#899) 2026-04-24 09:05:25 -07:00
test_bootstrap_dotenv.py fix: bootstrap.py loads REPO_ROOT/.env so direct invocation matches start.sh (#730) (#791) 2026-04-20 20:55:53 -07:00
test_bugbatch_apr2026.py fix(ux): selected text visible in user message bubbles + CI i18n fix — v0.50.160 (PR #877 by @pavolbiely) 2026-04-23 01:19:21 +00:00
test_byok_model_dropdown.py fix(settings): show live models in default model picker and apply to new chats (#872) (#900) 2026-04-23 09:58:15 -07:00
test_cancel_interrupt.py fix(streaming): eagerly release session lock in cancel_stream() (#778) 2026-04-20 23:54:40 +00:00
test_chinese_locale.py fix i18n review comments and locale test robustness 2026-04-14 17:14:01 +00:00
test_clarify_unblock.py feat: harden clarify dialog flow and refresh recovery 2026-04-15 13:10:50 +08:00
test_cmd_dropdown_scroll_838.py fix(ui): scroll selected item into view on slash command dropdown keyboard navigation (closes #838) 2026-04-21 22:55:09 -07:00
test_commands_endpoint.py feat: slash command parity + skill autocomplete — v0.50.91 (PR #711) 2026-04-19 05:37:44 +00:00
test_credential_pool_providers.py release: v0.50.151 — credential_pool provider detection + Ollama Cloud support (PR #820 by @starship-s) 2026-04-22 20:18:02 +00:00
test_cron_refresh_button_835.py refactor(ui): three-column layout with left rail + main-view migration (#899) 2026-04-24 09:05:25 -07:00
test_custom_provider_display_name.py fix(tests): add autouse cache-isolation fixture to get_available_models test files 2026-04-21 17:41:05 -07:00
test_default_workspace_fallback.py fix: HERMES_WEBUI_DEFAULT_WORKSPACE wins over settings.json; trust DEFAULT_WORKSPACE subtree (#610) 2026-04-16 18:09:16 -07:00
test_font_size_setting.py fix(appearance): font size setting now visibly scales UI text (closes #843) 2026-04-21 23:39:39 -07:00
test_gateway_sync.py fix(sessions): surface gateway SSE failures and add polling fallback (#828) 2026-04-21 21:18:55 -07:00
test_ime_composition.py test: loosen IME guard regression assertions 2026-04-15 23:21:56 +08:00
test_issue341.py feat(theme): replace color scheme system with light/dark + accent skins (PR #627 by @aronprins) 2026-04-18 06:37:09 +00:00
test_issue342.py fix(renderer): prevent double-linking and esc() corruption in renderMd() 2026-04-14 21:13:33 +00:00
test_issue347.py feat: KaTeX math rendering for LaTeX in chat + workspace previews (#352) 2026-04-13 11:40:15 -07:00
test_issue357.py fix: add --chown to Dockerfile COPY so RUN can write api/_version.py (#793) 2026-04-20 21:03:41 -07:00
test_issue401.py feat: redesign chat transcript + fix streaming/persistence lifecycle — v0.50.70 (PR #587 by @aronprins) 2026-04-16 14:04:42 -07:00
test_issue470.py fix(renderer): backtick code spans inside bold/italic no longer get esc'd 2026-04-14 21:14:00 +00:00
test_issue477.py fix(csp): allow cdn.jsdelivr.net for font-src so KaTeX fonts load (fixes #477) 2026-04-14 21:14:33 +00:00
test_issue486_487.py fix: code-in-table CSS sizing + markdown image rendering (#486, #487) 2026-04-14 21:52:34 +00:00
test_issue487b.py fix(review): 4 issues found in agent review of PR #535 2026-04-16 00:00:22 +00:00
test_issue569_579.py feat(ui): add sidebar density mode to session list (#764) 2026-04-20 19:43:40 +00:00
test_issue570_permission.py fix: catch OSError from SETTINGS_FILE.exists() — Docker UID-mismatch 500 crash (#614) 2026-04-16 20:16:07 -07:00
test_issue572.py feat: MCP toolsets in WebUI + onboarding fix for non-standard providers — v0.50.63 2026-04-15 23:39:07 -07:00
test_issue607.py fix(streaming): strip Gemma 4 thinking token delimiter in all paths — closes #607 2026-04-18 06:45:39 +00:00
test_issue609.py fix: HERMES_WEBUI_DEFAULT_WORKSPACE wins over settings.json; trust DEFAULT_WORKSPACE subtree (#610) 2026-04-16 18:09:16 -07:00
test_issue616.py refactor(ui): three-column layout with left rail + main-view migration (#899) 2026-04-24 09:05:25 -07:00
test_issue632.py feat(reasoning): full /reasoning CLI parity — show|hide + effort levels via config.yaml (#812) 2026-04-21 15:26:52 -07:00
test_issue634.py fix(sessions): surface get_cli_sessions() failures via logger.warning (#769) 2026-04-20 23:13:54 +00:00
test_issue644.py fix(tests): add autouse cache-isolation fixture to get_available_models test files 2026-04-21 17:41:05 -07:00
test_issue646.py fix(config): default model empty string — no unavailable OpenAI model for non-OpenAI users — closes #646 (PR #649) 2026-04-18 06:46:43 +00:00
test_issue660.py fix(ui): persist session queue to sessionStorage across page refresh (#768) 2026-04-20 23:04:09 +00:00
test_issue673.py feat(ui): add sidebar density mode to session list (#764) 2026-04-20 19:43:40 +00:00
test_issue677.py fix: streaming scroll override, Gemini 3.x models, read-only workspace, two-container UID — v0.50.87 (closes #677 #669 #670 #668) 2026-04-18 17:09:59 +00:00
test_issue739_652_653.py fix(streaming): quota error detection, error persistence, stream_end session_id fix (#767) 2026-04-20 22:48:19 +00:00
test_issue744.py fix(ui): restrict edit to latest user message (#747) 2026-04-19 23:11:49 -07:00
test_issue765_streaming_persistence.py fix: harden session persistence and per-session lock handling during streaming (v0.50.175, #910) (#910) 2026-04-23 14:25:43 -07:00
test_issue781.py fix(ui): hide duplicate close button in workspace header at mobile width (#783) 2026-04-21 00:58:02 +00:00
test_issue789.py fix(sessions): new sessions appear immediately in sidebar (#806) 2026-04-21 17:08:52 +00:00
test_issue798.py feat(ui): session attention indicators — streaming spinner, unread dot, timestamps (#856) 2026-04-23 09:05:57 -07:00
test_issue803.py fix: correct webui profile switching state — v0.50.150 (PR #849 by @migueltavares) 2026-04-22 16:27:01 +00:00
test_issue840_slash_echo.py fix(ui): slash command input now echoed as user message in chat (closes #840) 2026-04-21 23:08:24 -07:00
test_issue852_thinking_card_mirror.py fix: thinking card no longer mirrors main response — v0.50.154 (closes #852) 2026-04-22 20:21:42 +00:00
test_issue854_live_model_prefix.py fix(settings): show live models in default model picker and apply to new chats (#872) (#900) 2026-04-23 09:58:15 -07:00
test_issue856_active_session_read_state.py feat(ui): session attention indicators — streaming spinner, unread dot, timestamps (#856) 2026-04-23 09:05:57 -07:00
test_issue856_pinned_indicator_layout.py feat(ui): session attention indicators — streaming spinner, unread dot, timestamps (#856) 2026-04-23 09:05:57 -07:00
test_issue856_session_streaming_state.py feat(ui): session attention indicators — streaming spinner, unread dot, timestamps (#856) 2026-04-23 09:05:57 -07:00
test_issue893_cancel_preserves_partial.py fix(cancel): preserve partial streamed response on Stop Generation (#893) (#902) 2026-04-23 11:16:59 -07:00
test_issue895_894_nous_prefix.py fix(models): preserve @nous: prefix in settings + fix cross-namespace 404 for Nous (#895 #894) (#901) 2026-04-23 10:44:10 -07:00
test_issue_code_syntax_highlight.py feat(ui): remove mobile bottom nav on phones 2026-04-14 17:13:03 +00:00
test_issues_373_374_375.py fix(streaming): quota error detection, error persistence, stream_end session_id fix (#767) 2026-04-20 22:48:19 +00:00
test_issues_853_857.py fix: image_generate renders inline + auto-title strips thinking preamble — v0.50.152 (closes #853, #857) 2026-04-22 20:20:01 +00:00
test_issues_907_908_909_model_dropdown.py fix(models): duplicate dropdown entries, stale default model, lowercase injected label (#907 #908 #909) (#918) 2026-04-23 14:41:06 -07:00
test_language_precedence.py fix i18n review comments and locale test robustness 2026-04-14 17:14:01 +00:00
test_login_locale.py feat: add full Russian (ru-RU) localization — v0.50.95 (PR #713) 2026-04-19 06:47:24 +00:00
test_media_inline.py feat: support subpath mount via reverse proxy — v0.50.67 (PR #588 by @vcavichini) 2026-04-16 11:20:08 -07:00
test_minimax_provider.py fix(tests): add autouse cache-isolation fixture to get_available_models test files 2026-04-21 17:41:05 -07:00
test_mobile_layout.py feat(ui): remove mobile bottom nav on phones 2026-04-14 17:13:03 +00:00
test_model_resolver.py fix(tests): pin _cfg_mtime=0.0 in except so CI reload_config() guard works 2026-04-21 17:49:10 -07:00
test_nous_portal_routing.py fix: Nous static models use @nous: prefix — v0.50.164 (#885) 2026-04-22 22:56:21 -07:00
test_ollama_model_chip_label_regression.py release: v0.50.151 — credential_pool provider detection + Ollama Cloud support (PR #820 by @starship-s) 2026-04-22 20:18:02 +00:00
test_onboarding_existing_config.py fix: persist onboarding_completed for CLI-configured users on first chat_ready (#922) 2026-04-23 15:46:02 -07:00
test_onboarding_mvp.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_onboarding_network.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_onboarding_static.py feat: support subpath mount via reverse proxy — v0.50.67 (PR #588 by @vcavichini) 2026-04-16 11:20:08 -07:00
test_opencode_providers.py fix(tests): add autouse cache-isolation fixture to get_available_models test files 2026-04-21 17:41:05 -07:00
test_orphaned_tool_messages.py fix: strip orphaned tool messages before sending history to API (fixes #534) 2026-04-15 16:57:31 +00:00
test_profile_default_workspace_823.py fix(workspace): _profileDefaultWorkspace persists after newSession() (#823) 2026-04-21 19:14:31 -07:00
test_profile_env_isolation.py fix(ci): eliminate test_set_key flakiness — v0.50.161 2026-04-23 02:09:37 +00:00
test_profile_path_security.py fix(ci): eliminate test_set_key flakiness — v0.50.161 2026-04-23 02:09:37 +00:00
test_provider_management.py fix(ci): eliminate test_set_key flakiness — v0.50.161 2026-04-23 02:09:37 +00:00
test_provider_mismatch.py fix: keep GET /api/session side-effect free for stale models — v0.50.149 (PR #848 by @franksong2702) 2026-04-22 16:26:48 +00:00
test_pwa_manifest_csp.py fix(csp): add explicit manifest-src 'self' directive (#961) 2026-04-24 10:44:46 -07:00
test_pwa_manifest_sw.py feat: add PWA support (manifest, service worker, install prompt) (#920) 2026-04-23 15:14:21 -07:00
test_quote_entity_mangling.py fix(renderer): stop " mangling inside code blocks (#801) 2026-04-21 16:26:51 +00:00
test_reasoning_chip_btw_fixes.py v0.50.185: /btw stream hardening + .venv bootstrap + /reasoning toast (#935 #939 #941 #942) 2026-04-23 23:25:45 -07:00
test_reasoning_show_hide.py feat(reasoning): full /reasoning CLI parity — show|hide + effort levels via config.yaml (#812) 2026-04-21 15:26:52 -07:00
test_regressions.py feat: incremental streaming markdown via streaming-markdown (v0.50.180, #917) 2026-04-23 23:09:08 +00:00
test_russian_locale.py feat: add full Russian (ru-RU) localization — v0.50.95 (PR #713) 2026-04-19 06:47:24 +00:00
test_security_redaction.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_session_index.py fix: harden session persistence and per-session lock handling during streaming (v0.50.175, #910) (#910) 2026-04-23 14:25:43 -07:00
test_session_ops.py feat: slash command parity + skill autocomplete — v0.50.91 (PR #711) 2026-04-19 05:37:44 +00:00
test_session_search_bfcache_822.py fix(ui): clear session search on boot + autocomplete=off + pageshow bfcache handler (closes #822) 2026-04-21 22:11:32 -07:00
test_session_sidebar_relative_time.py chore: CHANGELOG + v0.50.64 badge + Today-bucket test (post-merge follow-up for #584) 2026-04-16 10:09:51 -07:00
test_session_summary_redaction.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_settings_navigation_and_detail_refresh.py refactor(ui): three-column layout with left rail + main-view migration (#899) 2026-04-24 09:05:25 -07:00
test_spanish_locale.py feat(i18n): add Spanish locale for WebUI (#275) 2026-04-11 20:06:37 -07:00
test_sprint1.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint2.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint3.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint4.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint5.py feat(workspaces): autocomplete trusted workspace paths — v0.50.162 (PR #880 by @franksong2702, closes #616) 2026-04-23 02:35:58 +00:00
test_sprint6.py refactor(ui): three-column layout with left rail + main-view migration (#899) 2026-04-24 09:05:25 -07:00
test_sprint7.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint8.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint9.py feat: support subpath mount via reverse proxy — v0.50.67 (PR #588 by @vcavichini) 2026-04-16 11:20:08 -07:00
test_sprint10.py refactor(ui): three-column layout with left rail + main-view migration (#899) 2026-04-24 09:05:25 -07:00
test_sprint11.py fix(config): default model empty string — no unavailable OpenAI model for non-OpenAI users — closes #646 (PR #649) 2026-04-18 06:46:43 +00:00
test_sprint12.py fix(models): preserve @nous: prefix in settings + fix cross-namespace 404 for Nous (#895 #894) (#901) 2026-04-23 10:44:10 -07:00
test_sprint13.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint14.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint15.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint16.py feat(theme): replace color scheme system with light/dark + accent skins (PR #627 by @aronprins) 2026-04-18 06:37:09 +00:00
test_sprint17.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint19.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint20.py feat(theme): replace color scheme system with light/dark + accent skins (PR #627 by @aronprins) 2026-04-18 06:37:09 +00:00
test_sprint20b.py feat(theme): replace color scheme system with light/dark + accent skins (PR #627 by @aronprins) 2026-04-18 06:37:09 +00:00
test_sprint23.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint26.py feat(theme): replace color scheme system with light/dark + accent skins (PR #627 by @aronprins) 2026-04-18 06:37:09 +00:00
test_sprint27.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint28.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint29.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint30.py feat: harden clarify dialog flow and refresh recovery 2026-04-15 13:10:50 +08:00
test_sprint31.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint32.py fix(security): gate auto-install behind HERMES_WEBUI_AUTO_INSTALL=1 — v0.50.156 2026-04-22 20:49:28 +00:00
test_sprint33.py v0.47.0: dialogs, session menu, /skills, mobile fixes, mobile QA suite 2026-04-11 12:19:12 -07:00
test_sprint34.py refactor(ui): three-column layout with left rail + main-view migration (#899) 2026-04-24 09:05:25 -07:00
test_sprint35.py fix+feat: session title guard + breadcrumb nav + wider panel + responsive msgs (closes #300, #292) 2026-04-12 10:51:48 -07:00
test_sprint36.py fix: correct message ordering after task cancellation — v0.50.163 (#883) 2026-04-22 22:17:40 -07:00
test_sprint37.py feat: redesign chat transcript + fix streaming/persistence lifecycle — v0.50.70 (PR #587 by @aronprins) 2026-04-16 14:04:42 -07:00
test_sprint38.py fix(streaming): strip Gemma 4 thinking token delimiter in all paths — closes #607 2026-04-18 06:45:39 +00:00
test_sprint39.py fix: HERMES_WEBUI_SKIP_ONBOARDING unconditional + guard against config writes + 10 skipped tests fixed — v0.50.65 2026-04-16 10:19:10 -07:00
test_sprint40.py feat: OAuth provider onboarding path — Codex/Copilot no longer blocks setup (#331) 2026-04-12 14:28:16 -07:00
test_sprint40_ui_polish.py fix: correct webui profile switching state — v0.50.150 (PR #849 by @migueltavares) 2026-04-22 16:27:01 +00:00
test_sprint41.py fix: harden session persistence and per-session lock handling during streaming (v0.50.175, #910) (#910) 2026-04-23 14:25:43 -07:00
test_sprint42.py fix(streaming): guard newer AIAgent kwargs with inspect for hermes-agent compat (#775) 2026-04-20 23:23:19 +00:00
test_sprint43.py security: bandit fixes B310/B324/B110 + QuietHTTPServer (#354) 2026-04-13 11:11:56 -07:00
test_sprint44.py fix: workspace panel close button — no duplicate X on desktop, mobile X respects file preview (#414) 2026-04-13 23:25:26 -07:00
test_sprint45.py fix(tests): auto-derive unique port+state-dir per worktree (fixes parallel pytest) 2026-04-14 19:04:48 +00:00
test_sprint46.py fix(compress): prefer persisted reference handoff after completion — v0.50.90 (PR #699 by @franksong2702) 2026-04-19 04:29:07 +00:00
test_sprint47.py feat: slash command parity + skill autocomplete — v0.50.91 (PR #711) 2026-04-19 05:37:44 +00:00
test_sprint48.py fix(streaming): strip malformed DSML function_calls tags (#958) 2026-04-24 11:04:16 -07:00
test_sprint49.py fix(ui): hover-only footer chrome with timestamps for both user and assistant — v0.50.110 (fixes #680) (#758) 2026-04-20 00:53:19 -07:00
test_sprint50.py fix(ui): constrain slash autocomplete width to composer — v0.50.98 (closes #633) (#750) 2026-04-19 23:17:00 -07:00
test_sprint51.py fix(streaming): eagerly release session lock in cancel_stream() (#778) 2026-04-20 23:54:40 +00:00
test_streaming_markdown.py fix(streaming): prevent dropped characters in incremental smd path (#960) 2026-04-24 11:04:32 -07:00
test_streaming_race_fix.py fix: streaming race conditions (#631) + blank-page workspace binding (#804) 2026-04-21 18:47:40 -07:00
test_title_aux_routing.py fix(streaming): respect auxiliary.title_generation config for session titles 2026-04-24 01:07:02 +00:00
test_title_sanitization.py fix: remove hardcoded chinese title heuristics (#887) 2026-04-23 09:45:34 -07:00
test_tls_support.py feat: optional HTTPS/TLS support via cert and key env vars (#199) 2026-04-09 18:08:29 -07:00
test_tool_call_persistence.py feat: redesign chat transcript + fix streaming/persistence lifecycle — v0.50.70 (PR #587 by @aronprins) 2026-04-16 14:04:42 -07:00
test_ttl_cache.py perf: TTL cache for model list + incremental session index (#780) 2026-04-21 00:33:03 +00:00
test_ui_card_animation.py fix(ui): dark-mode user bubbles use subtle tint + thinking card collapsible — v0.50.111 (#759) 2026-04-20 01:12:45 -07:00
test_update_banner_fixes.py fix: poll /health after update instead of blind setTimeout — v0.50.158 (closes #874) 2026-04-23 00:51:12 +00:00
test_update_checker.py v0.44.0: approval fix, login CSP, update diagnostics, Lucide icons 2026-04-10 10:02:28 -07:00
test_updates.py fix: improve self-update git pull diagnostics (#287) 2026-04-12 00:19:33 -07:00
test_version_badge.py fix: dynamic version badge — read from git tag, never hardcoded (#790) 2026-04-20 20:36:53 -07:00
test_voice_transcribe_endpoint.py v0.50.25: mobile scroll, import timestamps, profile security, mic fallback (#404) 2026-04-13 22:11:45 -07:00
test_webui_platform_hint.py fix: identify WebUI sessions as webui platform (#948) 2026-04-24 11:03:42 -07:00
test_workspace_blank_page_fix.py fix: streaming race conditions (#631) + blank-page workspace binding (#804) 2026-04-21 18:47:40 -07:00