hermes-agent/tests/agent
Drexuxux d135f64b51 fix(curator): protect cron skills referenced by absolute path
4c2961c51 added referenced_skill_names() so the curator never archives a
skill a cron job depends on — paused jobs and infrequent schedules would
otherwise age their skills out and the next run fails to load them.

62972060c then taught the scheduler that jobs may store ABSOLUTE skill
paths, normalizing them through normalize_skill_lookup_name before
skill_view. The protection set kept returning the raw string, so it now
holds a full path while the curator matches it against bare skill names.
Those jobs silently lost their protection: the skill is archived, and the
next fire logs a warning and runs the job without its instructions.

Canonicalize each reference the same way the scheduler resolves it, with
a deferred import and a verbatim fallback so a resolver failure can never
drop a name (referenced_skill_names has exactly one caller, the curator's
protection lookup, so nothing else sees the change).
2026-08-08 06:04:14 -07:00
..
lsp test: patch load_config_readonly alongside load_config across affected suites 2026-07-29 15:28:15 -07:00
transports fix(cache): scope prompt_cache_key by session to stop cross-session bucket sharing 2026-08-05 12:42:46 +05:30
__init__.py
test_account_usage.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_anthropic_adapter.py fix: prefer explicit anthropic api key 2026-08-04 00:12:45 +05:30
test_anthropic_billing_guidance.py
test_anthropic_keychain.py test: guard browser and Keychain side effects suite-wide (#35404) 2026-07-29 18:55:10 -07:00
test_anthropic_kimi_signed_thinking_replay.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_anthropic_kwargs_sanitize.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_anthropic_mcp_prefix_strip.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_anthropic_oauth_pkce.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_anthropic_oauth_ua_prefix.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_anthropic_output_field_leak.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_anthropic_thinking_block_order.py
test_anthropic_token_scope_isolation.py fix(auth): route anthropic adapter credential reads through the profile secret scope 2026-08-01 16:42:51 -07:00
test_anthropic_whitespace_text_blocks.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_api_content_sidecar.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_arcee_trinity_overrides.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_async_token_accounting.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_async_utils.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_aux_progress_streaming.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_anthropic_pool_fallback_regression.py
test_auxiliary_client.py fix(agent): preserve auto-routed provider identity 2026-08-07 16:56:37 +05:30
test_auxiliary_client_anthropic_custom.py
test_auxiliary_client_azure_foundry.py test: pair load_config_readonly stubs at pruned-file sites (post-merge with main's readonly sweep) 2026-07-29 15:37:24 -07:00
test_auxiliary_client_base_url_host_validation_52608.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_client_bootstrap_skew.py
test_auxiliary_client_proxy_env.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_client_resolve_dedup.py
test_auxiliary_client_ssl_verify.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_client_xai_oauth_recovery.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_compression_timeout_floor.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_concurrency.py fix(agent): cap auxiliary LLM concurrency per task 2026-08-03 23:01:03 +05:30
test_auxiliary_config_bridge.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_explicit_cancellation.py fix(compression): let explicit interrupts cancel safely 2026-08-02 22:15:20 +05:30
test_auxiliary_main_first.py test(auxiliary): update _resolve_auto patch to _resolve_auto_route 2026-08-07 16:56:37 +05:30
test_auxiliary_named_custom_providers.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_relay.py Merge updated skill metrics into client resource metrics 2026-08-02 20:12:50 -07:00
test_auxiliary_runtime_cache_key.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_transient_retry.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_transport_autodetect.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_auxiliary_user_default_headers.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_azure_identity_adapter.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_backend_identity.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_battery.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_bedrock_1m_context.py
test_bedrock_adapter.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_bedrock_empty_text_blocks.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_bedrock_integration.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_bedrock_interrupt_post_worker.py Reapply "feat(observability): integrate NeMo Relay runtime and shared metrics" 2026-07-27 21:10:51 -07:00
test_billing_links.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_billing_usage.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_billing_view.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_bounded_response.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_budget_reasoning_details_exclusion.py fix(agent): exclude reasoning_details envelope from tail-budget walk (#73298) 2026-07-31 23:16:58 -07:00
test_cache_disabled_on_stubs.py refactor(agent): share the cache_ttl disable predicate across init and stub paths 2026-08-02 11:52:59 +05:30
test_canon_args_memo_parity.py fix(agent): stop the send-path repair from rewriting persisted history 2026-08-07 16:57:11 +05:30
test_cascading_interrupt_6600.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_chat_completion_helpers_provider_sort.py
test_cjk_token_estimation.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_close_interrupted_tool_sequence.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_codex_app_server_event_bridge.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_codex_app_server_persist.py feat(codex): honor redirect and hard stop in the app-server runtime 2026-07-22 12:02:40 -05:00
test_codex_cloudflare_headers.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_codex_gpt55_autoraise_notice.py test: pair load_config_readonly stubs at pruned-file sites (post-merge with main's readonly sweep) 2026-07-29 15:37:24 -07:00
test_codex_responses_adapter.py fix(codex): defang reserved Harmony tokens in requests 2026-07-31 22:53:20 -07:00
test_codex_runtime_live_events.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_codex_ttfb_watchdog.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_coding_context.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compaction_anti_thrash.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compaction_redaction_boundaries.py fix(compression): apply strict redaction at every compaction text boundary (#69294) 2026-07-22 08:11:40 -07:00
test_compress_context_progress_timeout.py test(agent): deflake progress-extension timing per FLAKY policy (re-review #8) 2026-08-02 16:16:36 -07:00
test_compress_focus.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compress_signal_leak.py fix: prevent stale lock-skip signal leaking between compress_context calls 2026-07-23 08:19:14 -07:00
test_compressed_summary_metadata.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compression_anti_thrash_persistence.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compression_anti_thrash_recovery.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compression_attempt_telemetry.py fix: adapt compression attempt logging to current main aux-call contract 2026-07-22 08:13:41 -07:00
test_compression_concurrent_fork.py fix(cache): make proactive pruning durable and cache-aware 2026-08-06 02:22:08 +05:30
test_compression_count_warning_36908.py
test_compression_fallback_budget.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compression_interrupt_protection.py fix(compression): let explicit interrupts cancel safely 2026-08-02 22:15:20 +05:30
test_compression_logging_session_context.py
test_compression_max_attempts_config.py test: pair load_config_readonly stubs at pruned-file sites (post-merge with main's readonly sweep) 2026-07-29 15:37:24 -07:00
test_compression_orphan_recovery.py fix(sessions): recover compression parents without continuations 2026-08-07 13:24:56 +05:30
test_compression_progress.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compression_review_76354.py feat(agent): emit pool_saturated compression-attempt telemetry (re-review #6) 2026-08-02 16:16:36 -07:00
test_compression_rotation_state.py fix(agent): clear archived parent's activity labels after rotation (re-review #4) 2026-08-02 16:16:36 -07:00
test_compression_small_ctx_threshold_floor.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compression_worker_isolation_76354.py test: skip live aux feasibility probe in worker-isolation regressions 2026-08-02 16:16:36 -07:00
test_compressor_actionable_tail_anchor.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compressor_assistant_tail_anchor.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compressor_historical_media.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compressor_image_tokens.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compressor_media_stripping.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compressor_tail_cut_oob_fix.py test(agent): add compress()-level E2E regression for short tool-suffix OOB (#75588) 2026-07-31 23:16:58 -07:00
test_compressor_tail_cut_tool_pair_floor.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compressor_tool_call_budget.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_compressor_zero_user_guard.py fix(agent): preserve a non-empty user query after compression 2026-07-31 23:16:58 -07:00
test_context_breakdown.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_context_compressor.py refactor(compression): fold simplify findings — dedup floor constant, drift-guard test 2026-08-08 14:27:31 +05:30
test_context_compressor_cross_session_guard.py
test_context_compressor_session_end_clears_state.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_context_compressor_summary_continuity.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_context_compressor_temporal_anchoring.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_context_compressor_zero_user_provenance.py fix(agent): treat max-iteration nudge as synthetic during compaction 2026-08-08 14:24:39 +05:30
test_context_engine.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_context_engine_host_contract.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_context_engine_on_turn_complete_usage.py docs+test(context-engine): sync public guide coverage note; pin finalization-seam observation contract 2026-07-23 19:44:35 -07:00
test_context_engine_select_context.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_context_references.py fix(docker): read attached binary files in backend (#76577) 2026-08-08 05:44:18 -07:00
test_context_refs_concurrent.py test: prove concurrency with barriers/witnesses instead of wall-clock bounds 2026-07-29 21:30:53 -07:00
test_context_route_mismatch.py test(gateway): cover named-custom context pin on session-info banner 2026-08-04 11:00:04 +05:30
test_copilot_acp_client.py fix(test): hermetic env-detection tests — pin container/supervisor/HOME probes (#422) 2026-07-29 18:55:10 -07:00
test_copilot_acp_deprecation.py
test_credential_pool.py fix(credential_pool): classify copilot sources by exact match 2026-08-03 15:56:39 +05:30
test_credential_pool_deferred_refresh.py fix(credential_pool): serialize deferred-refresh pool mutations 2026-08-03 19:08:09 +05:30
test_credential_pool_key_rotation.py fix(credential-pool): clear exhaustion state on key rotation (#22622) 2026-08-04 11:35:06 -06:00
test_credential_pool_lease_refresh_reselect.py fix(credential-pool): re-select in acquire_lease after a deferred refresh 2026-08-04 13:12:24 +05:30
test_credential_pool_no_entries_log_throttle.py fix(credential-pool): throttle "no available entries" log to stop Windows log-lock storm (contributes to #62698) (#66338) 2026-07-17 13:08:46 -04:00
test_credential_pool_oat_authtype.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_credential_pool_oauth_writethrough.py fix(auth): apply same source-path write-through fix to non-pool xAI path 2026-07-31 22:32:48 -07:00
test_credential_pool_provider_boundary.py
test_credential_pool_quarantine_locking.py fix(credential-pool): lock the quarantine read-modify-write of _entries 2026-08-04 13:20:15 +05:30
test_credential_pool_routing.py fix(credential-pool): bench a billing 403 fully, even as the sole key 2026-08-04 23:33:39 +05:30
test_credential_pool_sole_cooldown.py fix(credential-pool): bench a billing 403 fully, even as the sole key 2026-08-04 23:33:39 +05:30
test_credential_pool_unmatched_rotation_bound.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_credits_cold_start.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_credits_fixture_snapshot.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_credits_policy.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_credits_tracker.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_credits_view.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_cron_inline_api_call_62151.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_crossloop_client_cache.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_curator.py fix(curator): protect cron skills referenced by absolute path 2026-08-08 06:04:14 -07:00
test_curator_activity.py
test_curator_backup.py fix(curator): restore the real skills tree when a rollback extract dies part-way 2026-07-31 22:34:57 -07:00
test_curator_classification.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_curator_reports.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_cursor_optimizations_parity.py perf(state): batch the turn flush into one SQLite transaction 2026-08-03 20:43:38 +05:30
test_custom_pool_mismatch_guard.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_custom_provider_extra_body.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_custom_provider_extra_body_matching.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_custom_providers_vision.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_deepseek_anthropic_thinking.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_direct_provider_url_detection.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_display.py refactor(discord): simplify tool preview links 2026-08-02 21:48:06 -07:00
test_display_emoji.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_display_todo_progress.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_display_tool_failure.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_empty_tool_name_loop_dampening.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_endpoint_blackhole.py fix(agent): stop re-probing endpoints that blackhole TCP connects 2026-08-03 21:53:13 +05:30
test_engine_preflight_wire.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_error_classifier.py fix(models): a model id missing its vendor prefix says so instead of 404ing (#78856) 2026-08-04 19:35:57 +00:00
test_external_skills.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_external_skills_dirs_cache.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_failover_identity.py perf(prompt-caching): preserve tool-loop cache boundaries (#20880) 2026-08-01 14:27:12 +05:30
test_file_safety.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_file_safety_container_mirror.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_file_safety_credentials.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_file_safety_cross_profile.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_file_safety_sandbox_mirror.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_file_safety_session_state.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_gateway_turn_sidecar.py perf(gateway): byte-stable session context prompts 2026-07-19 14:58:59 +05:30
test_gemini_fast_fallback.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_gemini_free_tier_gate.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_gemini_native_adapter.py fix(gemini): interpose placeholder model turn between tool result and user text 2026-08-05 17:21:01 -07:00
test_gemini_schema.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_gemini_standard_key_guidance.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_ghost_skill_pruning.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_i18n.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_idle_compaction.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_idle_compaction_lock_and_guards.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_image_gen_registry.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_image_routing.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_insights.py refactor(insights): drop consumer-less get_skill_breakdown alias (simplify-pass) 2026-08-03 18:45:43 +05:30
test_intent_ack_continuation.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_interrupt_compat.py fix(compression): let explicit interrupts cancel safely 2026-08-02 22:15:20 +05:30
test_jiter_preload.py
test_kanban_stop.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_kimi_coding_anthropic_thinking.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_last_total_tokens.py
test_learn_prompt.py fix(learn): process large sources incrementally 2026-08-08 05:09:43 -07:00
test_learning_graph.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_learning_graph_render.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_learning_mutations.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_lmstudio_reasoning.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_local_probe_disk_cache.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_local_stream_timeout.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_manual_compression_feedback.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_markdown_tables.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_memory_async_sync.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_memory_boundary_commit.py test: prove concurrency with barriers/witnesses instead of wall-clock bounds 2026-07-29 21:30:53 -07:00
test_memory_provider.py refactor(memory): single shared trivial-prompt classifier + gate tests 2026-08-03 17:53:55 +05:30
test_memory_session_switch.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_memory_skill_scaffolding.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_memory_user_id.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_memory_write_bridge.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_message_content.py
test_message_sanitization_policy.py refactor(agent): single-owner call_id + reasoning_content sanitization policies (wire-parity verified) 2026-07-29 12:29:39 -07:00
test_micro_compaction.py test(agent): cover reference-only handoff sole-active-turn regression 2026-08-07 19:44:35 +05:30
test_minimax_auxiliary_url.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_minimax_provider.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_moa_aggregator_cache_control.py perf(prompt-caching): preserve tool-loop cache boundaries (#20880) 2026-08-01 14:27:12 +05:30
test_moa_aggregator_cost_slot.py
test_moa_cold_start_cache_66793.py perf(moa): cache resolved preset + per-slot runtime to cut cold-start latency (#66793) 2026-08-03 22:43:15 +05:30
test_moa_context_max_tokens.py fix(moa): stop reference_max_tokens from also capping the aggregator 2026-07-23 16:17:27 -07:00
test_moa_progress.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_moa_quiet_reference_output.py fix(moa): scope quiet relay to machine-readable CLI 2026-07-23 18:40:09 -07:00
test_moa_reasoning_effort.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_moa_reference_system_prompt.py chore(moa): add trailing newline to reference-prompt test file 2026-07-23 18:40:09 -07:00
test_moa_slot_api_mode.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_moa_slot_max_tokens.py feat(moa): per-reference-model max_tokens override 2026-07-23 16:17:27 -07:00
test_moa_switch_api_mode.py
test_moa_trace_streamed_capture.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_model_extra_type_guard.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_model_metadata.py fix(agent): fail fast on custom-provider /models auth errors 2026-08-02 22:47:48 +05:30
test_model_metadata_local_ctx.py fix(model_metadata): read llama.cpp context from meta.n_ctx + accept sole model 2026-08-04 11:08:32 +05:30
test_model_metadata_ssl.py fix(tests): eliminate flaky/broken tests — shadow sys.path inserts, unmocked network in compressor tests, stale-SDK feishu pin guard, quadratic redact regexes 2026-07-29 15:12:28 -07:00
test_models_dev.py Revert "remove Vercel AI Gateway and Vercel Sandbox (#33067)" 2026-07-29 19:48:37 -07:00
test_moonshot_schema.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_non_stream_stale_timeout.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_none_deref_guards.py
test_nous_credits_gauge.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_nous_credits_snapshot.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_nous_oauth_401_guidance.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_nous_portal_anthropic_wire.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_nous_rate_guard.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_onboarding.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_oneshot.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_openrouter_response_cache.py test: pair load_config_readonly stubs at pruned-file sites (post-merge with main's readonly sweep) 2026-07-29 15:37:24 -07:00
test_org_skill_namespace.py refactor(sync): put every Skill Sync verb under `hermes sync`; drop HSP naming 2026-07-29 07:47:06 +10:00
test_outbound_webhooks.py fix(hooks): flush outbound queue at interpreter exit 2026-08-02 15:01:11 -07:00
test_pet_engine.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_pet_generate.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_platform_hint_desktop.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_platform_hint_overrides.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_plugin_llm.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_portal_tags.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_post_compression_trim.py perf(compressor): release allocator pages after successful compaction 2026-08-03 22:55:36 +05:30
test_pre_compress_memory_context.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_preflight_compression_gate.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_preflight_lock_defer.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_proactive_prune_config.py test: pair load_config_readonly stubs at pruned-file sites (post-merge with main's readonly sweep) 2026-07-29 15:37:24 -07:00
test_proactive_prune_restart_safety.py fix(compression): durable-sync the prune runway on model switch + fast no-op for incapable stores 2026-08-06 02:22:08 +05:30
test_proactive_tool_result_pruning.py fix(cache): make proactive pruning durable and cache-aware 2026-08-06 02:22:08 +05:30
test_probe_cache_followups.py fix(model_metadata): rewrite localhost->IPv4 for the remaining local probe sites 2026-08-03 21:12:56 +05:30
test_prompt_builder.py Port from superagent-ai/grok-cli: directory-chain AGENTS.md loading 2026-08-08 04:31:45 -07:00
test_prompt_caching.py fix(prompt-caching): consolidate static-prefix split, guard empty volatile suffix 2026-08-01 15:39:58 +05:30
test_protected_tail_pressure_61932.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_proxy_and_url_validation.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_rate_limit_tracker.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_reactions.py
test_reasoning_stale_timeout_floor.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_reasoning_summaries.py fix(reasoning): keep gpt-5.x summary parts as separate blocks on the chat wire 2026-08-06 22:02:37 -05:00
test_redact.py fix(redact): narrow control-split join guard to line-crossing spans 2026-08-07 17:50:03 +05:30
test_reference_handoff_active_turn.py test(agent): cover reference-only handoff sole-active-turn regression 2026-08-07 19:44:35 +05:30
test_refine_focus.py feat: /refine — run the memory/skill self-improvement review on demand 2026-08-05 22:40:51 -07:00
test_relay_llm.py fix(moa): carry completed responses through the managed Relay path 2026-07-31 21:52:35 -07:00
test_relay_tools.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_replay_cleanup.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_request_client_reuse.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_restore_primary_pool_reselect.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_resume_stale_active_task.py test(agent): cover reference-only handoff sole-active-turn regression 2026-08-07 19:44:35 +05:30
test_rotation_flush_persisted_boundary_68196.py fix(agent): pass persisted-prefix boundary when rotation flushes on cold resume (#68196) 2026-07-21 12:11:31 +05:30
test_runtime_cwd.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_save_url_image.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_secret_scope.py fix(secrets): allowlist API_SERVER listener settings as global deployment env 2026-08-02 09:59:52 -07:00
test_secret_scope_tier1_migration.py test(secrets): consolidated tier-1 migration regression suite 2026-08-02 10:02:33 -07:00
test_send_path_history_isolation.py fix(agent): make the send-path copy structural — close the write-through class 2026-08-07 16:57:11 +05:30
test_session_activity.py chore: round-2 review nits (re-review #9) 2026-08-02 16:16:36 -07:00
test_session_rotation_flush_cold_resume_68454.py test: drop source-grep change-detector from #68480 2026-07-22 10:00:39 +05:30
test_set_runtime_main_custom_provider.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_shell_hooks.py Inspired by Cursor: fail-closed hook semantics + exit-code-2 blocking 2026-08-08 05:02:04 -07:00
test_shell_hooks_consent.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_skill_bundles.py Merge updated tool metrics into skill metrics 2026-07-31 07:30:30 -07:00
test_skill_commands.py Merge updated tool metrics into skill metrics 2026-07-31 07:30:30 -07:00
test_skill_commands_reload.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_skill_invocation_description.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_skill_utils.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_skip_background_review.py fix: follow-up for salvaged PR #18255 2026-08-08 00:07:14 +05:30
test_skip_memory_store_65429.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_ssl_ca_guard.py fix(ssl_guard): tolerate truststore SSLContext.get_ca_certs() NotImplementedError on Windows 2026-08-08 15:10:24 +05:30
test_ssl_verify.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_stream_chunk_byte_estimate.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_stream_read_timeout_floor.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_stream_single_writer_guard.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_streaming_context_scrubber.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_subagent_lifecycle.py fix(compression): let explicit interrupts cancel safely 2026-08-02 22:15:20 +05:30
test_subagent_progress.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_subagent_stop_hook.py feat(delegation): validate batch task quality before spawning children 2026-08-07 08:57:57 -07:00
test_subdirectory_hints.py fix(context): dedupe subdirectory hints by content digest and skip backup/vendor dirs 2026-08-03 20:43:34 +05:30
test_subdirectory_hints_tilde.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_subprocess_env_guard.py refactor: single build_subprocess_env() factory for all child-process spawns (profile + secret-scrub single owner) 2026-07-29 10:14:11 -07:00
test_subscription_view.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_summarize_tool_result_type_safety.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_summary_prefix_semantics.py test(agent): cover reference-only handoff sole-active-turn regression 2026-08-07 19:44:35 +05:30
test_summary_prefix_tool_use.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_summary_role_template_alternation.py fix(compression): choose summary role by template-visible alternation 2026-07-30 21:07:36 +05:30
test_synthetic_turn_display_kind.py fix(agent): type a synthesized user turn when its row is written 2026-07-28 03:54:16 -05:00
test_system_prompt.py fix(agent): fail open on malformed telegram extra config 2026-08-08 13:57:44 +05:30
test_system_prompt_restore.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_think_scrubber.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_thinking_timeout_guidance.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_thread_scoped_output.py fix: preserve session history when a turn crashes 2026-08-06 23:08:23 -05:00
test_title_generator.py test: pair load_config_readonly stubs at pruned-file sites (post-merge with main's readonly sweep) 2026-07-29 15:37:24 -07:00
test_tool_call_arg_no_redaction.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_tool_dispatch_helpers.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_tool_executor_checkpoint_paths.py fix(checkpoints): honor gateway config and task cwd (#68195) 2026-07-20 13:04:12 -07:00
test_tool_guardrails.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_tool_result_classification.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_trace_upload.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_transcription_registry.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_tts_registry.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_turn_context.py refactor(memory): single shared trivial-prompt classifier + gate tests 2026-08-03 17:53:55 +05:30
test_turn_context_overflow_warning.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_turn_finalizer_cleanup_guard.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_turn_finalizer_final_response_persistence.py fix(agent): invalidate flush-scan cursor when finalizer pops db marker 2026-07-31 23:18:12 -07:00
test_turn_finalizer_interrupt_alternation.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_turn_finalizer_iteration_limit_exit.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_turn_overlap_tripwire.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_turn_retry_state.py fix(copilot): follow-ups for salvaged PR #58743 2026-07-31 22:31:09 -07:00
test_turn_summary.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_unsupported_parameter_retry.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_unsupported_temperature_retry.py
test_usage_pricing.py Revert "remove Vercel AI Gateway and Vercel Sandbox (#33067)" 2026-07-29 19:48:37 -07:00
test_verification_evidence.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_verification_evidence_fd_leak.py fix(gateway,tools,agent): close leaked SQLite connections in delivery, delegation, and verification ledgers 2026-07-24 15:55:08 -07:00
test_verification_stop.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_verification_stop_caching.py fix(tests): update two more append_message.call_args assertions to append_messages_batch 2026-08-03 20:43:38 +05:30
test_verify_hooks.py
test_vertex_adapter.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_video_gen_registry.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_vision_resolved_args.py
test_vision_routing_31179.py fix(tests): restore original module identities after vision-routing reloads (#61597) 2026-07-29 18:55:10 -07:00