Skip to content

Latest updates#602

Draft
rmusser01 wants to merge 684 commits into
mainfrom
dev
Draft

Latest updates#602
rmusser01 wants to merge 684 commits into
mainfrom
dev

Conversation

@rmusser01

@rmusser01 rmusser01 commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Summary by cubic

Adds bulk Library export to chatbook zips with live per‑phase progress, Cancel, and safe “zip first, then register” ordering. Also ships Console native attachments (files/images with vision gating and Save Image), multi‑select row export, faster startup by lazy‑loading heavy deps, local server auto‑detect + one‑click connect, safer search, Library conversations that include Console chats, URL/web ingest for articles and media, many stability fixes, and the first Agent Runtime engine (no UI) with persistence and tests.

  • New Features

    • Library export: all‑, scoped‑, or checked‑row export with uncapped id queries; truthful counts; per‑phase progress + Cancel; server‑mode guard; success toasts include creator detail; warn if registry recording fails.
    • Export scope/UI: truncation‑proof full‑id queries; section “Export…” actions pre‑scope the form and re‑check server mode; media quality cycling; safe name/description sanitization.
    • Console attachments: attach legacy file types and images; vision‑capable providers get image send; pending attachments persist and resume; transcript shows image chips with Save Image.
    • Multi‑select: check rows in Media/Conversations/Notes and export exactly those ids.
    • Library persistence: filters survive tab switches; Media viewer detail and row highlight restore on return; instant repeat visits via a short‑TTL, success‑only app‑scoped snapshot cache.
    • Conversations: Browse spans global + workspace (scope_type='all') and uses “saved chat” wording.
    • Console/Settings: Save‑as to Media/Prompt/Chatbook with honest availability and contextual titles; Console unlocks after Settings saves; owned client uses a generous generation read timeout (~300s) and local providers stream by default; provider catalog shows grouped, human names from a shared Chat/provider_catalog.
    • Local servers: auto‑detect local llama.cpp/Ollama, populate models from /v1/models, and one‑click connect with sanitized, escaped model ids (strict localhost‑only detection; only counts valid JSON model lists).
    • URL ingest: Library ingest accepts URLs; web pages use a sync httpx+trafilatura extractor (canonical URL, boilerplate strip, 10 MB streaming guard), and media URLs route to existing transcription processors; precise permanent vs retryable URL errors; ingests preserve the web_article/url_download marker.
    • Search/RAG/Startup/CLI: safe plural/singular matching via FTS5 variant expansion; distinct media FTS input (fts_match_query); quiet “no sources” RAG gate; spawn‑safe launchers (python -m tldw_chatbook, tldw-cli); heavy stacks (torch/transformers/numpy and nltk/scipy/sklearn/pandas) load on first use with regression tests.
    • Agent Runtime (Plan A): pure engine with fence‑first tool protocol, ToolCatalogRegistry (builtin calculator/datetime + find/load/spawn), AgentRunsDB persistence, and AgentService wiring; covered by new unit tests.
  • Bug Fixes

    • Home: Retry/Open target the selected failed item; recent‑only items get an Open control; Pause hidden for ingest jobs; Open Details/Console target the selection; newest‑wins resume row; real readiness counts.
    • Ingestion: cap concurrent audio/video parses via a configurable heavy lane with skip‑ahead; persist job history to SQLite and restore on boot (interrupted → FAILED, with retry counts); preserve detected_type on requeue; contain abrupt worker death; fix PDF analysis call, OCR NameError, and PDF error truthiness; add doc‑processing fallback when docling is unavailable; save‑path bootstraps stay spawn‑safe; web ingest adds streaming body size guard, canonical‑URL validation, and clear permanent URL error classes.
    • Chatbooks/export: serialize registry read‑modify‑write; preserve media type/timestamps; harden importer keyword parsing; warn if artifact registration fails; de‑duplicate auto‑included counts in success messages; escape destination paths and user titles; NoApp‑safe export marshaling; counts worker re‑kicks on restore; targeted form updates avoid focus loss; safe partial cleanup and best‑effort post‑finalize stats.
    • Library/Console/UI: section “Export…” re‑checks server mode; notes list refreshes after ingest; prompt/character import callbacks fire; Enter submits ingest; quiet RAG no‑sources gate and stable action buttons; honest media open labels; empty streaming assistant rows show “Generating…”; composer clears on accepted send; provider failures render as system rows; model line truncates; pane title deduped; splash effects fixed; reduced noisy boot logs; provider test toast is honest; endpoint probes validate input first.

Written for commit 844b272. Summary will update on new commits.

Review in cubic

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: c54d5a31-18dd-4c0b-8b54-7fd69ae400d2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces several correctness fixes, quick wins, and the major 'F4' feature enabling bulk Library export via chatbook zip archives. Key improvements include serializing the chatbook registry read-write operations with a thread lock to prevent concurrency races, fixing Home Retry scoping, and adding a robust, truncation-proof export pipeline for media, conversations, and notes. It also addresses PR 596 review findings by containing ingest pool worker exits, making launchers spawn-lightweight, securing plain-text FTS boundaries (ADR-013), and pruning legacy notes CSS. I have no feedback to provide as there are no review comments to assess.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 2863
  • Passed: 2713 (94.8%)
  • Failed: 0
  • Skipped: 150
  • Total Duration: 4013.26s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 408.62s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 540.95s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 467.88s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 301.74s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 301.97s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 640.16s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 596.58s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 282.73s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 472.62s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 6028
  • Passed: 5682 (94.3%)
  • Failed: 29
  • Skipped: 317
  • Total Duration: 6922.30s

Status: ❌ 29 tests failed

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 257.38s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 620.18s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 495.32s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 265.11s

❌ UI Tests

  • Total: 2790
  • Passed: 2742 (98.3%)
  • Failed: 29
  • Skipped: 19
  • Duration: 2425.04s

Failed Tests:

  • test_console_internals_decomposition.py::test_console_composer_shows_cursor_when_focused
    • Tests/UI/test_console_internals_decomposition.py:523: in test_console_composer_shows_cursor_when_focused
  • test_console_workspace_context_rail.py::test_console_workspace_context_syncs_active_conversation_marker
    • Tests/UI/test_console_workspace_context_rail.py:1219: in test_console_workspace_context_syncs_active_conversation_marker
  • test_latest_dev_core_app_usability_smoke.py::test_latest_dev_core_first_use_routes_exclude_sync_and_persona
    • Tests/UI/test_latest_dev_core_app_usability_smoke.py:135: in test_latest_dev_core_first_use_routes_exclude_sync_and_persona
  • test_library_shell.py::test_library_shell_note_save_result_after_switch_is_discarded
    • Tests/UI/test_library_shell.py:5624: in test_library_shell_note_save_result_after_switch_is_discarded
  • test_library_shell.py::test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
    • Tests/UI/test_library_shell.py:5678: in test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
  • test_library_shell.py::test_library_shell_note_conflict_during_preview_reads_live_text
    • Tests/UI/test_library_shell.py:5728: in test_library_shell_note_conflict_during_preview_reads_live_text
  • test_library_shell.py::test_library_shell_note_conflict_reload_discards_local_edits
    • Tests/UI/test_library_shell.py:5841: in test_library_shell_note_conflict_reload_discards_local_edits
  • test_library_shell.py::test_library_shell_note_conflict_reload_falls_back_to_list_when_note_missing
    • Tests/UI/test_library_shell.py:5895: in test_library_shell_note_conflict_reload_falls_back_to_list_when_note_missing
  • test_library_shell.py::test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
    • Tests/UI/test_library_shell.py:7495: in test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
  • test_library_shell.py::test_library_shell_ingest_canvas_happy_path_open_in_library
    • Tests/UI/test_library_shell.py:8003: in test_library_shell_ingest_canvas_happy_path_open_in_library
  • test_library_shell.py::test_library_shell_ingest_canvas_different_canvas_isolation
    • Tests/UI/test_library_shell.py:8828: in test_library_shell_ingest_canvas_different_canvas_isolation
  • test_library_shell.py::test_library_shell_export_submit_missing_service_surfaces_error_and_reenables
    • Tests/UI/test_library_shell.py:10391: in test_library_shell_export_submit_missing_service_surfaces_error_and_reenables
  • test_master_shell_design_system_contract.py::test_library_mode_chip_selector_is_retired
    • Tests/UI/test_master_shell_design_system_contract.py:182: in test_library_mode_chip_selector_is_retired
  • test_product_maturity_phase1_first_run.py::test_clean_first_run_launches_home_and_exposes_setup_orientation
    • Tests/UI/test_product_maturity_phase1_first_run.py:152: in test_clean_first_run_launches_home_and_exposes_setup_orientation
  • test_product_maturity_phase6_first_time_release_replay.py::test_release_first_time_replay_exposes_home_console_library_and_setup
    • Tests/UI/test_product_maturity_phase6_first_time_release_replay.py:177: in test_release_first_time_replay_exposes_home_console_library_and_setup
  • test_product_maturity_phase6_packaging_data_safety.py::test_phase6_packaging_config_and_data_safety_source_seams_are_present
    • Tests/UI/test_product_maturity_phase6_packaging_data_safety.py:103: in test_phase6_packaging_config_and_data_safety_source_seams_are_present
  • test_product_maturity_phase6_recovery_docs.py::test_phase6_recovery_copy_is_visible_in_running_app
    • Tests/UI/test_product_maturity_phase6_recovery_docs.py:212: in test_phase6_recovery_copy_is_visible_in_running_app
  • test_settings_configuration_hub.py::test_settings_console_behavior_revert_discards_draft
    • Tests/UI/test_settings_configuration_hub.py:3123: in test_settings_console_behavior_revert_discards_draft
  • test_settings_configuration_hub.py::test_settings_diagnostics_test_shortcut_runs_validate_and_reload
    • Tests/UI/test_settings_configuration_hub.py:5021: in test_settings_diagnostics_test_shortcut_runs_validate_and_reload
  • test_tools_settings_window.py::test_chat_api_key_field_prefilled_for_config_key
    • Tests/UI/test_tools_settings_window.py:846: in test_chat_api_key_field_prefilled_for_config_key
  • test_tools_settings_window.py::test_chat_api_key_field_disabled_for_keyless_provider
    • Tests/UI/test_tools_settings_window.py:859: in test_chat_api_key_field_disabled_for_keyless_provider
  • test_tools_settings_window.py::test_chat_api_key_field_reloads_on_provider_change
    • Tests/UI/test_tools_settings_window.py:872: in test_chat_api_key_field_reloads_on_provider_change
  • test_tools_settings_window.py::test_chat_api_key_save_writes_config_and_updates_live_config
    • Tests/UI/test_tools_settings_window.py:897: in test_chat_api_key_save_writes_config_and_updates_live_config
  • test_tools_settings_window.py::test_chat_api_key_field_clears_when_provider_blanked
    • Tests/UI/test_tools_settings_window.py:928: in test_chat_api_key_field_clears_when_provider_blanked
  • test_tools_settings_window.py::test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
    • Tests/UI/test_tools_settings_window.py:959: in test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
  • test_ui_responsiveness.py::test_console_sync_records_worker_lifecycle
    • Tests/UI/test_ui_responsiveness.py:262: in test_console_sync_records_worker_lifecycle
  • test_unified_shell_phase5_recovery_taxonomy.py::test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
    • Tests/UI/test_unified_shell_phase5_recovery_taxonomy.py:259: in test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
  • test_unified_shell_phase6_first_time_replay.py::test_first_time_shell_replay_exposes_home_console_and_orientation_paths
    • Tests/UI/test_unified_shell_phase6_first_time_replay.py:182: in test_first_time_shell_replay_exposes_home_console_and_orientation_paths
  • test_unified_shell_phase6_nielsen_closeout.py::test_nielsen_closeout_replays_core_heuristic_signals_in_running_app
    • Tests/UI/test_unified_shell_phase6_nielsen_closeout.py:114: in test_nielsen_closeout_replays_core_heuristic_signals_in_running_app

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 374.48s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 495.02s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 561.96s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 446.60s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 452.08s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 529.13s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 6028
  • Passed: 5678 (94.2%)
  • Failed: 33
  • Skipped: 317
  • Total Duration: 7288.10s

Status: ❌ 33 tests failed

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 304.51s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 532.75s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 556.70s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 390.21s

❌ UI Tests

  • Total: 2790
  • Passed: 2738 (98.1%)
  • Failed: 33
  • Skipped: 19
  • Duration: 2525.24s

Failed Tests:

  • test_console_live_work_handoffs.py::test_skeletal_destination_console_actions_are_disabled_with_recovery_copy[schedules-schedules-follow-in-console-Unavailable: Console follow for Schedules.]
    • Tests/UI/test_console_live_work_handoffs.py:705: in test_skeletal_destination_console_actions_are_disabled_with_recovery_copy
  • test_console_native_chat_flow.py::test_console_workspace_conversation_search_blank_query_clears_error_cache
    • Tests/UI/test_console_native_chat_flow.py:4734: in test_console_workspace_conversation_search_blank_query_clears_error_cache
  • test_console_workspace_context_rail.py::test_console_workspace_context_syncs_active_conversation_marker
    • Tests/UI/test_console_workspace_context_rail.py:1219: in test_console_workspace_context_syncs_active_conversation_marker
  • test_latest_dev_core_app_usability_smoke.py::test_latest_dev_core_first_use_routes_exclude_sync_and_persona
    • Tests/UI/test_latest_dev_core_app_usability_smoke.py:135: in test_latest_dev_core_first_use_routes_exclude_sync_and_persona
  • test_library_shell.py::test_library_shell_note_save_result_after_switch_is_discarded
    • Tests/UI/test_library_shell.py:5624: in test_library_shell_note_save_result_after_switch_is_discarded
  • test_library_shell.py::test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
    • Tests/UI/test_library_shell.py:5678: in test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
  • test_library_shell.py::test_library_shell_note_conflict_during_preview_reads_live_text
    • Tests/UI/test_library_shell.py:5728: in test_library_shell_note_conflict_during_preview_reads_live_text
  • test_library_shell.py::test_library_shell_note_conflict_reload_discards_local_edits
    • Tests/UI/test_library_shell.py:5841: in test_library_shell_note_conflict_reload_discards_local_edits
  • test_library_shell.py::test_library_shell_note_conflict_overwrite_falls_back_to_list_when_note_missing
    • Tests/UI/test_library_shell.py:5945: in test_library_shell_note_conflict_overwrite_falls_back_to_list_when_note_missing
  • test_library_shell.py::test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
    • Tests/UI/test_library_shell.py:7484: in test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
  • test_library_shell.py::test_library_shell_ingest_canvas_happy_path_open_in_library
    • Tests/UI/test_library_shell.py:8003: in test_library_shell_ingest_canvas_happy_path_open_in_library
  • test_library_shell.py::test_library_shell_ingest_canvas_different_canvas_isolation
    • Tests/UI/test_library_shell.py:8828: in test_library_shell_ingest_canvas_different_canvas_isolation
  • test_library_shell.py::test_library_shell_export_submit_missing_service_surfaces_error_and_reenables
    • Tests/UI/test_library_shell.py:10391: in test_library_shell_export_submit_missing_service_surfaces_error_and_reenables
  • test_master_shell_design_system_contract.py::test_library_mode_chip_selector_is_retired
    • Tests/UI/test_master_shell_design_system_contract.py:182: in test_library_mode_chip_selector_is_retired
  • test_product_maturity_phase1_first_run.py::test_clean_first_run_launches_home_and_exposes_setup_orientation
    • Tests/UI/test_product_maturity_phase1_first_run.py:152: in test_clean_first_run_launches_home_and_exposes_setup_orientation
  • test_product_maturity_phase1_navigation_smoke.py::test_clean_run_top_level_navigation_reaches_every_destination
    • Tests/UI/test_product_maturity_phase1_navigation_smoke.py:132: in test_clean_run_top_level_navigation_reaches_every_destination
  • test_product_maturity_phase6_first_time_release_replay.py::test_release_first_time_replay_exposes_home_console_library_and_setup
    • Tests/UI/test_product_maturity_phase6_first_time_release_replay.py:177: in test_release_first_time_replay_exposes_home_console_library_and_setup
  • test_product_maturity_phase6_packaging_data_safety.py::test_phase6_packaging_config_and_data_safety_source_seams_are_present
    • Tests/UI/test_product_maturity_phase6_packaging_data_safety.py:103: in test_phase6_packaging_config_and_data_safety_source_seams_are_present
  • test_product_maturity_phase6_recovery_docs.py::test_phase6_recovery_copy_is_visible_in_running_app
    • Tests/UI/test_product_maturity_phase6_recovery_docs.py:212: in test_phase6_recovery_copy_is_visible_in_running_app
  • test_settings_configuration_hub.py::test_settings_console_behavior_rejects_invalid_global_defaults[#settings-console-default-min-p-handle_console_default_min_p_changed-1.1-Min P must be between 0.0 and 1.0.]
    • Tests/UI/test_settings_configuration_hub.py:3008: in test_settings_console_behavior_rejects_invalid_global_defaults
  • test_settings_configuration_hub.py::test_settings_provider_category_uses_effective_console_source
    • Tests/UI/test_settings_configuration_hub.py:3197: in test_settings_provider_category_uses_effective_console_source
  • test_settings_configuration_hub.py::test_settings_provider_navigation_context_focuses_api_key_field
    • Tests/UI/test_settings_configuration_hub.py:3264: in test_settings_provider_navigation_context_focuses_api_key_field
  • test_tools_settings_window.py::test_chat_api_key_field_prefilled_for_config_key
    • Tests/UI/test_tools_settings_window.py:846: in test_chat_api_key_field_prefilled_for_config_key
  • test_tools_settings_window.py::test_chat_api_key_field_disabled_for_keyless_provider
    • Tests/UI/test_tools_settings_window.py:859: in test_chat_api_key_field_disabled_for_keyless_provider
  • test_tools_settings_window.py::test_chat_api_key_field_reloads_on_provider_change
    • Tests/UI/test_tools_settings_window.py:872: in test_chat_api_key_field_reloads_on_provider_change
  • test_tools_settings_window.py::test_chat_api_key_save_writes_config_and_updates_live_config
    • Tests/UI/test_tools_settings_window.py:897: in test_chat_api_key_save_writes_config_and_updates_live_config
  • test_tools_settings_window.py::test_chat_api_key_field_clears_when_provider_blanked
    • Tests/UI/test_tools_settings_window.py:928: in test_chat_api_key_field_clears_when_provider_blanked
  • test_tools_settings_window.py::test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
    • Tests/UI/test_tools_settings_window.py:959: in test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
  • test_ui_responsiveness.py::test_console_sync_records_worker_lifecycle
    • Tests/UI/test_ui_responsiveness.py:262: in test_console_sync_records_worker_lifecycle
  • test_unified_shell_phase5_recovery_taxonomy.py::test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
    • Tests/UI/test_unified_shell_phase5_recovery_taxonomy.py:259: in test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
  • test_unified_shell_phase6_first_time_replay.py::test_first_time_shell_replay_exposes_home_console_and_orientation_paths
    • Tests/UI/test_unified_shell_phase6_first_time_replay.py:182: in test_first_time_shell_replay_exposes_home_console_and_orientation_paths
  • test_unified_shell_phase6_nielsen_closeout.py::test_nielsen_closeout_replays_core_heuristic_signals_in_running_app
    • Tests/UI/test_unified_shell_phase6_nielsen_closeout.py:114: in test_nielsen_closeout_replays_core_heuristic_signals_in_running_app
  • test_workbench_visual_snapshots.py::test_console_workbench_command_palette_snapshot
    • Tests/UI/test_workbench_visual_snapshots.py:213: in test_console_workbench_command_palette_snapshot

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 365.62s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 514.25s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 574.38s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 422.43s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 577.05s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 524.96s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 6028
  • Passed: 5682 (94.3%)
  • Failed: 29
  • Skipped: 317
  • Total Duration: 6920.37s

Status: ❌ 29 tests failed

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 277.54s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 512.38s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 574.24s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 320.05s

❌ UI Tests

  • Total: 2790
  • Passed: 2742 (98.3%)
  • Failed: 29
  • Skipped: 19
  • Duration: 2389.69s

Failed Tests:

  • test_console_live_work_handoffs.py::test_skeletal_destination_console_actions_are_disabled_with_recovery_copy[schedules-schedules-follow-in-console-Unavailable: Console follow for Schedules.]
    • Tests/UI/test_console_live_work_handoffs.py:705: in test_skeletal_destination_console_actions_are_disabled_with_recovery_copy
  • test_console_workspace_context_rail.py::test_console_workspace_context_syncs_active_conversation_marker
    • Tests/UI/test_console_workspace_context_rail.py:1219: in test_console_workspace_context_syncs_active_conversation_marker
  • test_latest_dev_core_app_usability_smoke.py::test_latest_dev_core_first_use_routes_exclude_sync_and_persona
    • Tests/UI/test_latest_dev_core_app_usability_smoke.py:135: in test_latest_dev_core_first_use_routes_exclude_sync_and_persona
  • test_library_shell.py::test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
    • Tests/UI/test_library_shell.py:5678: in test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
  • test_library_shell.py::test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
    • Tests/UI/test_library_shell.py:7484: in test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
  • test_library_shell.py::test_library_shell_ingest_canvas_happy_path_open_in_library
    • Tests/UI/test_library_shell.py:7992: in test_library_shell_ingest_canvas_happy_path_open_in_library
  • test_library_shell.py::test_library_shell_ingest_canvas_different_canvas_isolation
    • Tests/UI/test_library_shell.py:8828: in test_library_shell_ingest_canvas_different_canvas_isolation
  • test_master_shell_design_system_contract.py::test_library_mode_chip_selector_is_retired
    • Tests/UI/test_master_shell_design_system_contract.py:182: in test_library_mode_chip_selector_is_retired
  • test_product_maturity_phase1_first_run.py::test_clean_first_run_launches_home_and_exposes_setup_orientation
    • Tests/UI/test_product_maturity_phase1_first_run.py:152: in test_clean_first_run_launches_home_and_exposes_setup_orientation
  • test_product_maturity_phase6_first_time_release_replay.py::test_release_first_time_replay_exposes_home_console_library_and_setup
    • Tests/UI/test_product_maturity_phase6_first_time_release_replay.py:177: in test_release_first_time_replay_exposes_home_console_library_and_setup
  • test_product_maturity_phase6_packaging_data_safety.py::test_phase6_packaging_config_and_data_safety_source_seams_are_present
    • Tests/UI/test_product_maturity_phase6_packaging_data_safety.py:103: in test_phase6_packaging_config_and_data_safety_source_seams_are_present
  • test_product_maturity_phase6_recovery_docs.py::test_phase6_recovery_copy_is_visible_in_running_app
    • Tests/UI/test_product_maturity_phase6_recovery_docs.py:212: in test_phase6_recovery_copy_is_visible_in_running_app
  • test_settings_configuration_hub.py::test_settings_storage_save_and_revert_defaults
    • Tests/UI/test_settings_configuration_hub.py:1134: in test_settings_storage_save_and_revert_defaults
  • test_settings_configuration_hub.py::test_settings_provider_text_inputs_do_not_trigger_footer_shortcuts
    • Tests/UI/test_settings_configuration_hub.py:1734: in test_settings_provider_text_inputs_do_not_trigger_footer_shortcuts
  • test_settings_configuration_hub.py::test_settings_provider_category_renders_catalog_select_with_visible_value
    • Tests/UI/test_settings_configuration_hub.py:3213: in test_settings_provider_category_renders_catalog_select_with_visible_value
  • test_settings_configuration_hub.py::test_settings_provider_navigation_context_focuses_api_key_field
    • Tests/UI/test_settings_configuration_hub.py:3264: in test_settings_provider_navigation_context_focuses_api_key_field
  • test_settings_configuration_hub.py::test_settings_provider_category_blocks_empty_manual_provider_save
    • Tests/UI/test_settings_configuration_hub.py:4336: in test_settings_provider_category_blocks_empty_manual_provider_save
  • test_settings_configuration_hub.py::test_settings_advanced_config_guided_path_buttons_escape_raw_toml
    • Tests/UI/test_settings_configuration_hub.py:5757: in test_settings_advanced_config_guided_path_buttons_escape_raw_toml
  • test_tools_settings_window.py::test_chat_api_key_field_prefilled_for_config_key
    • Tests/UI/test_tools_settings_window.py:846: in test_chat_api_key_field_prefilled_for_config_key
  • test_tools_settings_window.py::test_chat_api_key_field_disabled_for_keyless_provider
    • Tests/UI/test_tools_settings_window.py:859: in test_chat_api_key_field_disabled_for_keyless_provider
  • test_tools_settings_window.py::test_chat_api_key_field_reloads_on_provider_change
    • Tests/UI/test_tools_settings_window.py:872: in test_chat_api_key_field_reloads_on_provider_change
  • test_tools_settings_window.py::test_chat_api_key_save_writes_config_and_updates_live_config
    • Tests/UI/test_tools_settings_window.py:897: in test_chat_api_key_save_writes_config_and_updates_live_config
  • test_tools_settings_window.py::test_chat_api_key_field_clears_when_provider_blanked
    • Tests/UI/test_tools_settings_window.py:928: in test_chat_api_key_field_clears_when_provider_blanked
  • test_tools_settings_window.py::test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
    • Tests/UI/test_tools_settings_window.py:959: in test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
  • test_ui_responsiveness.py::test_console_sync_records_worker_lifecycle
    • Tests/UI/test_ui_responsiveness.py:262: in test_console_sync_records_worker_lifecycle
  • test_unified_shell_phase5_recovery_taxonomy.py::test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
    • Tests/UI/test_unified_shell_phase5_recovery_taxonomy.py:259: in test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
  • test_unified_shell_phase6_first_time_replay.py::test_first_time_shell_replay_exposes_home_console_and_orientation_paths
    • Tests/UI/test_unified_shell_phase6_first_time_replay.py:182: in test_first_time_shell_replay_exposes_home_console_and_orientation_paths
  • test_unified_shell_phase6_nielsen_closeout.py::test_nielsen_closeout_replays_core_heuristic_signals_in_running_app
    • Tests/UI/test_unified_shell_phase6_nielsen_closeout.py:114: in test_nielsen_closeout_replays_core_heuristic_signals_in_running_app
  • test_workbench_visual_snapshots.py::test_console_workbench_command_palette_snapshot
    • Tests/UI/test_workbench_visual_snapshots.py:213: in test_console_workbench_command_palette_snapshot

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 328.37s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 540.87s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 486.84s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 437.88s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 508.45s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 544.06s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4722.20s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 379.59s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 596.89s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 542.49s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 304.35s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 338.18s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 563.41s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 545.26s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 443.05s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 508.19s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 500.79s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4661.12s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 379.98s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 510.60s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 612.96s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 266.67s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 285.15s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 485.35s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 601.79s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 423.69s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 502.95s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 591.98s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4857.74s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 366.09s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 615.29s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 643.80s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 355.37s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 283.80s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 530.56s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 619.02s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 474.06s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 494.59s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 475.18s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4706.68s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 271.45s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 544.15s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 539.41s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 354.09s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 314.75s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 559.10s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 585.91s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 493.98s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 482.17s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 561.66s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 6113
  • Passed: 5770 (94.4%)
  • Failed: 26
  • Skipped: 317
  • Total Duration: 6849.56s

Status: ❌ 26 tests failed

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 293.48s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 523.42s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 502.84s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 245.93s

❌ UI Tests

  • Total: 2875
  • Passed: 2830 (98.4%)
  • Failed: 26
  • Skipped: 19
  • Duration: 2529.02s

Failed Tests:

  • test_console_live_work_handoffs.py::test_skeletal_destination_console_actions_are_disabled_with_recovery_copy[schedules-schedules-follow-in-console-Unavailable: Console follow for Schedules.]
    • Tests/UI/test_console_live_work_handoffs.py:705: in test_skeletal_destination_console_actions_are_disabled_with_recovery_copy
  • test_console_workspace_context_rail.py::test_console_workspace_context_syncs_active_conversation_marker
    • Tests/UI/test_console_workspace_context_rail.py:1244: in test_console_workspace_context_syncs_active_conversation_marker
  • test_library_shell.py::test_library_shell_note_save_result_after_switch_is_discarded
    • Tests/UI/test_library_shell.py:5787: in test_library_shell_note_save_result_after_switch_is_discarded
  • test_library_shell.py::test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
    • Tests/UI/test_library_shell.py:5841: in test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
  • test_library_shell.py::test_library_shell_note_conflict_during_preview_reads_live_text
    • Tests/UI/test_library_shell.py:5891: in test_library_shell_note_conflict_during_preview_reads_live_text
  • test_library_shell.py::test_library_shell_note_conflict_reload_discards_local_edits
    • Tests/UI/test_library_shell.py:6004: in test_library_shell_note_conflict_reload_discards_local_edits
  • test_library_shell.py::test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
    • Tests/UI/test_library_shell.py:7647: in test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
  • test_library_shell.py::test_library_shell_ingest_canvas_happy_path_open_in_library
    • Tests/UI/test_library_shell.py:8166: in test_library_shell_ingest_canvas_happy_path_open_in_library
  • test_library_shell.py::test_library_shell_ingest_canvas_different_canvas_isolation
    • Tests/UI/test_library_shell.py:9040: in test_library_shell_ingest_canvas_different_canvas_isolation
  • test_master_shell_design_system_contract.py::test_library_mode_chip_selector_is_retired
    • Tests/UI/test_master_shell_design_system_contract.py:182: in test_library_mode_chip_selector_is_retired
  • test_product_maturity_phase1_harness.py::test_backlog_task_frontmatter_ids_are_unique
    • Tests/UI/test_product_maturity_phase1_harness.py:118: in test_backlog_task_frontmatter_ids_are_unique
  • test_product_maturity_phase6_first_time_release_replay.py::test_release_first_time_replay_exposes_home_console_library_and_setup
    • Tests/UI/test_product_maturity_phase6_first_time_release_replay.py:177: in test_release_first_time_replay_exposes_home_console_library_and_setup
  • test_product_maturity_phase6_packaging_data_safety.py::test_phase6_packaging_config_and_data_safety_source_seams_are_present
    • Tests/UI/test_product_maturity_phase6_packaging_data_safety.py:103: in test_phase6_packaging_config_and_data_safety_source_seams_are_present
  • test_product_maturity_phase6_recovery_docs.py::test_phase6_recovery_copy_is_visible_in_running_app
    • Tests/UI/test_product_maturity_phase6_recovery_docs.py:212: in test_phase6_recovery_copy_is_visible_in_running_app
  • test_settings_configuration_hub.py::test_settings_inspector_boundary_is_structured_without_duplicate_copy
    • Tests/UI/test_settings_configuration_hub.py:2471: in test_settings_inspector_boundary_is_structured_without_duplicate_copy
  • test_tools_settings_window.py::test_chat_api_key_field_prefilled_for_config_key
    • Tests/UI/test_tools_settings_window.py:846: in test_chat_api_key_field_prefilled_for_config_key
  • test_tools_settings_window.py::test_chat_api_key_field_disabled_for_keyless_provider
    • Tests/UI/test_tools_settings_window.py:859: in test_chat_api_key_field_disabled_for_keyless_provider
  • test_tools_settings_window.py::test_chat_api_key_field_reloads_on_provider_change
    • Tests/UI/test_tools_settings_window.py:872: in test_chat_api_key_field_reloads_on_provider_change
  • test_tools_settings_window.py::test_chat_api_key_save_writes_config_and_updates_live_config
    • Tests/UI/test_tools_settings_window.py:897: in test_chat_api_key_save_writes_config_and_updates_live_config
  • test_tools_settings_window.py::test_chat_api_key_field_clears_when_provider_blanked
    • Tests/UI/test_tools_settings_window.py:928: in test_chat_api_key_field_clears_when_provider_blanked
  • test_tools_settings_window.py::test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
    • Tests/UI/test_tools_settings_window.py:959: in test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
  • test_ui_responsiveness.py::test_console_sync_records_worker_lifecycle
    • Tests/UI/test_ui_responsiveness.py:262: in test_console_sync_records_worker_lifecycle
  • test_unified_shell_phase5_recovery_taxonomy.py::test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
    • Tests/UI/test_unified_shell_phase5_recovery_taxonomy.py:259: in test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
  • test_unified_shell_phase6_first_time_replay.py::test_first_time_shell_replay_exposes_home_console_and_orientation_paths
    • Tests/UI/test_unified_shell_phase6_first_time_replay.py:182: in test_first_time_shell_replay_exposes_home_console_and_orientation_paths
  • test_unified_shell_phase6_nielsen_closeout.py::test_nielsen_closeout_replays_core_heuristic_signals_in_running_app
    • Tests/UI/test_unified_shell_phase6_nielsen_closeout.py:114: in test_nielsen_closeout_replays_core_heuristic_signals_in_running_app
  • test_workbench_visual_snapshots.py::test_console_workbench_command_palette_snapshot
    • Tests/UI/test_workbench_visual_snapshots.py:213: in test_console_workbench_command_palette_snapshot

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 273.39s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 407.62s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 632.62s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 376.53s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 590.69s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 474.03s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4192.44s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 291.01s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 458.82s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 541.65s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 380.98s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 302.98s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 411.44s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 537.24s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 451.94s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 322.84s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 493.54s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4199.99s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 244.62s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 528.20s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 474.53s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 312.66s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 271.93s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 473.54s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 563.31s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 481.69s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 399.66s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 449.85s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4188.36s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 285.03s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 496.25s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 537.49s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 292.72s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 293.15s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 478.48s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 527.38s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 321.68s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 486.57s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 469.59s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4404.21s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 386.72s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 524.03s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 489.03s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 301.41s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 343.57s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 488.64s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 568.90s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 386.85s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 456.67s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 458.39s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 6116
  • Passed: 5775 (94.4%)
  • Failed: 24
  • Skipped: 317
  • Total Duration: 6877.92s

Status: ❌ 24 tests failed

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 364.26s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 500.48s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 422.68s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 253.29s

❌ UI Tests

  • Total: 2878
  • Passed: 2835 (98.5%)
  • Failed: 24
  • Skipped: 19
  • Duration: 2481.48s

Failed Tests:

  • test_console_live_work_handoffs.py::test_skeletal_destination_console_actions_are_disabled_with_recovery_copy[schedules-schedules-follow-in-console-Unavailable: Console follow for Schedules.]
    • Tests/UI/test_console_live_work_handoffs.py:705: in test_skeletal_destination_console_actions_are_disabled_with_recovery_copy
  • test_console_workspace_context_rail.py::test_console_workspace_context_syncs_active_conversation_marker
    • Tests/UI/test_console_workspace_context_rail.py:1244: in test_console_workspace_context_syncs_active_conversation_marker
  • test_library_shell.py::test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
    • Tests/UI/test_library_shell.py:5841: in test_library_shell_note_conflict_shows_overwrite_reload_and_keeps_user_text
  • test_library_shell.py::test_library_shell_note_conflict_reload_discards_local_edits
    • Tests/UI/test_library_shell.py:6004: in test_library_shell_note_conflict_reload_discards_local_edits
  • test_library_shell.py::test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
    • Tests/UI/test_library_shell.py:7647: in test_library_shell_notes_sync_now_calls_recording_service_with_chosen_enums
  • test_library_shell.py::test_library_shell_ingest_canvas_happy_path_open_in_library
    • Tests/UI/test_library_shell.py:8166: in test_library_shell_ingest_canvas_happy_path_open_in_library
  • test_library_shell.py::test_library_shell_ingest_canvas_different_canvas_isolation
    • Tests/UI/test_library_shell.py:9040: in test_library_shell_ingest_canvas_different_canvas_isolation
  • test_library_shell.py::test_library_shell_export_submit_missing_service_surfaces_error_and_reenables
    • Tests/UI/test_library_shell.py:10603: in test_library_shell_export_submit_missing_service_surfaces_error_and_reenables
  • test_master_shell_design_system_contract.py::test_library_mode_chip_selector_is_retired
    • Tests/UI/test_master_shell_design_system_contract.py:182: in test_library_mode_chip_selector_is_retired
  • test_product_maturity_phase1_harness.py::test_backlog_task_frontmatter_ids_are_unique
    • Tests/UI/test_product_maturity_phase1_harness.py:118: in test_backlog_task_frontmatter_ids_are_unique
  • test_product_maturity_phase6_first_time_release_replay.py::test_release_first_time_replay_exposes_home_console_library_and_setup
    • Tests/UI/test_product_maturity_phase6_first_time_release_replay.py:177: in test_release_first_time_replay_exposes_home_console_library_and_setup
  • test_product_maturity_phase6_packaging_data_safety.py::test_phase6_packaging_config_and_data_safety_source_seams_are_present
    • Tests/UI/test_product_maturity_phase6_packaging_data_safety.py:103: in test_phase6_packaging_config_and_data_safety_source_seams_are_present
  • test_product_maturity_phase6_recovery_docs.py::test_phase6_recovery_copy_is_visible_in_running_app
    • Tests/UI/test_product_maturity_phase6_recovery_docs.py:212: in test_phase6_recovery_copy_is_visible_in_running_app
  • test_settings_configuration_hub.py::test_settings_library_rag_save_preserves_mapping_like_app_config
    • Tests/UI/test_settings_configuration_hub.py:1209: in test_settings_library_rag_save_preserves_mapping_like_app_config
  • test_tools_settings_window.py::test_chat_api_key_field_prefilled_for_config_key
    • Tests/UI/test_tools_settings_window.py:846: in test_chat_api_key_field_prefilled_for_config_key
  • test_tools_settings_window.py::test_chat_api_key_field_disabled_for_keyless_provider
    • Tests/UI/test_tools_settings_window.py:859: in test_chat_api_key_field_disabled_for_keyless_provider
  • test_tools_settings_window.py::test_chat_api_key_field_reloads_on_provider_change
    • Tests/UI/test_tools_settings_window.py:872: in test_chat_api_key_field_reloads_on_provider_change
  • test_tools_settings_window.py::test_chat_api_key_save_writes_config_and_updates_live_config
    • Tests/UI/test_tools_settings_window.py:897: in test_chat_api_key_save_writes_config_and_updates_live_config
  • test_tools_settings_window.py::test_chat_api_key_field_clears_when_provider_blanked
    • Tests/UI/test_tools_settings_window.py:928: in test_chat_api_key_field_clears_when_provider_blanked
  • test_tools_settings_window.py::test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
    • Tests/UI/test_tools_settings_window.py:959: in test_chat_api_key_save_pushes_decrypted_key_to_live_config_when_encrypted
  • test_ui_responsiveness.py::test_console_sync_records_worker_lifecycle
    • Tests/UI/test_ui_responsiveness.py:262: in test_console_sync_records_worker_lifecycle
  • test_unified_shell_phase5_recovery_taxonomy.py::test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
    • Tests/UI/test_unified_shell_phase5_recovery_taxonomy.py:259: in test_service_backed_policy_destinations_use_async_workers_without_asyncio_run
  • test_unified_shell_phase6_first_time_replay.py::test_first_time_shell_replay_exposes_home_console_and_orientation_paths
    • Tests/UI/test_unified_shell_phase6_first_time_replay.py:182: in test_first_time_shell_replay_exposes_home_console_and_orientation_paths
  • test_unified_shell_phase6_nielsen_closeout.py::test_nielsen_closeout_replays_core_heuristic_signals_in_running_app
    • Tests/UI/test_unified_shell_phase6_nielsen_closeout.py:114: in test_nielsen_closeout_replays_core_heuristic_signals_in_running_app

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 347.30s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 500.22s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 513.42s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 531.61s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 486.33s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 476.85s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4435.54s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 266.67s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 510.37s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 509.00s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 301.66s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 366.82s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 554.73s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 546.25s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 401.68s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 523.04s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 455.32s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4524.68s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 332.95s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 604.30s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 586.96s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 323.01s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 305.85s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 459.97s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 552.96s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 436.87s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 463.39s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 458.42s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4277.28s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 257.03s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 567.15s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 549.29s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 336.75s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 445.05s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 299.89s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 559.18s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 414.49s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 449.89s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 398.56s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4682.82s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 425.39s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 495.09s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 589.50s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 352.86s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 465.94s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 483.75s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 512.29s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 415.29s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 429.46s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 513.25s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3238
  • Passed: 2940 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4360.19s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 243.29s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 495.08s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 438.52s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 313.52s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 415.10s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 536.89s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 565.24s

✅ Integration Tests 3.11

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 459.18s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 445.72s

✅ Integration Tests 3.12

  • Total: 375
  • Passed: 227 (60.5%)
  • Failed: 0
  • Skipped: 148
  • Duration: 447.65s

@github-actions

Copy link
Copy Markdown

Test Results Summary

Overall Summary

  • Total Tests: 3242
  • Passed: 2944 (90.8%)
  • Failed: 0
  • Skipped: 298
  • Total Duration: 4122.89s

Status: ✅ All tests passed!

✅ Unit Tests macos - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 262.38s

✅ Unit Tests ubuntu - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 473.94s

✅ Unit Tests windows - latest - 3.11

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 487.06s

✅ Unit Tests macos - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 235.17s

✅ Unit Tests macos - latest - 3.12

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 302.79s

✅ Unit Tests ubuntu - latest - 3.13

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 491.62s

✅ Unit Tests windows - latest - 3.12

  • Total: 311
  • Passed: 310 (99.7%)
  • Failed: 0
  • Skipped: 1
  • Duration: 533.18s

✅ Integration Tests 3.11

  • Total: 377
  • Passed: 229 (60.7%)
  • Failed: 0
  • Skipped: 148
  • Duration: 394.00s

✅ Unit Tests ubuntu - latest - 3.11

  • Total: 311
  • Passed: 311 (100.0%)
  • Failed: 0
  • Skipped: 0
  • Duration: 484.36s

✅ Integration Tests 3.12

  • Total: 377
  • Passed: 229 (60.7%)
  • Failed: 0
  • Skipped: 148
  • Duration: 458.40s

rmusser01 and others added 8 commits July 14, 2026 00:21
…iles + markup-safe Versions names (final review)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…/O workers (pre-merge review)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds LibrarySkillsListCanvas (structural copy of the prompts canvas's list
view) plus screen wiring: renders both available_skills (trusted, ✓) and
blocked_skills (needs-review, ⚠) from Task 1's get_context snapshot payload
via Task 2's build_skills_list_state, wired into compose_content's
canvas_kind == "skills" branch with sort (name/status)/filter/row-press
handlers.

Unlike the prompts list (name+secondary packed into one Button label), each
skill row's Button label is just "{glyph} {name}"; the flags/description
line renders as a separate secondary Static right below it, per the brief's
interface. Blocked rows carry an additional library-skill-row-blocked class
(dim, still selectable -- the trust panel needs them visible) and remain
pressable like any other row.

handle_library_skill_row is recording-only for now (mirrors
handle_library_prompt_row's original, pre-editor shape): the in-canvas
skill detail/trust editor is a later task's work, so this just stores the
selected name.

Updated test_library_shell_skills_rail_row_shows_exact_count (stale since
Task 1, when no Skills canvas existed yet) to assert the new canvas renders
populated rows instead of the old empty-canvas landing fallback.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…spector/stats refresh, docstrings

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…/delete

Task 4 of the Skills sub-project: wires the in-canvas SKILL.md detail/trust
editor onto Task 2's pure editor state and Task 3's list canvas.

- handle_library_skill_row now opens the editor (was recording-only);
  create/update/delete route through skills_scope_service (mode="local"),
  with update/delete's expected_version producing a real version-conflict
  banner (Reload-only, per the brief's narrower scope vs. the prompts
  editor's Overwrite+Reload).
- Save's response is already a full skill detail, so a successful save
  rebuilds editor state from that response directly -- no second
  round-trip, and no special-casing needed for save-marks-needs-review
  (the write never passes trust_approved=True, so a previously-trusted
  skill's response already comes back quarantined_modified).
- Trust panel (Unlock / Review changes / Approve) reuses the shipped
  SkillTrustPassphraseModal and mirrors skills_screen.py's
  _call_skill_trust_service/_request_skill_trust_passphrase pattern
  verbatim -- SkillTrustService has no policy_enforcer at all, same as
  that screen.
- user_invocable/disable_model_invocation render as toggle Buttons and
  context as a cycling Button, not Checkbox/Switch/Select -- matches this
  canvas family's own documented render-safety discipline
  (library_notes_canvas.py: Select/Switch don't render reliably here).
- Policy ids skills.detail/create/update/delete.local were already
  registered (server_skills capability's CRUD_ACTIONS) -- confirmed via a
  real ServicePolicyEnforcer regression test, no #620-style gap.
- CSS: field/body/status/warnings/trust-panel styling dual-pinned against
  the prompt editor's own blocks; bundle regenerated.

Tests: Tests/Skills/test_skills_library_flow.py (new, real
LocalSkillsService/SkillsScopeService/SkillTrustService, 7/7 -- all six
brief scenarios + the real-enforcer test); Tests/UI/test_library_skills_canvas.py
extended (32/32, replaced the Task-3 recording-only unit test with two
tests matching the new async open+dirty-veto contract);
Tests/UI/test_library_shell.py full suite green (257/257).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ing (review Critical)

_save_library_skill baked the live Name-input value into the frontmatter but
always wrote under the original directory name (update_skill has no rename
primitive), so the service marked the persisted record
validation_status: "invalid" while the editor still reported "Saved." --
silently corrupting the skill.

Disable the Name Input for existing skills (with a dim hint) and, belt and
braces, force the persisted frontmatter name to stay pinned to the skill's
own directory name on the update path regardless of what the input reports.
Also unify the post-save stale-race guard with _save_library_prompt's
pattern so it applies uniformly to the (still entry-point-less) create
branch too.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ry alias

Library skills canvas: Import row (path Input SKILL.md file OR a skill's
own directory, Browse/Import/Cancel) that always imports ONE skill per
press via skills_scope_service.import_skill/import_skill_file with
trust_approved=False. Uses import_skill(name=<directory name>, ...)
whenever the path is a SKILL.md file or its parent directory, rather than
letting import_skill_file derive the name from the filename -- every real
skill package (e.g. superpowers) names every SKILL.md file identically,
so filename-derivation would produce "skill" for every import regardless
of which skill it actually is. Flat sibling files thread through as
supporting_files; nested subfolders are skipped (schemas' supporting-file
name pattern has no path-separator support).

Retires the standalone Skills master-shell destination, mirroring the
notes/prompts precedent: screen_registry's "skills" ScreenRoute is
replaced with an alias to library; shell_destinations' standalone
ShellDestination is folded into library's legacy_routes; app.py gained a
_LEGACY_ROUTE_LIBRARY_NAV_CONTEXT entry (no dedicated re-entry action
exists, same as "prompts"). skills_screen.py/SkillsScreen are NOT
deleted -- Tests/UI/test_destination_shells.py constructs SkillsScreen
directly via its own harness, independent of screen_registry, and its
trust passphrase modal is still reused by the Library skill editor.

Tests/Skills/test_skills_import.py imports real SKILL.md files copied
from the obra/superpowers skillset (Tests/fixtures/superpowers_skills/,
provenance in its README) through the actual Library Import row.
Findings: the real skillset uses only name+description frontmatter (no
extra fields at all); unrecognized frontmatter fields are silently
dropped, not rejected; nested reference subfolders aren't importable as
supporting files; name-too-long/oversized-content fail cleanly with no
partial write. Full findings in .superpowers/sdd/task-5-report.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Added missing CSS rules for #library-skills-import-path, #library-skills-import-path:focus,
and #library-skills-import-status to match the corresponding prompts import row styling.
Regenerated the bundled stylesheet. Extended test_library_skills_canvas.py with
test_library_skills_import_row_css_blocks_match_prompt_parity() to pin both source
and bundle CSS blocks, preventing regression of the naked-unstyled import row.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
rmusser01 and others added 30 commits July 16, 2026 14:56
… review findings into audit doc

The RAG audit batch (PR #610) and the Library-Prompts batch merged with
colliding task IDs 196-203; the Prompts program is in flight, so the
RAG batch takes fresh IDs 246-256 (dependencies and doc references
updated, renumber note added to the doc).

Also addresses the PR #610 review follow-through: removes the duplicated
Acceptance Criteria heading that the committed suggestion introduced in
the indexing task, and extends the audit's dead-surface inventory with
the verified companion defect - chat_rag_integration's modular layer is
broken in both directions (search() called with kwargs RAGService.search
does not accept -> TypeError; index path calls non-existent
embed_documents -> AttributeError).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…attach

Roleplay P1f: character-level dictionary attachment
…age placeholder, escaped save toasts

TASK-223: submit_draft's gate makes ONE capability decision —
vision_block_reason gains an optional is_capable predicate and the
controller injects its documented module seam, removing the
pre-check-then-recheck divergence where the two seams could disagree
(divergence probe: old shape let the send through, new shape blocks).
TASK-224: image-only user turns whose images all fall outside the
budget (over-cap or non-vision) now emit '[image omitted]' /
'[N images omitted]' instead of vanishing from provider payloads;
captioned messages keep their text fallback.
TASK-225: both Save Image toasts escape the interpolated path
(markup-like dirs render literally).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(console): attachment riders — vision-gate dedup, omitted-image placeholder, escaped save toasts (TASK-223/224/225)
…surements, and fix backlog (tasks 246-262)

Five parallel read-only audits (render/refresh, timers/workers, DB
patterns, startup/imports, non-Console screens) against dev 006345b.
Headliners, all measured: the Console 0.2s streaming tick runs sqlite
queries + unconditional recomposes on the event loop (11-70ms/tick);
Library has 124 whole-screen recomposes while its targeted sync_state
methods have zero callers; ~1.3s of the ~2s cold start is import-time
work for unused features; a commented-out DB log guard stringifies
every query's params (14ms per 3MB image insert). Audit doc maps every
finding to a task with severity, fix shape, and risk; verified-fine
patterns documented so they aren't 'fixed'.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(backlog): renumber RAG audit tasks to 246-256 + PR #610 review follow-through
…ead caveat, FTS semantics note, path convention

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
docs(perf): performance & snappiness audit — findings + fix backlog (tasks 246-262)
…_ERROR, not silent empty done (PR #648 review Minor 1)
…orted tool-call batches, synthesized ids for id-less calls, honest stream annotations
feat(agents): native provider tool-calls with fence-protocol fallback (task-243)
docs(qa): native tool-calls live gate completed — A/B/C PASS on rerun (task-243)
…246)

execute_query built an f-string with str(params) on every single call
regardless of log level, including raw image/document BLOBs (up to 14ms
per 3MB param). loguru has no isEnabledFor(), so the previously-commented
guard couldn't just be restored; instead add a shared DB/sql_logging.py
preview_params() helper (bytes -> length-only, strings truncated, whole
preview capped) and route all four sites through logger.opt(lazy=True)
so nothing is built unless a sink actually admits DEBUG.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…TASK-247)

app.py already calls save_state() explicitly and stores the result before
switching screens away from Console. ChatScreen.on_screen_suspend called
save_state() a second time and discarded the result -- Textual dispatches
its own private _on_screen_suspend independently of a public override, so
deleting the override loses nothing but the redundant O(sessions x
messages) serialization on every tab switch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…(TASK-248)

psutil.Process.cpu_percent(interval=0.1) sleeps the calling thread 100ms
to sample a fresh window. On PerformanceMetricsWidget's sync 2s timer
callback -- Textual's single-threaded event loop -- that's a guaranteed
100ms UI freeze every tick while Embeddings Management is open. Switch to
interval=None (compares against the last sample) at the live call site
plus two latent copies with no current callers (metrics_logger.py,
RAG_Search health_check.py), caching the Process handle in
metrics_logger.py so repeated calls still get accurate deltas.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…K-249)

search_conversations_page matched message content via a correlated
EXISTS(... m.content LIKE '%q%') scan -- a per-candidate table scan with
an index-hostile leading wildcard, measured 1.4->7.8ms per scope with an
active query. Join messages_fts instead, following the same shape already
used correctly by search_messages_by_content. User queries are wrapped as
quoted FTS5 prefix expressions (embedded quotes doubled, trailing *) so
FTS5-syntax-hazard input (bare quotes/asterisks/hyphens/boolean words)
never raises; title and id= matching are unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ction (TASK-250)

_import_conversations let every add_conversation/add_message/
set_message_attachments call commit its own top-level transaction --
~1,500 commits for a 50x30 import. TransactionContextManager is
depth-tracked/reentrant, so wrapping each conversation's writes (not the
whole chatbook, to preserve per-conversation error isolation) in one
outer with db.transaction() collapses that to one commit per
conversation. A failure partway through a conversation's messages now
rolls back that whole conversation instead of leaving a partially
imported one behind -- an isolation improvement, not a behavior change,
since the caller already counted that case as failed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… success accounting, staged attachment I/O, idiomatic FTS MATCH, docstring

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s in correlated EXISTS

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
perf: P0 quick wins — DB log stringify, duplicate save_state, loop-blocking cpu_percent, FTS search, import transactions (TASK-246..250)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant