-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrelease-evidence.json
More file actions
59 lines (59 loc) · 272 KB
/
Copy pathrelease-evidence.json
File metadata and controls
59 lines (59 loc) · 272 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{
"ok": true,
"created_at": "2026-05-31T13:05:41.329510+00:00",
"repo_root": "/Users/teee/dev/teaagent",
"run_profile": "counts-only",
"platform": {
"python": "3.14.4",
"executable": "/Users/teee/dev/teaagent/.venv/bin/python",
"os": "macOS-26.5-arm64-arm-64bit-Mach-O"
},
"git": {
"branch": "codex/plan-exec-2026-05-31",
"commit": "90c92a86b9d3cc119dd4992598e59ede6759b10f",
"dirty": true
},
"pytest_counts": {
"acceptance_collected": 276,
"suite_collected": 2932,
"collect_commands": [
{
"cmd": "/Users/teee/dev/teaagent/.venv/bin/python -m pytest tests/acceptance --collect-only -q",
"exit_code": 0,
"duration_seconds": 0.637,
"stdout": "tests/acceptance/test_a2a_federation_flow.py::A2AFederationFlowAcceptanceTests::test_federated_discovery_routes_by_capability_and_delegates\ntests/acceptance/test_agent_fix_test_review_flow.py::test_agent_fixes_failing_test_and_reports_diff_summary\ntests/acceptance/test_agent_teams_flow.py::test_load_team_defs\ntests/acceptance/test_agent_teams_flow.py::test_team_orchestrator_list\ntests/acceptance/test_agent_teams_flow.py::test_team_orchestrator_run_unknown_team\ntests/acceptance/test_agent_teams_flow.py::test_team_merge_results\ntests/acceptance/test_agent_undo_cli_flow.py::test_agent_undo_restores_last_run_writes\ntests/acceptance/test_agents_md_injection_flow.py::test_hierarchical_agents_md_injection_order\ntests/acceptance/test_agents_md_injection_flow.py::test_fallback_instruction_files_are_loaded\ntests/acceptance/test_anp_adapter_flow.py::test_anp_inbound_to_local_execution_flow\ntests/acceptance/test_anp_adapter_flow.py::test_anp_bidirectional_auto_prefers_local_then_fallback_remote\ntests/acceptance/test_anp_adapter_flow.py::test_anp_remote_route_requires_endpoint\ntests/acceptance/test_anp_adapter_flow.py::test_anp_governed_inbound_destructive_requires_approval\ntests/acceptance/test_anp_adapter_flow.py::test_anp_governed_outbound_budget_and_audit\ntests/acceptance/test_anp_adapter_flow.py::test_opencodezen_go_kimi_fixture_extracts_reasoning_content\ntests/acceptance/test_approval_root_cli_flow.py::test_hitl_preset_applies_when_cwd_differs_from_root\ntests/acceptance/test_audit_chain_integrity_flow.py::test_each_audit_line_is_valid_json\ntests/acceptance/test_audit_chain_integrity_flow.py::test_event_ids_are_unique\ntests/acceptance/test_audit_chain_integrity_flow.py::test_sensitive_values_redacted_in_log\ntests/acceptance/test_audit_chain_integrity_flow.py::test_persisted_log_matches_memory_events\ntests/acceptance/test_audit_chain_integrity_flow.py::test_run_store_audit_file_permissions\ntests/acceptance/test_automation_budget_caps_flow.py::test_reconcile_marks_runtime_cap_exceeded\ntests/acceptance/test_automation_context_from_chain_flow.py::test_automation_context_from_chain_flow\ntests/acceptance/test_automation_foreground_parity_flow.py::test_automation_and_manual_run_share_tool_context_flags\ntests/acceptance/test_automation_permission_and_autopropose_flow.py::test_automation_permission_mode_matrix_flows_into_background_command\ntests/acceptance/test_automation_permission_and_autopropose_flow.py::test_automation_auto_propose_skill_is_idempotent_for_same_run\ntests/acceptance/test_automation_promote_quarantined_flow.py::test_automation_promote_quarantined_flow\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_dry_run_fails_without_acceptance_criteria\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_dry_run_rejects_vague_task\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_background_run_uses_no_auto_skills_by_default\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_run_preserves_selected_skill_and_subagent\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_run_blocks_changed_collector_script\ntests/acceptance/test_automation_status_observability_flow.py::test_automation_status_observability_flow\ntests/acceptance/test_automation_template_dry_run_human_flow.py::test_automation_template_dry_run_human_flow\ntests/acceptance/test_automation_wake_agent_gate_skips_unchanged_flow.py::test_automation_wake_agent_gate_skips_unchanged_flow\ntests/acceptance/test_automation_webhook_delivery_flow.py::test_automation_webhook_delivery_flow\ntests/acceptance/test_backend_adapter_flow.py::test_backend_adapter_fallback_and_code_parse_flow\ntests/acceptance/test_background_attach_resume_notify_flow.py::test_background_start_list_and_session_stream\ntests/acceptance/test_background_attach_resume_notify_flow.py::test_agent_status_notify_flag_invokes_desktop_notify\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_tools_registered\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_tools_are_read_only\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_navigate_no_playwright\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_integration_in_workspace_tools\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_tool_registration_schema_validity\ntests/acceptance/test_cancel_flow.py::test_cancel_token_stops_run_cleanly\ntests/acceptance/test_cancel_flow.py::test_cancelled_run_has_run_started_in_audit\ntests/acceptance/test_cancel_flow.py::test_cancel_token_without_set_runs_normally\ntests/acceptance/test_cli_tui_surface_parity_flow.py::CliTuiSurfaceParityFlowTests::test_daily_json_and_tui_cockpit_share_token_budget_and_runs\ntests/acceptance/test_cli_tui_surface_parity_flow.py::CliTuiSurfaceParityFlowTests::test_session_list_available_from_cli_after_setup\ntests/acceptance/test_cloud_tasks_flow.py::test_cloud_task_submit_poll_cancel\ntests/acceptance/test_cloud_tasks_flow.py::test_cloud_task_cancel\ntests/acceptance/test_cloud_tasks_flow.py::test_cloud_task_store_persistence\ntests/acceptance/test_cloud_tasks_flow.py::test_cloud_task_capabilities\ntests/acceptance/test_code_analysis_lsp_flow.py::test_code_analysis_tools_registered_and_readonly\ntests/acceptance/test_code_analysis_lsp_flow.py::test_extract_candidate_paths_finds_python\ntests/acceptance/test_code_analysis_lsp_flow.py::test_extract_candidate_paths_finds_typescript\ntests/acceptance/test_code_analysis_lsp_flow.py::test_extract_candidate_paths_finds_javascript\ntests/acceptance/test_code_analysis_lsp_flow.py::test_code_analysis_config_from_root_enabled\ntests/acceptance/test_code_analysis_lsp_flow.py::test_tree_sitter_relations_python_file\ntests/acceptance/test_code_analysis_lsp_flow.py::test_code_analysis_tools_not_registered_when_disabled\ntests/acceptance/test_code_analysis_prompt_injection_flow.py::test_code_analysis_prompt_injection_smoke\ntests/acceptance/test_consensus_flow.py::test_consensus_request_vote_attestation_flow\ntests/acceptance/test_consensus_flow.py::test_swarm_pre_approval_executes_consensus_gated_task\ntests/acceptance/test_consensus_flow.py::test_swarm_filters_task_when_consensus_not_reached\ntests/acceptance/test_consensus_flow.py::test_task_matches_pre_approval_patterns\ntests/acceptance/test_consensus_flow.py::test_swarm_async_consensus_executes_after_votes_arrive\ntests/acceptance/test_context_compaction_slo_flow.py::test_should_compact_thresholds\ntests/acceptance/test_context_compaction_slo_flow.py::test_should_compact_zero_max_tokens\ntests/acceptance/test_context_compaction_slo_flow.py::test_get_usage_level_green\ntests/acceptance/test_context_compaction_slo_flow.py::test_get_usage_level_yellow\ntests/acceptance/test_context_compaction_slo_flow.py::test_get_usage_level_red\ntests/acceptance/test_context_compaction_slo_flow.py::test_get_usage_level_unknown\ntests/acceptance/test_context_compaction_slo_flow.py::test_compaction_hints\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_preserves_recent_observations\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_empty_observations\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_fewer_than_recent\ntests/acceptance/test_context_compaction_slo_flow.py::test_check_and_compact_triggers_when_needed\ntests/acceptance/test_context_compaction_slo_flow.py::test_check_and_compact_skips_when_below_threshold\ntests/acceptance/test_context_compaction_slo_flow.py::test_compaction_latency_within_slo\ntests/acceptance/test_context_compaction_slo_flow.py::test_estimate_tokens\ntests/acceptance/test_context_compaction_slo_flow.py::test_semantic_summarization\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_chat_history\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_chat_history_preserves_recent\ntests/acceptance/test_context_compaction_slo_flow.py::test_compression_ratio\ntests/acceptance/test_context_pack_read_only_flow.py::test_preflight_includes_read_only_context_pack_evidence\ntests/acceptance/test_context_pack_read_only_flow.py::test_preflight_graph_rag_includes_hybrid_hits_when_indexed\ntests/acceptance/test_context_pack_read_only_flow.py::test_preflight_graph_rag_includes_knowledge_hits_when_marker_exists\ntests/acceptance/test_context_pack_read_only_flow.py::test_preflight_graph_rag_includes_graphqlite_hits_when_db_exists\ntests/acceptance/test_context_pack_read_only_flow.py::test_read_only_run_still_blocks_writes_with_context_pack_available\ntests/acceptance/test_cost_tracking_flow.py::test_run_result_exposes_token_counts\ntests/acceptance/test_cost_tracking_flow.py::test_run_completed_audit_event_has_cost_fields\ntests/acceptance/test_daily_cli.py::DailyCLIAcceptanceTests::test_daily_cli_brief_is_read_only_and_reports_token_budget\ntests/acceptance/test_daily_cli.py::DailyCLIAcceptanceTests::test_daily_cli_prompt_approval_resume_is_auditable\ntests/acceptance/test_daily_cli.py::DailyCLIAcceptanceTests::test_daily_cli_read_only_run_preflight_and_audit_summary\ntests/acceptance/test_daily_ergonomics_flow.py::test_daily_ergonomics_smoke\ntests/acceptance/test_daily_tui.py::DailyTUIAcceptanceTests::test_daily_tui_chat_memory_progress_and_audit_summary\ntests/acceptance/test_daily_tui.py::DailyTUIAcceptanceTests::test_daily_tui_command_reports_brief\ntests/acceptance/test_daily_tui.py::DailyTUIAcceptanceTests::test_daily_tui_prompt_approval_is_auditable\ntests/acceptance/test_desktop_client_server_session_flow.py::DesktopClientServerSessionFlowTests::test_mcp_http_client_server_and_cli_session_list\ntests/acceptance/test_docs_acceptance_count_accuracy.py::test_acceptance_doc_passed_count_matches_pytest_collect\ntests/acceptance/test_docs_acceptance_count_accuracy.py::test_architecture_matrix_avoids_stale_acceptance_counts\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_provider_missing_exits_with_setup_hint\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_budget_and_permission_errors_include_hints\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_preflight_surfaces_actionable_validation_for_empty_task\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_run_reports_adapter_failure_with_context\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_read_only_run_blocks_workspace_write_via_cli\ntests/acceptance/test_error_remediation_flow.py::test_budget_exceeded_hint_mentions_iterations\ntests/acceptance/test_error_remediation_flow.py::test_tool_permission_hint_mentions_permission_mode\ntests/acceptance/test_error_remediation_flow.py::test_tool_execution_hint_mentions_workspace\ntests/acceptance/test_error_remediation_flow.py::test_run_cancelled_hint_mentions_resume\ntests/acceptance/test_error_remediation_flow.py::test_hints_appear_in_str_representation\ntests/acceptance/test_error_remediation_flow.py::test_custom_hint_replaces_default\ntests/acceptance/test_error_remediation_flow.py::test_all_concrete_errors_have_hints\ntests/acceptance/test_external_tool_manifest_compatibility_flow.py::test_external_mcp_manifest_annotations_and_schema_errors\ntests/acceptance/test_external_tool_manifest_compatibility_flow.py::test_external_skill_package_with_extra_metadata_loads\ntests/acceptance/test_first_hour_e2e_flow.py::test_first_hour_setup_daily_plan_edit_undo\ntests/acceptance/test_first_run_experience_flow.py::test_first_run_init_bootstraps_config_and_agents_md\ntests/acceptance/test_first_run_experience_flow.py::test_first_run_init_preserves_existing_agents_md\ntests/acceptance/test_first_run_experience_flow.py::test_first_run_init_returns_onboarding_checklist\ntests/acceptance/test_first_session_setup_flow.py::test_first_session_setup_smoke\ntests/acceptance/test_first_session_setup_flow.py::test_init_wizard_alias_matches_setup_contract\ntests/acceptance/test_first_session_setup_flow.py::test_run_without_setup_suggests_recovery\ntests/acceptance/test_from_plan_cli_flow.py::test_run_from_plan_records_provenance\ntests/acceptance/test_github_integration_flow.py::test_github_tools_registered\ntests/acceptance/test_github_integration_flow.py::test_github_create_pr_no_token\ntests/acceptance/test_github_integration_flow.py::test_github_list_prs_registration_schema\ntests/acceptance/test_github_integration_flow.py::test_github_ci_status_annotations\ntests/acceptance/test_github_integration_flow.py::test_github_tool_execution_errors\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_compact_available\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_daily_without_adapter\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_exit_returns_false\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_help_command_outputs_text\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_permission_mode_validation\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_pin_file_flow\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_session_new_and_list\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_setup_available\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_split_pane_method\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_state_panel_no_error\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_toggle_toggles_on_off\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_unknown_command_shows_error\ntests/acceptance/test_hook_lifecycle_flow.py::test_pre_hook_veto_blocks_tool\ntests/acceptance/test_hook_lifecycle_flow.py::test_pre_hook_can_modify_arguments\ntests/acceptance/test_hook_lifecycle_flow.py::test_multiple_pre_hooks_run_in_order\ntests/acceptance/test_hook_lifecycle_flow.py::test_pre_hook_error_stops_chain\ntests/acceptance/test_hook_lifecycle_flow.py::test_post_hook_modifies_result\ntests/acceptance/test_hook_lifecycle_flow.py::test_post_hook_no_modification_returns_original\ntests/acceptance/test_hook_lifecycle_flow.py::test_permission_check_deny_blocks_destructive\ntests/acceptance/test_hook_lifecycle_flow.py::test_permission_check_allow_passes_destructive\ntests/acceptance/test_hook_lifecycle_flow.py::test_permission_check_deny_pattern\ntests/acceptance/test_hook_lifecycle_flow.py::test_permission_check_allow_pattern\ntests/acceptance/test_hook_lifecycle_flow.py::test_session_start_hook_fires\ntests/acceptance/test_hook_lifecycle_flow.py::test_hook_registry_disabled_skips_pre_hooks\ntests/acceptance/test_hook_lifecycle_flow.py::test_hook_registry_disabled_skips_post_hooks\ntests/acceptance/test_hook_lifecycle_flow.py::test_pre_compact_hook_modifies_context\ntests/acceptance/test_hook_lifecycle_flow.py::test_all_eight_hook_events_exist\ntests/acceptance/test_live_provider_conformance_flow.py::LiveProviderConformanceFlowAcceptanceTests::test_cli_conformance_exposes_env_gate\ntests/acceptance/test_live_provider_conformance_flow.py::LiveProviderConformanceFlowAcceptanceTests::test_live_conformance_runs_when_required_env_is_set\ntests/acceptance/test_live_provider_conformance_flow.py::LiveProviderConformanceFlowAcceptanceTests::test_live_conformance_skips_without_required_env_and_does_not_call_provider\ntests/acceptance/test_managed_runtime_cloud_task_flow.py::ManagedRuntimeCloudTaskFlowTests::test_cloud_stub_failure_records_managed_task_failed\ntests/acceptance/test_managed_runtime_cloud_task_flow.py::ManagedRuntimeCloudTaskFlowTests::test_cloud_stub_run_poll_cancel_and_audit\ntests/acceptance/test_managed_runtime_cloud_task_flow.py::ManagedRuntimeCloudTaskFlowTests::test_managed_runtime_capabilities_are_explicit_about_optional_sdks\ntests/acceptance/test_managed_runtime_flow.py::ManagedRuntimeFlowAcceptanceTests::test_managed_runtime_receives_tool_context_and_persists_audit\ntests/acceptance/test_mcp_client_flow.py::MCPClientFlowAcceptanceTests::test_mcp_client_auth_session_list_call_and_close_flow\ntests/acceptance/test_memory_auto_curation_flow.py::test_completed_run_auto_curates_memory\ntests/acceptance/test_memory_auto_curation_flow.py::test_auto_curated_memory_deduplicates_identical_summary\ntests/acceptance/test_memory_auto_curation_flow.py::test_auto_curated_memory_not_written_for_pending_approval\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_server_register_and_list\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_server_start_stop\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_dispatch_message\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_adapter_protocol\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_telegram_adapter_import\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_slack_adapter_import\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_discord_adapter_import\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_discord_adapter_protocol\ntests/acceptance/test_model_smoke_gating_flow.py::ModelSmokeGatingFlowAcceptanceTests::test_smoke_runs_when_required_env_is_set\ntests/acceptance/test_model_smoke_gating_flow.py::ModelSmokeGatingFlowAcceptanceTests::test_smoke_skips_without_required_env_and_does_not_call_provider\ntests/acceptance/test_mtime_read_before_write_flow.py::test_read_file_returns_mtime\ntests/acceptance/test_mtime_read_before_write_flow.py::test_write_includes_mtime_on_success\ntests/acceptance/test_mtime_read_before_write_flow.py::test_write_without_mtime_succeeds_unconditionally\ntests/acceptance/test_mtime_read_before_write_flow.py::test_write_blocked_on_mtime_mismatch\ntests/acceptance/test_mtime_read_before_write_flow.py::test_write_succeeds_when_mtime_matches\ntests/acceptance/test_mtime_read_before_write_flow.py::test_mtime_guard_new_file_creation\ntests/acceptance/test_no_agent_automation_delivers_script_output_flow.py::test_no_agent_automation_delivers_script_output_flow\ntests/acceptance/test_no_agent_automation_delivers_script_output_flow.py::test_collector_failure_does_not_wake_agent\ntests/acceptance/test_p0_slo_flow.py::test_p0_slo_for_run_approval_resume_and_heartbeat\ntests/acceptance/test_p0_slo_flow.py::test_p0_slo_audit_write_failure_degradation\ntests/acceptance/test_p0_slo_flow.py::test_p0_slo_model_timeout_retry\ntests/acceptance/test_p0_slo_flow.py::test_p0_slo_run_observer_streams_metrics\ntests/acceptance/test_plan_cli_flow.py::test_plan_cli_writes_artifact\ntests/acceptance/test_plan_mode_read_only_flow.py::test_read_only_plan_mode_allows_inspection_and_returns_planning_metadata\ntests/acceptance/test_plan_mode_read_only_flow.py::test_read_only_plan_mode_blocks_workspace_write\ntests/acceptance/test_plan_mode_read_only_flow.py::test_read_only_plan_mode_blocks_shell_mutation\ntests/acceptance/test_plugin_install_security_flow.py::test_candidate_artifacts_required_before_install\ntests/acceptance/test_policy_as_code_flow.py::test_policy_yaml_loaded_from_workspace\ntests/acceptance/test_policy_as_code_flow.py::test_deny_rule_blocks_matching_tool_in_runner\ntests/acceptance/test_policy_as_code_flow.py::test_deny_rule_does_not_block_non_matching_tool\ntests/acceptance/test_policy_as_code_flow.py::test_deny_rule_fires_in_danger_full_access_mode\ntests/acceptance/test_policy_denial_reason_code_flow.py::test_denied_audit_event_includes_reason_code\ntests/acceptance/test_policy_denial_reason_code_flow.py::test_why_denied_cli_surfaces_reason_code\ntests/acceptance/test_policy_denial_reason_code_flow.py::test_tool_permission_error_carries_reason_code\ntests/acceptance/test_protected_paths_flow.py::test_build_protected_dir_rules_returns_git_and_teaagent\ntests/acceptance/test_protected_paths_flow.py::test_protected_rules_block_git_path\ntests/acceptance/test_protected_paths_flow.py::test_protected_rules_block_teaagent_path\ntests/acceptance/test_protected_paths_flow.py::test_protected_rules_allow_normal_paths\ntests/acceptance/test_protected_paths_flow.py::test_load_file_policy_includes_protected_dirs_by_default\ntests/acceptance/test_protected_paths_flow.py::test_load_file_policy_without_protected_dirs\ntests/acceptance/test_protected_paths_flow.py::test_user_rules_combined_with_protected_dirs\ntests/acceptance/test_protected_paths_flow.py::test_protected_rule_does_not_block_read\ntests/acceptance/test_provenance_gate_blocks_untrusted_skill_or_cron_write_flow.py::test_provenance_gate_blocks_untrusted_automation_and_memory_writes\ntests/acceptance/test_provider_matrix_consistency_flow.py::test_provider_registry_matches_docs_and_cli_output\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_all_tools_registered\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_name_prefix_filter\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_destructive_annotation_propagated\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_rate_limit_applied_to_all_remote_tools\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_remote_tool_callable\ntests/acceptance/test_repo_map_quality_large_repo_flow.py::test_large_repo_context_pack_hits_target_file_within_slo\ntests/acceptance/test_repo_map_quality_large_repo_flow.py::test_large_repo_context_pack_promotes_index_hit_without_path_mention\ntests/acceptance/test_run_undo_acceptance_flow.py::test_run_undo_restores_workspace_after_agent_writes\ntests/acceptance/test_run_undo_failed_write_flow.py::test_failed_write_does_not_persist_undo_journal\ntests/acceptance/test_sandbox_enhancement_flow.py::test_auto_isolation_mode_is_supported\ntests/acceptance/test_sandbox_enhancement_flow.py::test_plan_skill_isolation_low_risk_uses_directory_snapshot\ntests/acceptance/test_sandbox_enhancement_flow.py::test_plan_skill_isolation_medium_risk_uses_docker\ntests/acceptance/test_sandbox_enhancement_flow.py::test_isolation_for_sandbox_type_mapping\ntests/acceptance/test_sandbox_enhancement_flow.py::test_skill_router_docker_config_applied_to_plan\ntests/acceptance/test_sandbox_enhancement_flow.py::test_execute_skill_routes_and_runs_low_risk_tool\ntests/acceptance/test_selected_skills_prevent_eager_skill_prompt_bloat_flow.py::test_no_auto_skills_keeps_prompt_ledger_at_zero_tokens\ntests/acceptance/test_session_resume_continuity_flow.py::test_session_resume_preserves_observations_audit_and_memory\ntests/acceptance/test_skill_activation_explain_flow.py::test_skill_activation_explain_flow\ntests/acceptance/test_skill_candidate_contract_policy_provenance_flow.py::test_skill_candidate_contract_policy_provenance_flow\ntests/acceptance/test_skill_candidate_contract_policy_provenance_flow.py::test_personal_skill_candidate_install_requires_attestation\ntests/acceptance/test_skill_candidate_flow.py::test_skill_candidate_propose_review_install_flow\ntests/acceptance/test_skill_candidate_flow.py::test_skill_candidate_review_blocks_unsafe_pattern\ntests/acceptance/test_skill_candidate_offline_eval_flow.py::test_skill_candidate_offline_eval_flow\ntests/acceptance/test_skill_index_only_prompt_flow.py::test_skill_index_only_prompt_excludes_skill_bodies\ntests/acceptance/test_skill_install_flow.py::test_skill_discovered_and_injected\ntests/acceptance/test_skill_install_flow.py::test_multiple_skills_all_appear\ntests/acceptance/test_skill_install_flow.py::test_no_skills_section_absent\ntests/acceptance/test_skill_install_flow.py::test_project_skill_overrides_user_skill\ntests/acceptance/test_skill_install_flow.py::test_skill_reaches_model_system_prompt\ntests/acceptance/test_skill_install_flow.py::test_invalid_skill_is_blocked_from_prompt_injection\ntests/acceptance/test_skill_install_flow.py::test_skill_loader_searches_legacy_and_plural_project_dirs\ntests/acceptance/test_skill_install_flow.py::test_skill_directory_priority_agent_then_claude_then_opencode\ntests/acceptance/test_skill_install_flow.py::test_skill_load_audit_records_search_dirs_and_review_failures\ntests/acceptance/test_skill_install_flow.py::test_skill_load_audit_records_truncation_warning\ntests/acceptance/test_skill_install_flow.py::test_run_chat_agent_uses_configured_skill_search_dirs\ntests/acceptance/test_skill_install_flow.py::test_run_chat_agent_custom_profile_requires_skill_search_dirs\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_publish_and_search\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_list_and_remove\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_get_by_name\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_client_init\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_client_fetch_no_network\ntests/acceptance/test_subagent_definitions_flow.py::test_markdown_frontmatter_agent_definition\ntests/acceptance/test_subagent_definitions_flow.py::test_markdown_without_frontmatter_uses_body_as_prompt\ntests/acceptance/test_subagent_definitions_flow.py::test_yaml_agent_definition\ntests/acceptance/test_subagent_definitions_flow.py::test_json_agent_definition\ntests/acceptance/test_subagent_definitions_flow.py::test_default_isolation_is_shared\ntests/acceptance/test_subagent_definitions_flow.py::test_unsupported_file_extensions_ignored\ntests/acceptance/test_subagent_definitions_flow.py::test_no_subagents_dir_returns_empty\ntests/acceptance/test_subagent_definitions_flow.py::test_disallowedTools_camelcase_accepted\ntests/acceptance/test_subagent_directory_snapshot_isolation_flow.py::SubagentContainerIsolationFlowTests::test_deprecated_container_alias_still_works\ntests/acceptance/test_subagent_directory_snapshot_isolation_flow.py::SubagentContainerIsolationFlowTests::test_subagent_tool_forwards_directory_snapshot_isolation\ntests/acceptance/test_subagent_lineage_flow.py::test_cli_subagent_run_includes_lineage_in_tool_observation\ntests/acceptance/test_subagent_parallel_worktree_merge_flow.py::SubagentParallelWorktreeMergeFlowTests::test_parallel_worktree_children_expose_lineage_for_parent_review\ntests/acceptance/test_subagent_parallel_worktree_merge_flow.py::SubagentParallelWorktreeMergeFlowTests::test_worktree_child_review_patch_can_be_checked_and_applied\ntests/acceptance/test_subagent_worktree_isolation_flow.py::SubagentWorktreeIsolationFlowTests::test_subagent_tool_forwards_worktree_isolation\ntests/acceptance/test_surface_launch_recipes_flow.py::test_surface_recipes_doc_covers_required_surfaces\ntests/acceptance/test_surface_launch_recipes_flow.py::test_documented_smoke_commands_run_locally_without_network\ntests/acceptance/test_ultrawork_flow.py::UltraworkFlowAcceptanceTests::test_ultrawork_start_list_show_logs_and_stop_flow\ntests/acceptance/test_vscode_extension_mcp_boot_flow.py::test_vscode_manifest_and_command_wiring_for_mcp_boot\ntests/acceptance/test_vscode_extension_mcp_boot_flow.py::test_vscode_permission_mode_enum_matches_cli_modes\ntests/acceptance/test_vscode_mcp_runtime_smoke_flow.py::test_vscode_mcp_runtime_smoke_flow\ntests/acceptance/test_webhook_audit_flow.py::test_run_events_delivered_to_webhook\ntests/acceptance/test_webhook_audit_flow.py::test_webhook_hmac_verifiable\ntests/acceptance/test_webhook_audit_flow.py::test_webhook_event_filter_limits_delivery\ntests/acceptance/test_webhook_audit_flow.py::test_webhook_failure_does_not_abort_run\ntests/acceptance/test_workspace_edit_flow.py::WorkspaceEditFlowAcceptanceTests::test_hash_read_edit_git_test_and_diff_summary\n\n276 tests collected in 0.14s\n",
"stderr": ""
},
{
"cmd": "/Users/teee/dev/teaagent/.venv/bin/python -m pytest --collect-only -q",
"exit_code": 0,
"duration_seconds": 1.201,
"stdout": "tests/acceptance/test_a2a_federation_flow.py::A2AFederationFlowAcceptanceTests::test_federated_discovery_routes_by_capability_and_delegates\ntests/acceptance/test_agent_fix_test_review_flow.py::test_agent_fixes_failing_test_and_reports_diff_summary\ntests/acceptance/test_agent_teams_flow.py::test_load_team_defs\ntests/acceptance/test_agent_teams_flow.py::test_team_orchestrator_list\ntests/acceptance/test_agent_teams_flow.py::test_team_orchestrator_run_unknown_team\ntests/acceptance/test_agent_teams_flow.py::test_team_merge_results\ntests/acceptance/test_agent_undo_cli_flow.py::test_agent_undo_restores_last_run_writes\ntests/acceptance/test_agents_md_injection_flow.py::test_hierarchical_agents_md_injection_order\ntests/acceptance/test_agents_md_injection_flow.py::test_fallback_instruction_files_are_loaded\ntests/acceptance/test_anp_adapter_flow.py::test_anp_inbound_to_local_execution_flow\ntests/acceptance/test_anp_adapter_flow.py::test_anp_bidirectional_auto_prefers_local_then_fallback_remote\ntests/acceptance/test_anp_adapter_flow.py::test_anp_remote_route_requires_endpoint\ntests/acceptance/test_anp_adapter_flow.py::test_anp_governed_inbound_destructive_requires_approval\ntests/acceptance/test_anp_adapter_flow.py::test_anp_governed_outbound_budget_and_audit\ntests/acceptance/test_anp_adapter_flow.py::test_opencodezen_go_kimi_fixture_extracts_reasoning_content\ntests/acceptance/test_approval_root_cli_flow.py::test_hitl_preset_applies_when_cwd_differs_from_root\ntests/acceptance/test_audit_chain_integrity_flow.py::test_each_audit_line_is_valid_json\ntests/acceptance/test_audit_chain_integrity_flow.py::test_event_ids_are_unique\ntests/acceptance/test_audit_chain_integrity_flow.py::test_sensitive_values_redacted_in_log\ntests/acceptance/test_audit_chain_integrity_flow.py::test_persisted_log_matches_memory_events\ntests/acceptance/test_audit_chain_integrity_flow.py::test_run_store_audit_file_permissions\ntests/acceptance/test_automation_budget_caps_flow.py::test_reconcile_marks_runtime_cap_exceeded\ntests/acceptance/test_automation_context_from_chain_flow.py::test_automation_context_from_chain_flow\ntests/acceptance/test_automation_foreground_parity_flow.py::test_automation_and_manual_run_share_tool_context_flags\ntests/acceptance/test_automation_permission_and_autopropose_flow.py::test_automation_permission_mode_matrix_flows_into_background_command\ntests/acceptance/test_automation_permission_and_autopropose_flow.py::test_automation_auto_propose_skill_is_idempotent_for_same_run\ntests/acceptance/test_automation_promote_quarantined_flow.py::test_automation_promote_quarantined_flow\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_dry_run_fails_without_acceptance_criteria\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_dry_run_rejects_vague_task\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_background_run_uses_no_auto_skills_by_default\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_run_preserves_selected_skill_and_subagent\ntests/acceptance/test_automation_run_ticket_self_contained_flow.py::test_automation_run_blocks_changed_collector_script\ntests/acceptance/test_automation_status_observability_flow.py::test_automation_status_observability_flow\ntests/acceptance/test_automation_template_dry_run_human_flow.py::test_automation_template_dry_run_human_flow\ntests/acceptance/test_automation_wake_agent_gate_skips_unchanged_flow.py::test_automation_wake_agent_gate_skips_unchanged_flow\ntests/acceptance/test_automation_webhook_delivery_flow.py::test_automation_webhook_delivery_flow\ntests/acceptance/test_backend_adapter_flow.py::test_backend_adapter_fallback_and_code_parse_flow\ntests/acceptance/test_background_attach_resume_notify_flow.py::test_background_start_list_and_session_stream\ntests/acceptance/test_background_attach_resume_notify_flow.py::test_agent_status_notify_flag_invokes_desktop_notify\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_tools_registered\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_tools_are_read_only\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_navigate_no_playwright\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_integration_in_workspace_tools\ntests/acceptance/test_browser_tools_integration_flow.py::test_browser_tool_registration_schema_validity\ntests/acceptance/test_cancel_flow.py::test_cancel_token_stops_run_cleanly\ntests/acceptance/test_cancel_flow.py::test_cancelled_run_has_run_started_in_audit\ntests/acceptance/test_cancel_flow.py::test_cancel_token_without_set_runs_normally\ntests/acceptance/test_cli_tui_surface_parity_flow.py::CliTuiSurfaceParityFlowTests::test_daily_json_and_tui_cockpit_share_token_budget_and_runs\ntests/acceptance/test_cli_tui_surface_parity_flow.py::CliTuiSurfaceParityFlowTests::test_session_list_available_from_cli_after_setup\ntests/acceptance/test_cloud_tasks_flow.py::test_cloud_task_submit_poll_cancel\ntests/acceptance/test_cloud_tasks_flow.py::test_cloud_task_cancel\ntests/acceptance/test_cloud_tasks_flow.py::test_cloud_task_store_persistence\ntests/acceptance/test_cloud_tasks_flow.py::test_cloud_task_capabilities\ntests/acceptance/test_code_analysis_lsp_flow.py::test_code_analysis_tools_registered_and_readonly\ntests/acceptance/test_code_analysis_lsp_flow.py::test_extract_candidate_paths_finds_python\ntests/acceptance/test_code_analysis_lsp_flow.py::test_extract_candidate_paths_finds_typescript\ntests/acceptance/test_code_analysis_lsp_flow.py::test_extract_candidate_paths_finds_javascript\ntests/acceptance/test_code_analysis_lsp_flow.py::test_code_analysis_config_from_root_enabled\ntests/acceptance/test_code_analysis_lsp_flow.py::test_tree_sitter_relations_python_file\ntests/acceptance/test_code_analysis_lsp_flow.py::test_code_analysis_tools_not_registered_when_disabled\ntests/acceptance/test_code_analysis_prompt_injection_flow.py::test_code_analysis_prompt_injection_smoke\ntests/acceptance/test_consensus_flow.py::test_consensus_request_vote_attestation_flow\ntests/acceptance/test_consensus_flow.py::test_swarm_pre_approval_executes_consensus_gated_task\ntests/acceptance/test_consensus_flow.py::test_swarm_filters_task_when_consensus_not_reached\ntests/acceptance/test_consensus_flow.py::test_task_matches_pre_approval_patterns\ntests/acceptance/test_consensus_flow.py::test_swarm_async_consensus_executes_after_votes_arrive\ntests/acceptance/test_context_compaction_slo_flow.py::test_should_compact_thresholds\ntests/acceptance/test_context_compaction_slo_flow.py::test_should_compact_zero_max_tokens\ntests/acceptance/test_context_compaction_slo_flow.py::test_get_usage_level_green\ntests/acceptance/test_context_compaction_slo_flow.py::test_get_usage_level_yellow\ntests/acceptance/test_context_compaction_slo_flow.py::test_get_usage_level_red\ntests/acceptance/test_context_compaction_slo_flow.py::test_get_usage_level_unknown\ntests/acceptance/test_context_compaction_slo_flow.py::test_compaction_hints\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_preserves_recent_observations\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_empty_observations\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_fewer_than_recent\ntests/acceptance/test_context_compaction_slo_flow.py::test_check_and_compact_triggers_when_needed\ntests/acceptance/test_context_compaction_slo_flow.py::test_check_and_compact_skips_when_below_threshold\ntests/acceptance/test_context_compaction_slo_flow.py::test_compaction_latency_within_slo\ntests/acceptance/test_context_compaction_slo_flow.py::test_estimate_tokens\ntests/acceptance/test_context_compaction_slo_flow.py::test_semantic_summarization\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_chat_history\ntests/acceptance/test_context_compaction_slo_flow.py::test_compact_chat_history_preserves_recent\ntests/acceptance/test_context_compaction_slo_flow.py::test_compression_ratio\ntests/acceptance/test_context_pack_read_only_flow.py::test_preflight_includes_read_only_context_pack_evidence\ntests/acceptance/test_context_pack_read_only_flow.py::test_preflight_graph_rag_includes_hybrid_hits_when_indexed\ntests/acceptance/test_context_pack_read_only_flow.py::test_preflight_graph_rag_includes_knowledge_hits_when_marker_exists\ntests/acceptance/test_context_pack_read_only_flow.py::test_preflight_graph_rag_includes_graphqlite_hits_when_db_exists\ntests/acceptance/test_context_pack_read_only_flow.py::test_read_only_run_still_blocks_writes_with_context_pack_available\ntests/acceptance/test_cost_tracking_flow.py::test_run_result_exposes_token_counts\ntests/acceptance/test_cost_tracking_flow.py::test_run_completed_audit_event_has_cost_fields\ntests/acceptance/test_daily_cli.py::DailyCLIAcceptanceTests::test_daily_cli_brief_is_read_only_and_reports_token_budget\ntests/acceptance/test_daily_cli.py::DailyCLIAcceptanceTests::test_daily_cli_prompt_approval_resume_is_auditable\ntests/acceptance/test_daily_cli.py::DailyCLIAcceptanceTests::test_daily_cli_read_only_run_preflight_and_audit_summary\ntests/acceptance/test_daily_ergonomics_flow.py::test_daily_ergonomics_smoke\ntests/acceptance/test_daily_tui.py::DailyTUIAcceptanceTests::test_daily_tui_chat_memory_progress_and_audit_summary\ntests/acceptance/test_daily_tui.py::DailyTUIAcceptanceTests::test_daily_tui_command_reports_brief\ntests/acceptance/test_daily_tui.py::DailyTUIAcceptanceTests::test_daily_tui_prompt_approval_is_auditable\ntests/acceptance/test_desktop_client_server_session_flow.py::DesktopClientServerSessionFlowTests::test_mcp_http_client_server_and_cli_session_list\ntests/acceptance/test_docs_acceptance_count_accuracy.py::test_acceptance_doc_passed_count_matches_pytest_collect\ntests/acceptance/test_docs_acceptance_count_accuracy.py::test_architecture_matrix_avoids_stale_acceptance_counts\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_provider_missing_exits_with_setup_hint\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_budget_and_permission_errors_include_hints\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_preflight_surfaces_actionable_validation_for_empty_task\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_run_reports_adapter_failure_with_context\ntests/acceptance/test_error_recovery_common_misuse_flow.py::test_read_only_run_blocks_workspace_write_via_cli\ntests/acceptance/test_error_remediation_flow.py::test_budget_exceeded_hint_mentions_iterations\ntests/acceptance/test_error_remediation_flow.py::test_tool_permission_hint_mentions_permission_mode\ntests/acceptance/test_error_remediation_flow.py::test_tool_execution_hint_mentions_workspace\ntests/acceptance/test_error_remediation_flow.py::test_run_cancelled_hint_mentions_resume\ntests/acceptance/test_error_remediation_flow.py::test_hints_appear_in_str_representation\ntests/acceptance/test_error_remediation_flow.py::test_custom_hint_replaces_default\ntests/acceptance/test_error_remediation_flow.py::test_all_concrete_errors_have_hints\ntests/acceptance/test_external_tool_manifest_compatibility_flow.py::test_external_mcp_manifest_annotations_and_schema_errors\ntests/acceptance/test_external_tool_manifest_compatibility_flow.py::test_external_skill_package_with_extra_metadata_loads\ntests/acceptance/test_first_hour_e2e_flow.py::test_first_hour_setup_daily_plan_edit_undo\ntests/acceptance/test_first_run_experience_flow.py::test_first_run_init_bootstraps_config_and_agents_md\ntests/acceptance/test_first_run_experience_flow.py::test_first_run_init_preserves_existing_agents_md\ntests/acceptance/test_first_run_experience_flow.py::test_first_run_init_returns_onboarding_checklist\ntests/acceptance/test_first_session_setup_flow.py::test_first_session_setup_smoke\ntests/acceptance/test_first_session_setup_flow.py::test_init_wizard_alias_matches_setup_contract\ntests/acceptance/test_first_session_setup_flow.py::test_run_without_setup_suggests_recovery\ntests/acceptance/test_from_plan_cli_flow.py::test_run_from_plan_records_provenance\ntests/acceptance/test_github_integration_flow.py::test_github_tools_registered\ntests/acceptance/test_github_integration_flow.py::test_github_create_pr_no_token\ntests/acceptance/test_github_integration_flow.py::test_github_list_prs_registration_schema\ntests/acceptance/test_github_integration_flow.py::test_github_ci_status_annotations\ntests/acceptance/test_github_integration_flow.py::test_github_tool_execution_errors\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_compact_available\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_daily_without_adapter\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_exit_returns_false\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_help_command_outputs_text\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_permission_mode_validation\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_pin_file_flow\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_session_new_and_list\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_setup_available\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_split_pane_method\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_state_panel_no_error\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_toggle_toggles_on_off\ntests/acceptance/test_headless_tui.py::HeadlessTUITests::test_unknown_command_shows_error\ntests/acceptance/test_hook_lifecycle_flow.py::test_pre_hook_veto_blocks_tool\ntests/acceptance/test_hook_lifecycle_flow.py::test_pre_hook_can_modify_arguments\ntests/acceptance/test_hook_lifecycle_flow.py::test_multiple_pre_hooks_run_in_order\ntests/acceptance/test_hook_lifecycle_flow.py::test_pre_hook_error_stops_chain\ntests/acceptance/test_hook_lifecycle_flow.py::test_post_hook_modifies_result\ntests/acceptance/test_hook_lifecycle_flow.py::test_post_hook_no_modification_returns_original\ntests/acceptance/test_hook_lifecycle_flow.py::test_permission_check_deny_blocks_destructive\ntests/acceptance/test_hook_lifecycle_flow.py::test_permission_check_allow_passes_destructive\ntests/acceptance/test_hook_lifecycle_flow.py::test_permission_check_deny_pattern\ntests/acceptance/test_hook_lifecycle_flow.py::test_permission_check_allow_pattern\ntests/acceptance/test_hook_lifecycle_flow.py::test_session_start_hook_fires\ntests/acceptance/test_hook_lifecycle_flow.py::test_hook_registry_disabled_skips_pre_hooks\ntests/acceptance/test_hook_lifecycle_flow.py::test_hook_registry_disabled_skips_post_hooks\ntests/acceptance/test_hook_lifecycle_flow.py::test_pre_compact_hook_modifies_context\ntests/acceptance/test_hook_lifecycle_flow.py::test_all_eight_hook_events_exist\ntests/acceptance/test_live_provider_conformance_flow.py::LiveProviderConformanceFlowAcceptanceTests::test_cli_conformance_exposes_env_gate\ntests/acceptance/test_live_provider_conformance_flow.py::LiveProviderConformanceFlowAcceptanceTests::test_live_conformance_runs_when_required_env_is_set\ntests/acceptance/test_live_provider_conformance_flow.py::LiveProviderConformanceFlowAcceptanceTests::test_live_conformance_skips_without_required_env_and_does_not_call_provider\ntests/acceptance/test_managed_runtime_cloud_task_flow.py::ManagedRuntimeCloudTaskFlowTests::test_cloud_stub_failure_records_managed_task_failed\ntests/acceptance/test_managed_runtime_cloud_task_flow.py::ManagedRuntimeCloudTaskFlowTests::test_cloud_stub_run_poll_cancel_and_audit\ntests/acceptance/test_managed_runtime_cloud_task_flow.py::ManagedRuntimeCloudTaskFlowTests::test_managed_runtime_capabilities_are_explicit_about_optional_sdks\ntests/acceptance/test_managed_runtime_flow.py::ManagedRuntimeFlowAcceptanceTests::test_managed_runtime_receives_tool_context_and_persists_audit\ntests/acceptance/test_mcp_client_flow.py::MCPClientFlowAcceptanceTests::test_mcp_client_auth_session_list_call_and_close_flow\ntests/acceptance/test_memory_auto_curation_flow.py::test_completed_run_auto_curates_memory\ntests/acceptance/test_memory_auto_curation_flow.py::test_auto_curated_memory_deduplicates_identical_summary\ntests/acceptance/test_memory_auto_curation_flow.py::test_auto_curated_memory_not_written_for_pending_approval\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_server_register_and_list\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_server_start_stop\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_dispatch_message\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_adapter_protocol\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_telegram_adapter_import\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_slack_adapter_import\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_discord_adapter_import\ntests/acceptance/test_messaging_gateway_flow.py::test_gateway_discord_adapter_protocol\ntests/acceptance/test_model_smoke_gating_flow.py::ModelSmokeGatingFlowAcceptanceTests::test_smoke_runs_when_required_env_is_set\ntests/acceptance/test_model_smoke_gating_flow.py::ModelSmokeGatingFlowAcceptanceTests::test_smoke_skips_without_required_env_and_does_not_call_provider\ntests/acceptance/test_mtime_read_before_write_flow.py::test_read_file_returns_mtime\ntests/acceptance/test_mtime_read_before_write_flow.py::test_write_includes_mtime_on_success\ntests/acceptance/test_mtime_read_before_write_flow.py::test_write_without_mtime_succeeds_unconditionally\ntests/acceptance/test_mtime_read_before_write_flow.py::test_write_blocked_on_mtime_mismatch\ntests/acceptance/test_mtime_read_before_write_flow.py::test_write_succeeds_when_mtime_matches\ntests/acceptance/test_mtime_read_before_write_flow.py::test_mtime_guard_new_file_creation\ntests/acceptance/test_no_agent_automation_delivers_script_output_flow.py::test_no_agent_automation_delivers_script_output_flow\ntests/acceptance/test_no_agent_automation_delivers_script_output_flow.py::test_collector_failure_does_not_wake_agent\ntests/acceptance/test_p0_slo_flow.py::test_p0_slo_for_run_approval_resume_and_heartbeat\ntests/acceptance/test_p0_slo_flow.py::test_p0_slo_audit_write_failure_degradation\ntests/acceptance/test_p0_slo_flow.py::test_p0_slo_model_timeout_retry\ntests/acceptance/test_p0_slo_flow.py::test_p0_slo_run_observer_streams_metrics\ntests/acceptance/test_plan_cli_flow.py::test_plan_cli_writes_artifact\ntests/acceptance/test_plan_mode_read_only_flow.py::test_read_only_plan_mode_allows_inspection_and_returns_planning_metadata\ntests/acceptance/test_plan_mode_read_only_flow.py::test_read_only_plan_mode_blocks_workspace_write\ntests/acceptance/test_plan_mode_read_only_flow.py::test_read_only_plan_mode_blocks_shell_mutation\ntests/acceptance/test_plugin_install_security_flow.py::test_candidate_artifacts_required_before_install\ntests/acceptance/test_policy_as_code_flow.py::test_policy_yaml_loaded_from_workspace\ntests/acceptance/test_policy_as_code_flow.py::test_deny_rule_blocks_matching_tool_in_runner\ntests/acceptance/test_policy_as_code_flow.py::test_deny_rule_does_not_block_non_matching_tool\ntests/acceptance/test_policy_as_code_flow.py::test_deny_rule_fires_in_danger_full_access_mode\ntests/acceptance/test_policy_denial_reason_code_flow.py::test_denied_audit_event_includes_reason_code\ntests/acceptance/test_policy_denial_reason_code_flow.py::test_why_denied_cli_surfaces_reason_code\ntests/acceptance/test_policy_denial_reason_code_flow.py::test_tool_permission_error_carries_reason_code\ntests/acceptance/test_protected_paths_flow.py::test_build_protected_dir_rules_returns_git_and_teaagent\ntests/acceptance/test_protected_paths_flow.py::test_protected_rules_block_git_path\ntests/acceptance/test_protected_paths_flow.py::test_protected_rules_block_teaagent_path\ntests/acceptance/test_protected_paths_flow.py::test_protected_rules_allow_normal_paths\ntests/acceptance/test_protected_paths_flow.py::test_load_file_policy_includes_protected_dirs_by_default\ntests/acceptance/test_protected_paths_flow.py::test_load_file_policy_without_protected_dirs\ntests/acceptance/test_protected_paths_flow.py::test_user_rules_combined_with_protected_dirs\ntests/acceptance/test_protected_paths_flow.py::test_protected_rule_does_not_block_read\ntests/acceptance/test_provenance_gate_blocks_untrusted_skill_or_cron_write_flow.py::test_provenance_gate_blocks_untrusted_automation_and_memory_writes\ntests/acceptance/test_provider_matrix_consistency_flow.py::test_provider_registry_matches_docs_and_cli_output\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_all_tools_registered\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_name_prefix_filter\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_destructive_annotation_propagated\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_rate_limit_applied_to_all_remote_tools\ntests/acceptance/test_remote_mcp_consumption_flow.py::test_remote_tool_callable\ntests/acceptance/test_repo_map_quality_large_repo_flow.py::test_large_repo_context_pack_hits_target_file_within_slo\ntests/acceptance/test_repo_map_quality_large_repo_flow.py::test_large_repo_context_pack_promotes_index_hit_without_path_mention\ntests/acceptance/test_run_undo_acceptance_flow.py::test_run_undo_restores_workspace_after_agent_writes\ntests/acceptance/test_run_undo_failed_write_flow.py::test_failed_write_does_not_persist_undo_journal\ntests/acceptance/test_sandbox_enhancement_flow.py::test_auto_isolation_mode_is_supported\ntests/acceptance/test_sandbox_enhancement_flow.py::test_plan_skill_isolation_low_risk_uses_directory_snapshot\ntests/acceptance/test_sandbox_enhancement_flow.py::test_plan_skill_isolation_medium_risk_uses_docker\ntests/acceptance/test_sandbox_enhancement_flow.py::test_isolation_for_sandbox_type_mapping\ntests/acceptance/test_sandbox_enhancement_flow.py::test_skill_router_docker_config_applied_to_plan\ntests/acceptance/test_sandbox_enhancement_flow.py::test_execute_skill_routes_and_runs_low_risk_tool\ntests/acceptance/test_selected_skills_prevent_eager_skill_prompt_bloat_flow.py::test_no_auto_skills_keeps_prompt_ledger_at_zero_tokens\ntests/acceptance/test_session_resume_continuity_flow.py::test_session_resume_preserves_observations_audit_and_memory\ntests/acceptance/test_skill_activation_explain_flow.py::test_skill_activation_explain_flow\ntests/acceptance/test_skill_candidate_contract_policy_provenance_flow.py::test_skill_candidate_contract_policy_provenance_flow\ntests/acceptance/test_skill_candidate_contract_policy_provenance_flow.py::test_personal_skill_candidate_install_requires_attestation\ntests/acceptance/test_skill_candidate_flow.py::test_skill_candidate_propose_review_install_flow\ntests/acceptance/test_skill_candidate_flow.py::test_skill_candidate_review_blocks_unsafe_pattern\ntests/acceptance/test_skill_candidate_offline_eval_flow.py::test_skill_candidate_offline_eval_flow\ntests/acceptance/test_skill_index_only_prompt_flow.py::test_skill_index_only_prompt_excludes_skill_bodies\ntests/acceptance/test_skill_install_flow.py::test_skill_discovered_and_injected\ntests/acceptance/test_skill_install_flow.py::test_multiple_skills_all_appear\ntests/acceptance/test_skill_install_flow.py::test_no_skills_section_absent\ntests/acceptance/test_skill_install_flow.py::test_project_skill_overrides_user_skill\ntests/acceptance/test_skill_install_flow.py::test_skill_reaches_model_system_prompt\ntests/acceptance/test_skill_install_flow.py::test_invalid_skill_is_blocked_from_prompt_injection\ntests/acceptance/test_skill_install_flow.py::test_skill_loader_searches_legacy_and_plural_project_dirs\ntests/acceptance/test_skill_install_flow.py::test_skill_directory_priority_agent_then_claude_then_opencode\ntests/acceptance/test_skill_install_flow.py::test_skill_load_audit_records_search_dirs_and_review_failures\ntests/acceptance/test_skill_install_flow.py::test_skill_load_audit_records_truncation_warning\ntests/acceptance/test_skill_install_flow.py::test_run_chat_agent_uses_configured_skill_search_dirs\ntests/acceptance/test_skill_install_flow.py::test_run_chat_agent_custom_profile_requires_skill_search_dirs\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_publish_and_search\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_list_and_remove\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_get_by_name\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_client_init\ntests/acceptance/test_skill_marketplace_flow.py::test_marketplace_client_fetch_no_network\ntests/acceptance/test_subagent_definitions_flow.py::test_markdown_frontmatter_agent_definition\ntests/acceptance/test_subagent_definitions_flow.py::test_markdown_without_frontmatter_uses_body_as_prompt\ntests/acceptance/test_subagent_definitions_flow.py::test_yaml_agent_definition\ntests/acceptance/test_subagent_definitions_flow.py::test_json_agent_definition\ntests/acceptance/test_subagent_definitions_flow.py::test_default_isolation_is_shared\ntests/acceptance/test_subagent_definitions_flow.py::test_unsupported_file_extensions_ignored\ntests/acceptance/test_subagent_definitions_flow.py::test_no_subagents_dir_returns_empty\ntests/acceptance/test_subagent_definitions_flow.py::test_disallowedTools_camelcase_accepted\ntests/acceptance/test_subagent_directory_snapshot_isolation_flow.py::SubagentContainerIsolationFlowTests::test_deprecated_container_alias_still_works\ntests/acceptance/test_subagent_directory_snapshot_isolation_flow.py::SubagentContainerIsolationFlowTests::test_subagent_tool_forwards_directory_snapshot_isolation\ntests/acceptance/test_subagent_lineage_flow.py::test_cli_subagent_run_includes_lineage_in_tool_observation\ntests/acceptance/test_subagent_parallel_worktree_merge_flow.py::SubagentParallelWorktreeMergeFlowTests::test_parallel_worktree_children_expose_lineage_for_parent_review\ntests/acceptance/test_subagent_parallel_worktree_merge_flow.py::SubagentParallelWorktreeMergeFlowTests::test_worktree_child_review_patch_can_be_checked_and_applied\ntests/acceptance/test_subagent_worktree_isolation_flow.py::SubagentWorktreeIsolationFlowTests::test_subagent_tool_forwards_worktree_isolation\ntests/acceptance/test_surface_launch_recipes_flow.py::test_surface_recipes_doc_covers_required_surfaces\ntests/acceptance/test_surface_launch_recipes_flow.py::test_documented_smoke_commands_run_locally_without_network\ntests/acceptance/test_ultrawork_flow.py::UltraworkFlowAcceptanceTests::test_ultrawork_start_list_show_logs_and_stop_flow\ntests/acceptance/test_vscode_extension_mcp_boot_flow.py::test_vscode_manifest_and_command_wiring_for_mcp_boot\ntests/acceptance/test_vscode_extension_mcp_boot_flow.py::test_vscode_permission_mode_enum_matches_cli_modes\ntests/acceptance/test_vscode_mcp_runtime_smoke_flow.py::test_vscode_mcp_runtime_smoke_flow\ntests/acceptance/test_webhook_audit_flow.py::test_run_events_delivered_to_webhook\ntests/acceptance/test_webhook_audit_flow.py::test_webhook_hmac_verifiable\ntests/acceptance/test_webhook_audit_flow.py::test_webhook_event_filter_limits_delivery\ntests/acceptance/test_webhook_audit_flow.py::test_webhook_failure_does_not_abort_run\ntests/acceptance/test_workspace_edit_flow.py::WorkspaceEditFlowAcceptanceTests::test_hash_read_edit_git_test_and_diff_summary\ntests/e2e/test_end_to_end.py::EndToEndTests::test_agent_loop_persists_audit_and_workspace_result\ntests/e2e/test_end_to_end.py::EndToEndTests::test_mcp_http_initialize_and_tool_call\ntests/e2e/test_end_to_end.py::EndToEndTests::test_pending_approval_can_resume_with_recorded_observation\ntests/integration/test_a2a_circuit_breaker.py::test_circuit_opens_after_threshold\ntests/integration/test_a2a_circuit_breaker.py::test_open_circuit_skips_endpoint\ntests/integration/test_a2a_circuit_breaker.py::test_success_resets_failure_count\ntests/integration/test_a2a_circuit_breaker.py::test_circuit_resets_after_timeout\ntests/integration/test_a2a_circuit_breaker.py::test_no_circuit_breaker_behaves_as_before\ntests/integration/test_a2a_circuit_breaker.py::test_circuit_state_for_unknown_endpoint_is_closed\ntests/integration/test_a2a_circuit_breaker.py::test_cards_from_healthy_endpoints_still_returned\ntests/integration/test_a2a_traceparent.py::test_generate_traceparent_format\ntests/integration/test_a2a_traceparent.py::test_parse_valid_traceparent\ntests/integration/test_a2a_traceparent.py::test_parse_invalid_traceparent_raises\ntests/integration/test_a2a_traceparent.py::test_generate_then_parse_roundtrip\ntests/integration/test_a2a_traceparent.py::test_delegate_injects_traceparent_header\ntests/integration/test_a2a_traceparent.py::test_delegate_without_traceparent_no_header\ntests/integration/test_a2a_traceparent.py::test_delegate_returns_traceparent_in_result\ntests/integration/test_a2a_traceparent.py::test_delegate_result_traceparent_none_when_not_set\ntests/integration/test_a2a_traceparent.py::test_generate_traceparent_unique\ntests/integration/test_approval_ui.py::test_approve_returns_true\ntests/integration/test_approval_ui.py::test_deny_returns_false\ntests/integration/test_approval_ui.py::test_case_insensitive_yes\ntests/integration/test_approval_ui.py::test_case_insensitive_no\ntests/integration/test_approval_ui.py::test_diff_shown_for_write_tool\ntests/integration/test_approval_ui.py::test_creation_diff_for_new_file\ntests/integration/test_approval_ui.py::test_non_write_tool_shows_summary\ntests/integration/test_approval_ui.py::test_invalid_input_reprompts_then_approves\ntests/integration/test_approval_ui.py::test_max_prompts_exceeded_returns_false\ntests/integration/test_approval_ui.py::test_explain_then_approve\ntests/integration/test_approval_ui.py::test_apply_patch_shows_patch_content\ntests/integration/test_approval_ui.py::test_path_traversal_argument_handled\ntests/integration/test_audit_chain.py::test_clean_log_is_valid\ntests/integration/test_audit_chain.py::test_empty_log_is_valid\ntests/integration/test_audit_chain.py::test_first_event_prev_hash_is_genesis\ntests/integration/test_audit_chain.py::test_second_event_prev_hash_matches_first\ntests/integration/test_audit_chain.py::test_content_tampering_detected\ntests/integration/test_audit_chain.py::test_event_insertion_detected\ntests/integration/test_audit_chain.py::test_event_deletion_detected\ntests/integration/test_audit_chain.py::test_multiple_runs_in_same_log\ntests/integration/test_audit_chain.py::test_chain_result_type\ntests/integration/test_audit_sink_isolation.py::test_crashing_sink_does_not_propagate\ntests/integration/test_audit_sink_isolation.py::test_crashing_sink_does_not_block_subsequent_sinks\ntests/integration/test_audit_sink_isolation.py::test_crashing_sink_does_not_prevent_event_storage\ntests/integration/test_audit_sink_isolation.py::test_multiple_crashing_sinks\ntests/integration/test_audit_sink_isolation.py::test_no_sinks_works\ntests/integration/test_benchmark.py::test_run_benchmark_returns_result\ntests/integration/test_benchmark.py::test_run_benchmark_case_count\ntests/integration/test_benchmark.py::test_case_metrics_has_latency\ntests/integration/test_benchmark.py::test_benchmark_result_p50_p95\ntests/integration/test_benchmark.py::test_benchmark_result_mean_latency\ntests/integration/test_benchmark.py::test_case_metrics_output_captured\ntests/integration/test_benchmark.py::test_benchmark_baseline_comparison\ntests/integration/test_benchmark.py::test_no_regression_when_fast\ntests/integration/test_benchmark.py::test_regression_detected_when_slow\ntests/integration/test_benchmark.py::test_benchmark_result_to_dict\ntests/integration/test_cancel_token.py::test_cancel_before_first_iteration\ntests/integration/test_cancel_token.py::test_cancel_during_run\ntests/integration/test_cancel_token.py::test_cancel_token_is_optional\ntests/integration/test_config_loader.py::test_resolved_config_get_returns_value\ntests/integration/test_config_loader.py::test_resolved_config_get_default\ntests/integration/test_config_loader.py::test_resolved_config_show_format\ntests/integration/test_config_loader.py::test_defaults_used_when_no_files\ntests/integration/test_config_loader.py::test_workspace_config_loaded\ntests/integration/test_config_loader.py::test_user_config_loaded\ntests/integration/test_config_loader.py::test_workspace_overrides_user\ntests/integration/test_config_loader.py::test_env_overrides_workspace\ntests/integration/test_config_loader.py::test_env_max_iterations\ntests/integration/test_config_loader.py::test_load_workspace_config_returns_dict\ntests/integration/test_config_loader.py::test_load_workspace_config_empty_when_missing\ntests/integration/test_config_loader.py::test_chat_agent_config_from_root_applies_profile\ntests/integration/test_config_loader.py::test_chat_agent_config_from_root_defaults_when_no_profile\ntests/integration/test_config_loader.py::test_chat_agent_config_kwargs_override_profile\ntests/integration/test_config_loader.py::test_config_keys_includes_known_keys\ntests/integration/test_config_loader.py::test_chat_agent_config_from_root_enables_code_analysis_from_profile\ntests/integration/test_config_loader.py::test_chat_agent_config_from_root_applies_skill_search_dirs_from_profile\ntests/integration/test_config_loader.py::test_env_skill_search_dirs_supports_csv\ntests/integration/test_config_loader.py::test_chat_agent_config_from_root_applies_skill_source_profile\ntests/integration/test_config_loader.py::test_env_skill_source_profile_overrides_workspace\ntests/integration/test_destructive_approval_lifecycle.py::test_first_run_pauses_at_destructive_tool\ntests/integration/test_destructive_approval_lifecycle.py::test_resume_with_approved_call_id_completes\ntests/integration/test_destructive_approval_lifecycle.py::test_approval_handler_auto_approves\ntests/integration/test_destructive_approval_lifecycle.py::test_approval_handler_denies\ntests/integration/test_destructive_approval_lifecycle.py::test_blocked_in_read_only_mode\ntests/integration/test_disk_full_degradation.py::test_disk_full_does_not_raise\ntests/integration/test_disk_full_degradation.py::test_in_memory_events_captured_after_disk_full\ntests/integration/test_disk_full_degradation.py::test_disk_error_event_recorded\ntests/integration/test_disk_full_degradation.py::test_disk_error_property_set\ntests/integration/test_disk_full_degradation.py::test_disk_error_property_none_on_success\ntests/integration/test_disk_full_degradation.py::test_further_writes_skipped_after_disk_full\ntests/integration/test_disk_full_degradation.py::test_non_enospc_oserror_also_handled\ntests/integration/test_dpop_replay_concurrency.py::test_dpop_replay_cache_blocks_reuse\ntests/integration/test_dpop_replay_concurrency.py::test_dpop_replay_cache_different_jtis_do_not_interfere\ntests/integration/test_dpop_replay_concurrency.py::test_dpop_replay_cache_expired_entry_evicted\ntests/integration/test_dpop_replay_concurrency.py::test_dpop_replay_cache_missing_jti_raises\ntests/integration/test_error_hints.py::test_error_has_default_hint[BudgetExceededError]\ntests/integration/test_error_hints.py::test_error_has_default_hint[ToolExecutionError]\ntests/integration/test_error_hints.py::test_error_has_default_hint[ToolPermissionError]\ntests/integration/test_error_hints.py::test_error_has_default_hint[ToolValidationError]\ntests/integration/test_error_hints.py::test_error_has_default_hint[RunCancelledError]\ntests/integration/test_error_hints.py::test_str_includes_hint[BudgetExceededError]\ntests/integration/test_error_hints.py::test_str_includes_hint[ToolExecutionError]\ntests/integration/test_error_hints.py::test_str_includes_hint[ToolPermissionError]\ntests/integration/test_error_hints.py::test_str_includes_hint[ToolValidationError]\ntests/integration/test_error_hints.py::test_str_includes_hint[RunCancelledError]\ntests/integration/test_error_hints.py::test_custom_hint_overrides_default\ntests/integration/test_error_hints.py::test_no_hint_renders_cleanly\ntests/integration/test_eval_report.py::test_render_html_returns_string\ntests/integration/test_eval_report.py::test_html_contains_case_names\ntests/integration/test_eval_report.py::test_html_contains_pass_fail_indicators\ntests/integration/test_eval_report.py::test_html_contains_pass_rate\ntests/integration/test_eval_report.py::test_html_is_valid_html_structure\ntests/integration/test_eval_report.py::test_html_with_judge_scores\ntests/integration/test_eval_report.py::test_empty_report_renders\ntests/integration/test_file_policy.py::test_deny_rule_matches_exact_tool\ntests/integration/test_file_policy.py::test_deny_rule_matches_glob_tool\ntests/integration/test_file_policy.py::test_deny_rule_matches_argument_pattern\ntests/integration/test_file_policy.py::test_deny_rule_argument_key_missing_does_not_match\ntests/integration/test_file_policy.py::test_file_policy_empty_allows_all\ntests/integration/test_file_policy.py::test_file_policy_blocks_matching_rule\ntests/integration/test_file_policy.py::test_file_policy_first_match_wins\ntests/integration/test_file_policy.py::test_load_file_policy_no_file\ntests/integration/test_file_policy.py::test_load_file_policy_from_workspace_root\ntests/integration/test_file_policy.py::test_load_file_policy_from_teaagent_dir\ntests/integration/test_file_policy.py::test_load_file_policy_json_format\ntests/integration/test_file_policy.py::test_file_policy_integrated_with_agent_runner\ntests/integration/test_mcp_tool_adapter.py::test_register_mcp_tools_discovers_all_tools\ntests/integration/test_mcp_tool_adapter.py::test_register_mcp_tools_annotations_inferred\ntests/integration/test_mcp_tool_adapter.py::test_register_mcp_tools_name_prefix_filter\ntests/integration/test_memory_retrieval_ranking.py::test_memory_search_prioritizes_auto_curated_run_summaries\ntests/integration/test_migration_dry_run.py::test_dry_run_does_not_create_table\ntests/integration/test_migration_dry_run.py::test_dry_run_returns_pending_versions\ntests/integration/test_migration_dry_run.py::test_dry_run_after_partial_apply\ntests/integration/test_migration_dry_run.py::test_dry_run_does_not_mark_applied\ntests/integration/test_migration_dry_run.py::test_normal_run_after_dry_run_applies_all\ntests/integration/test_migration_dry_run.py::test_dry_run_all_applied_returns_empty_pending\ntests/integration/test_migration_dry_run.py::test_migration_result_dry_run_pending_field\ntests/integration/test_parallel_experiments.py::ParallelExperimentsIntegrationTests::test_branch_comparison\ntests/integration/test_parallel_experiments.py::ParallelExperimentsIntegrationTests::test_experiment_isolation\ntests/integration/test_parallel_experiments.py::ParallelExperimentsIntegrationTests::test_experiment_selection_and_merge\ntests/integration/test_parallel_experiments.py::ParallelExperimentsIntegrationTests::test_parallel_experiment_creation_and_cleanup\ntests/integration/test_plugins.py::test_no_plugins_returns_empty\ntests/integration/test_plugins.py::test_single_plugin_registers_tool\ntests/integration/test_plugins.py::test_multiple_plugins_all_loaded\ntests/integration/test_plugins.py::test_failing_plugin_isolated\ntests/integration/test_plugins.py::test_failing_load_call_isolated\ntests/integration/test_plugins.py::test_custom_group_used\ntests/integration/test_plugins.py::test_default_group_is_teaagent_tools\ntests/integration/test_plugins.py::test_plugin_load_result_ok\ntests/integration/test_plugins.py::test_plugin_load_result_not_ok_when_failures\ntests/integration/test_redaction_config.py::test_default_redaction_removes_bearer_token\ntests/integration/test_redaction_config.py::test_disable_bearer_pattern_preserves_token\ntests/integration/test_redaction_config.py::test_disable_api_keys_preserves_sk_token\ntests/integration/test_redaction_config.py::test_custom_extra_pattern_redacted\ntests/integration/test_redaction_config.py::test_disable_all_patterns_preserves_tokens\ntests/integration/test_redaction_config.py::test_redaction_config_default_is_all_enabled\ntests/integration/test_redaction_config.py::test_in_memory_audit_not_affected_by_redaction_config\ntests/integration/test_redaction_config.py::test_aws_key_redacted_by_default\ntests/integration/test_redaction_config.py::test_disable_aws_keys_preserves_akia_token\ntests/integration/test_run_export.py::test_export_creates_archive\ntests/integration/test_run_export.py::test_import_restores_run\ntests/integration/test_run_export.py::test_round_trip_preserves_all_event_fields\ntests/integration/test_run_export.py::test_import_into_existing_store_does_not_clobber_other_runs\ntests/integration/test_run_export.py::test_export_manifest_fields\ntests/integration/test_run_export.py::test_import_nonexistent_archive_raises\ntests/integration/test_run_export.py::test_export_nonexistent_run_raises\ntests/integration/test_run_export.py::test_hash_chain_survives_round_trip\ntests/integration/test_run_resume_checkpoint.py::test_checkpoint_store_saves_on_tool_completion\ntests/integration/test_run_resume_checkpoint.py::test_pending_approval_checkpoint_saved\ntests/integration/test_run_resume_checkpoint.py::test_sqlite_checkpoint_roundtrip\ntests/integration/test_run_resume_checkpoint.py::test_resume_by_replaying_observations\ntests/integration/test_run_undo.py::test_undo_deletes_newly_created_file\ntests/integration/test_run_undo.py::test_undo_restores_overwritten_file\ntests/integration/test_run_undo.py::test_undo_multiple_writes\ntests/integration/test_run_undo.py::test_undo_idempotent_when_no_writes\ntests/integration/test_run_undo.py::test_undo_result_fields\ntests/integration/test_run_undo.py::test_journal_only_captures_write_tools\ntests/integration/test_run_undo.py::test_journal_path_traversal_ignored\ntests/integration/test_run_undo.py::test_failed_write_must_not_create_undoable_journal\ntests/integration/test_runner_cost_tracking.py::test_fresh_agent_run_does_not_register_browser_tools_twice\ntests/integration/test_runner_cost_tracking.py::test_cost_fields_populated_after_run\ntests/integration/test_runner_cost_tracking.py::test_cost_reported_in_audit_run_completed\ntests/integration/test_schema_migration_live.py::test_migration_runner_applies_all_versions\ntests/integration/test_schema_migration_live.py::test_migration_idempotent\ntests/integration/test_schema_migration_live.py::test_existing_data_survives_migration\ntests/integration/test_schema_migration_live.py::test_version_tracking_prevents_double_apply\ntests/integration/test_skill_loader.py::test_load_skills_from_opencode_dir\ntests/integration/test_skill_loader.py::test_load_skills_content_matches_file\ntests/integration/test_skill_loader.py::test_load_skills_deduplication_project_wins\ntests/integration/test_skill_loader.py::test_load_skills_max_skills_cap\ntests/integration/test_skill_loader.py::test_load_skills_empty_when_no_project_dir\ntests/integration/test_skill_loader.py::test_load_skills_skips_dirs_without_skill_md\ntests/integration/test_skill_loader.py::test_skills_to_prompt_section_empty\ntests/integration/test_skill_loader.py::test_skills_to_prompt_section_renders_all\ntests/integration/test_skill_loader.py::test_skills_injected_into_prompt_system\ntests/integration/test_skill_loader.py::test_discover_skill_search_dirs_priority_order\ntests/integration/test_skill_loader.py::test_preferred_dirs_override_default_discovery_order\ntests/integration/test_skill_loader.py::test_extended_profile_discovers_codex_dir\ntests/integration/test_streaming_tool_calls.py::test_streaming_on_chunk_fires\ntests/integration/test_streaming_tool_calls.py::test_streaming_audit_events_recorded\ntests/integration/test_streaming_tool_calls.py::test_streaming_cost_accumulated\ntests/integration/test_streaming_tool_calls.py::test_non_streaming_works_without_on_chunk\ntests/integration/test_subagent_budget_inheritance.py::test_subagent_respects_max_iterations\ntests/integration/test_subagent_budget_inheritance.py::test_subagent_failure_returns_error_dict\ntests/integration/test_subagent_budget_inheritance.py::test_subagent_tool_registered_when_enabled\ntests/integration/test_subagent_budget_inheritance.py::test_subagent_tool_not_registered_at_max_depth\ntests/integration/test_tool_rate_limit.py::test_calls_within_quota_succeed\ntests/integration/test_tool_rate_limit.py::test_call_exceeding_quota_raises\ntests/integration/test_tool_rate_limit.py::test_call_count_helper\ntests/integration/test_tool_rate_limit.py::test_window_expiry_resets_quota\ntests/integration/test_tool_rate_limit.py::test_no_rate_limit_call_count_returns_zero\ntests/integration/test_tool_rate_limit.py::test_concurrent_calls_respect_quota\ntests/integration/test_tsb_lifecycle.py::TSBLifecycleIntegrationTests::test_full_tsb_lifecycle_without_signature\ntests/integration/test_tsb_lifecycle.py::TSBLifecycleIntegrationTests::test_tsb_deterministic_hash_across_multiple_builds\ntests/integration/test_tsb_lifecycle.py::TSBLifecycleIntegrationTests::test_tsb_path_traversal_protection_in_extract\ntests/integration/test_tsb_lifecycle.py::TSBLifecycleIntegrationTests::test_tsb_verification_with_tampered_manifest\ntests/integration/test_tsb_lifecycle.py::TSBLifecycleIntegrationTests::test_tsb_with_path_aware_hashing\ntests/integration/test_ultrawork_notify.py::test_fire_notification_webhook_delivers\ntests/integration/test_ultrawork_notify.py::test_fire_notification_shell_command_executed\ntests/integration/test_ultrawork_notify.py::test_fire_notification_webhook_failure_silent\ntests/integration/test_ultrawork_notify.py::test_fire_notification_both_webhook_and_shell\ntests/integration/test_ultrawork_notify.py::test_notify_config_defaults\ntests/integration/test_ultrawork_notify.py::test_ultrawork_store_stop_fires_webhook\ntests/integration/test_undo_audit.py::test_record_undo_applied_appends_chained_event\ntests/integration/test_undo_audit.py::test_record_undo_applied_returns_false_when_run_missing\ntests/integration/test_webhook_sink.py::test_webhook_delivers_event\ntests/integration/test_webhook_sink.py::test_webhook_hmac_signature\ntests/integration/test_webhook_sink.py::test_webhook_event_filter\ntests/integration/test_webhook_sink.py::test_webhook_failure_does_not_crash_run\ntests/policy/test_permission_matrix.py::test_permission_matrix[read-only-workspace_read_file-False-True-True]\ntests/policy/test_permission_matrix.py::test_permission_matrix[read-only-workspace_write_file-True-False-False]\ntests/policy/test_permission_matrix.py::test_permission_matrix[read-only-workspace_write_file-False-False-False]\ntests/policy/test_permission_matrix.py::test_permission_matrix[read-only-workspace_run_shell_mutate-False-False-False]\ntests/policy/test_permission_matrix.py::test_permission_matrix[read-only-custom_plugin_save-False-False-False]\ntests/policy/test_permission_matrix.py::test_permission_matrix[read-only-custom_plugin_save-False-True-False]\ntests/policy/test_permission_matrix.py::test_permission_matrix[workspace-write-workspace_write_file-True-False-True]\ntests/policy/test_permission_matrix.py::test_permission_matrix[workspace-write-workspace_run_shell_mutate-True-False-False]\ntests/policy/test_permission_matrix.py::test_permission_matrix[workspace-write-workspace_read_file-False-True-True]\ntests/policy/test_permission_matrix.py::test_permission_matrix[allow-workspace_run_shell_mutate-True-False-True]\ntests/policy/test_permission_matrix.py::test_permission_matrix[danger-full-access-workspace_run_shell_mutate-True-False-True]\ntests/policy/test_permission_matrix.py::test_prompt_mode_requires_approval_for_destructive\ntests/policy/test_permission_matrix.py::test_prompt_mode_preapproved_without_store_still_blocks\ntests/regression/test_contract_approval.py::test_read_only_mode_blocks_all_destructive\ntests/regression/test_contract_approval.py::test_workspace_write_allows_file_writes_blocks_shell\ntests/regression/test_contract_approval.py::test_unapproved_destructive_call_raises_in_prompt_mode\ntests/regression/test_contract_approval.py::test_preapproved_call_id_without_store_blocked_in_prompt_mode\ntests/regression/test_contract_approval.py::test_allow_mode_accepts_all_destructive\ntests/regression/test_contract_approval.py::test_danger_full_access_accepts_all_destructive\ntests/regression/test_contract_approval.py::test_non_destructive_tool_never_raises\ntests/regression/test_contract_approval.py::test_allow_all_destructive_flag_bypasses_approval\ntests/regression/test_contract_audit_chain.py::test_each_audit_event_has_unique_id\ntests/regression/test_contract_audit_chain.py::test_audit_events_append_only\ntests/regression/test_contract_audit_chain.py::test_audit_file_permissions_restrictive\ntests/regression/test_contract_audit_chain.py::test_sensitive_values_redacted_in_persisted_log\ntests/regression/test_contract_audit_chain.py::test_in_memory_events_match_persisted_log\ntests/regression/test_contract_policy.py::test_workspace_path_escape_blocked\ntests/regression/test_contract_policy.py::test_workspace_symlink_escape_blocked\ntests/regression/test_contract_policy.py::test_tool_execution_validates_input_schema\ntests/regression/test_contract_session_resume.py::test_resume_preserves_task_across_run_boundary\ntests/regression/test_contract_session_resume.py::test_audit_lineage_preserved_on_resume\ntests/regression/test_contract_session_resume.py::test_memory_auto_curated_after_completed_resume\ntests/test_a2a_http.py::A2ADiscoveryServerTests::test_404_for_unknown_path\ntests/test_a2a_http.py::A2ADiscoveryServerTests::test_base_url_includes_port\ntests/test_a2a_http.py::A2ADiscoveryServerTests::test_no_task_handler_returns_404_on_post\ntests/test_a2a_http.py::A2ADiscoveryServerTests::test_port_is_assigned\ntests/test_a2a_http.py::A2ADiscoveryServerTests::test_serves_well_known_agent_json\ntests/test_a2a_http.py::A2ADiscoveryServerTests::test_stop_is_idempotent\ntests/test_a2a_http.py::A2ADiscoveryServerTests::test_task_delegation_via_handler\ntests/test_a2a_http.py::A2AClientTests::test_delegate_default_empty_context\ntests/test_a2a_http.py::A2AClientTests::test_delegate_returns_task_result\ntests/test_a2a_http.py::A2AClientTests::test_fetch_card_round_trip\ntests/test_a2a_http.py::A2AClientTests::test_from_card_raises_without_endpoint\ntests/test_a2a_http.py::A2AClientTests::test_from_card_uses_endpoint\ntests/test_a2a_http.py::FederatedAgentRegistryTests::test_errors_on_unreachable_endpoint\ntests/test_a2a_http.py::FederatedAgentRegistryTests::test_find_by_capability\ntests/test_a2a_http.py::FederatedAgentRegistryTests::test_find_by_tool\ntests/test_a2a_http.py::FederatedAgentRegistryTests::test_get_card_from_remote\ntests/test_a2a_http.py::FederatedAgentRegistryTests::test_get_missing_returns_none\ntests/test_a2a_http.py::FederatedAgentRegistryTests::test_list_cards_from_multiple_servers\ntests/test_a2a_http.py::FederatedAgentRegistryTests::test_stale_cache_refreshes\ntests/test_a2a_registry.py::SQLiteAgentRegistryTests::test_deregister_missing_is_noop\ntests/test_a2a_registry.py::SQLiteAgentRegistryTests::test_deregister_removes\ntests/test_a2a_registry.py::SQLiteAgentRegistryTests::test_find_by_capability\ntests/test_a2a_registry.py::SQLiteAgentRegistryTests::test_find_by_tool\ntests/test_a2a_registry.py::SQLiteAgentRegistryTests::test_list_cards\ntests/test_a2a_registry.py::SQLiteAgentRegistryTests::test_overwrite_upserts\ntests/test_a2a_registry.py::SQLiteAgentRegistryTests::test_persists_across_instances\ntests/test_a2a_registry.py::SQLiteAgentRegistryTests::test_register_and_get\ntests/test_a2a_registry.py::SQLiteAgentRegistryTests::test_round_trip_preserves_all_fields\ntests/test_a2a_registry.py::A2ADispatcherTests::test_dispatch_by_capability_raises_when_no_match\ntests/test_a2a_registry.py::A2ADispatcherTests::test_dispatch_by_capability_routes_to_first_match\ntests/test_a2a_registry.py::A2ADispatcherTests::test_dispatch_by_name_raises_for_unknown_agent\ntests/test_a2a_registry.py::A2ADispatcherTests::test_dispatch_by_name_routes_to_named_agent\ntests/test_acceptance_status_builder.py::test_parse_passed_count_from_pytest_output\ntests/test_acceptance_status_builder.py::test_update_acceptance_status_replaces_marker\ntests/test_acceptance_tier_runner.py::test_tier_paths_for_p0\ntests/test_acceptance_tier_runner.py::test_tier_paths_for_all\ntests/test_acceptance_tier_runner.py::test_render_tier_markdown_contains_p0_p1_p2\ntests/test_aci.py::test_aci_sync_wrapper\ntests/test_aci.py::test_aci_with_retriever\ntests/test_aci.py::test_aci_empty_retriever\ntests/test_acp_adapter_error_response.py::test_acp_stdio_loop_emits_json_rpc_error_on_handler_failure\ntests/test_acp_progress.py::test_build_session_update_notification\ntests/test_acp_progress.py::test_stream_event_mappings_cover_tool_and_run_states\ntests/test_acp_progress.py::test_audit_sink_and_text_sink_emit_notifications\ntests/test_agentcard.py::AgentCardTests::test_capabilities_sorted_in_to_dict\ntests/test_agentcard.py::AgentCardTests::test_from_dict_handles_missing_optional_fields\ntests/test_agentcard.py::AgentCardTests::test_from_dict_round_trips\ntests/test_agentcard.py::AgentCardTests::test_to_dict_round_trips\ntests/test_agentcard.py::InMemoryAgentRegistryTests::test_deregister_missing_is_noop\ntests/test_agentcard.py::InMemoryAgentRegistryTests::test_deregister_removes\ntests/test_agentcard.py::InMemoryAgentRegistryTests::test_find_by_capability\ntests/test_agentcard.py::InMemoryAgentRegistryTests::test_find_by_capability_empty\ntests/test_agentcard.py::InMemoryAgentRegistryTests::test_find_by_tool\ntests/test_agentcard.py::InMemoryAgentRegistryTests::test_list_cards\ntests/test_agentcard.py::InMemoryAgentRegistryTests::test_register_and_get\ntests/test_agentcard.py::InMemoryAgentRegistryTests::test_register_overwrites\ntests/test_agentcard.py::BuildSelfCardTests::test_endpoint_propagated\ntests/test_agentcard.py::BuildSelfCardTests::test_extra_capabilities_merged\ntests/test_agentcard.py::BuildSelfCardTests::test_includes_standard_capabilities\ntests/test_agentcard.py::BuildSelfCardTests::test_tools_match_registry\ntests/test_agentcard.py::AgentCardCLITests::test_agent_card_prints_json\ntests/test_agentcard.py::AgentCardCLITests::test_agent_card_with_custom_name_and_endpoint\ntests/test_analysis_followups.py::test_token_rate_limiter_blocks_burst\ntests/test_analysis_followups.py::test_oauth_tenant_map_from_file\ntests/test_analysis_followups.py::test_control_plane_tenant_path_route\ntests/test_analysis_followups.py::test_relay_rate_limit_returns_429\ntests/test_analysis_followups.py::test_policy_ssh_flag_enabled\ntests/test_anp_adapter.py::ANPInboundAdapterTests::test_handle_task_maps_execution_error\ntests/test_anp_adapter.py::ANPInboundAdapterTests::test_handle_task_requires_task\ntests/test_anp_adapter.py::ANPInboundAdapterTests::test_handle_task_success\ntests/test_anp_adapter.py::ANPOutboundClientTests::test_delegate_uses_transport\ntests/test_anp_adapter.py::ANPBidirectionalRouterTests::test_auto_falls_back_to_remote_when_local_fails\ntests/test_anp_adapter.py::ANPBidirectionalRouterTests::test_auto_prefers_local\ntests/test_anp_adapter.py::ANPBidirectionalRouterTests::test_remote_route_requires_endpoint\ntests/test_anp_adapter.py::ANPGovernedServiceTests::test_inbound_destructive_tool_requires_approval\ntests/test_anp_adapter.py::ANPGovernedServiceTests::test_inbound_tool_executes_through_registry\ntests/test_anp_adapter.py::ANPGovernedServiceTests::test_outbound_delegation_enforces_budget\ntests/test_anp_adapter.py::ANPGovernedServiceTests::test_outbound_timeout_records_audit_failure\ntests/test_approval_async_from_sync.py::test_run_coroutine_sync_from_running_loop_leaves_loop_usable\ntests/test_approval_async_from_sync.py::test_policy_signature_collection_from_running_loop\ntests/test_approval_queue_persistence.py::test_queue_persisted_and_visible_from_new_process\ntests/test_approval_queue_persistence.py::test_cross_process_approve_unblocks_waiter\ntests/test_approval_queue_persistence.py::test_prune_removes_old_resolved_queue\ntests/test_approval_queue_persistence.py::test_prune_skips_pending_queue\ntests/test_approval_queue_persistence.py::test_reload_from_store_handles_invalid_snapshot_structure\ntests/test_approval_queue_persistence.py::test_reload_from_store_handles_invalid_request_data\ntests/test_approval_queue_persistence.py::test_reload_from_store_handles_missing_required_fields\ntests/test_approval_queue_persistence.py::test_reload_from_store_handles_invalid_status_enum\ntests/test_audit.py::AuditEventTests::test_event_can_override_event_id\ntests/test_audit.py::AuditEventTests::test_event_has_default_fields\ntests/test_audit.py::AuditEventTests::test_event_is_frozen\ntests/test_audit.py::AuditEventTests::test_to_json_produces_valid_json\ntests/test_audit.py::AuditLoggerTests::test_in_memory_only_when_no_path\ntests/test_audit.py::AuditLoggerTests::test_multiple_sinks_receive_events\ntests/test_audit.py::AuditLoggerTests::test_path_parent_dirs_are_created\ntests/test_audit.py::AuditLoggerTests::test_persists_events_to_jsonl_file\ntests/test_audit.py::AuditLoggerTests::test_record_multiple_events_in_order\ntests/test_audit.py::AuditLoggerTests::test_record_preserves_non_argument_content\ntests/test_audit.py::AuditLoggerTests::test_record_redacts_aws_access_keys_in_arbitrary_strings\ntests/test_audit.py::AuditLoggerTests::test_record_redacts_github_pat_in_arbitrary_strings\ntests/test_audit.py::AuditLoggerTests::test_record_redacts_jwt_tokens_in_arbitrary_strings\ntests/test_audit.py::AuditLoggerTests::test_record_redacts_secret_patterns_inside_non_sensitive_strings\ntests/test_audit.py::AuditLoggerTests::test_record_redacts_sensitive_payload_keys\ntests/test_audit.py::AuditLoggerTests::test_record_redacts_sensitive_tool_argument_values\ntests/test_audit.py::AuditLoggerTests::test_record_redacts_sensitive_tool_result_values\ntests/test_audit.py::AuditLoggerTests::test_record_stores_event_in_memory\ntests/test_audit.py::AuditLoggerTests::test_record_truncates_large_strings\ntests/test_audit.py::AuditLoggerTests::test_sink_receives_every_recorded_event\ntests/test_audit.py::AuditLoggerTests::test_thread_safety_concurrent_records\ntests/test_audit.py::AuditLoggerTests::test_threaded_persistence_writes_complete_lines\ntests/test_audit.py::UtcNowTests::test_returns_isoformat_string\ntests/test_audit.py::AuditChainVerificationTests::test_verify_detects_tampered_chain\ntests/test_audit.py::AuditChainVerificationTests::test_verify_empty_log\ntests/test_audit.py::AuditChainVerificationTests::test_verify_missing_file\ntests/test_audit.py::AuditChainVerificationTests::test_verify_valid_chain\ntests/test_audit_export.py::test_export_empty_events\ntests/test_audit_export.py::test_export_non_empty_events\ntests/test_audit_export.py::test_export_chain_verification_with_log_path\ntests/test_audit_export.py::test_export_chain_verification_no_log_path\ntests/test_audit_export.py::test_export_chain_verification_disabled\ntests/test_audit_export.py::test_write_compliance_bundle\ntests/test_audit_export.py::test_verify_bundle_integrity_valid\ntests/test_audit_export.py::test_verify_bundle_integrity_tampered\ntests/test_audit_export.py::test_verify_bundle_missing_digest\ntests/test_audit_export.py::test_export_summary_tool_call_counts\ntests/test_audit_export.py::test_export_summary_time_range\ntests/test_audit_export.py::test_export_summary_time_range_single_event\ntests/test_audit_export.py::test_write_compliance_bundle_compact\ntests/test_audit_viewer.py::AuditViewerHTTPTests::test_api_runs_returns_json_list\ntests/test_audit_viewer.py::AuditViewerHTTPTests::test_api_runs_run_id_returns_json_events\ntests/test_audit_viewer.py::AuditViewerHTTPTests::test_root_lists_run\ntests/test_audit_viewer.py::AuditViewerHTTPTests::test_root_returns_html\ntests/test_audit_viewer.py::AuditViewerHTTPTests::test_run_page_shows_events\ntests/test_audit_viewer.py::AuditViewerHTTPTests::test_unknown_path_returns_404\ntests/test_audit_viewer.py::AuditViewerHTTPTests::test_unknown_run_id_returns_404\ntests/test_audit_viewer.py::AuditViewerHTMLTests::test_run_page_html_escaped\ntests/test_audit_viewer.py::AuditViewerHTMLTests::test_runs_page_html_escaped\ntests/test_audit_viewer.py::AuditServeCliTests::test_audit_serve_requires_root_and_runs_server\ntests/test_auto_mode.py::TestAutoModeConfig::test_defaults\ntests/test_auto_mode.py::TestAutoModeGuard::test_cost_limit\ntests/test_auto_mode.py::TestAutoModeGuard::test_iteration_limit\ntests/test_auto_mode.py::TestAutoModeGuard::test_summary\ntests/test_auto_mode.py::TestAutoModeGuard::test_tool_allowed_with_denylist\ntests/test_auto_mode.py::TestAutoModeGuard::test_tool_allowed_with_whitelist\ntests/test_auto_mode.py::TestAutoModeGuard::test_tool_call_limit\ntests/test_auto_mode.py::TestAutoModeGuard::test_wall_clock_limit\ntests/test_automation_chain.py::test_compose_chained_task_includes_upstream_summary\ntests/test_automation_chain.py::test_validate_context_from_requires_existing_automation\ntests/test_automation_chain.py::test_resolve_chained_task_uses_handoff_file\ntests/test_automation_collector.py::test_parse_collector_payload_wake_agent_false\ntests/test_automation_collector.py::test_run_collector_command_executes_in_workspace\ntests/test_automation_collector.py::test_run_collector_command_redacts_and_caps_output\ntests/test_automation_collector.py::test_run_collector_command_timeout_returns_structured_result\ntests/test_automation_collector.py::test_validate_collector_command_blocks_shell_and_network_wrappers\ntests/test_automation_collector.py::test_collector_command_digest_tracks_local_script_content\ntests/test_automation_delivery.py::test_resolve_automation_webhook_url_from_env\ntests/test_automation_delivery.py::test_resolve_automation_webhook_url_from_config\ntests/test_automation_delivery.py::test_deliver_skips_non_webhook_delivery\ntests/test_automation_delivery.py::test_resolve_webhook_secret_from_env\ntests/test_automation_delivery.py::test_dry_run_errors_when_webhook_delivery_without_url\ntests/test_automation_delivery.py::test_sign_webhook_body_matches_audit_sink_convention\ntests/test_automation_delivery.py::test_deliver_automation_tick_posts_json\ntests/test_automation_delivery.py::test_deliver_webhook_returns_false_without_url\ntests/test_automation_delivery.py::test_deliver_webhook_raises_on_network_error\ntests/test_automation_delivery.py::test_deliver_webhook_swallows_network_error_by_default\ntests/test_automation_limits.py::test_background_runtime_seconds_parses_iso_timestamp\ntests/test_automation_limits.py::test_enforce_runtime_cap_terminates_when_over_limit\ntests/test_automation_limits.py::test_cost_cap_exceeded_compares_run_estimate\ntests/test_automation_observability.py::test_status_row_includes_observability_fields\ntests/test_automation_observability.py::test_blocked_gate_reason_for_runtime_cap\ntests/test_automation_observability.py::test_build_automation_status_lists_quarantined\ntests/test_automation_observability.py::test_extract_prompt_ledger_from_audit\ntests/test_automation_observability_unit.py::test_extract_run_prompt_ledger_from_audit\ntests/test_automation_observability_unit.py::test_automation_observability_helpers\ntests/test_automation_promote.py::test_promote_quarantined_moves_to_active_dir\ntests/test_automation_promote.py::test_promote_web_message_requires_attestation\ntests/test_automation_promote.py::test_promote_quarantined_rejects_payload_digest_tamper\ntests/test_automation_run_budget.py::test_automation_background_command_includes_cost_cap\ntests/test_automation_run_budget.py::test_background_command_preserves_run_surface_flags\ntests/test_automation_run_budget.py::test_chat_agent_config_cost_cap_defaults_to_runner_budget\ntests/test_automation_status.py::test_automation_status_lists_automations\ntests/test_automation_templates.py::test_repo_watch_template_dry_run_ready\ntests/test_automation_templates.py::test_unknown_template_raises\ntests/test_automation_ticket.py::test_validate_automation_task_rejects_vague_prompt\ntests/test_automation_ticket.py::test_validate_automation_spec_requires_acceptance_criteria_on_dry_run\ntests/test_automation_ticket.py::test_build_automation_dry_run_payload_marks_ready\ntests/test_automation_ticket.py::test_unknown_selected_skill_fails_dry_run\ntests/test_automation_ticket.py::test_resolve_allowed_toolsets_from_permission_mode\ntests/test_automation_ticket.py::test_compute_automation_provenance_digest_is_stable\ntests/test_automation_ticket.py::test_compute_automation_provenance_digest_covers_authority_fields\ntests/test_automation_ticket.py::test_unknown_allowed_toolset_fails_dry_run\ntests/test_automation_ticket.py::test_collector_policy_fails_dry_run_for_network_command\ntests/test_automation_ticket.py::test_runtime_integrity_detects_provenance_tamper\ntests/test_automation_ticket.py::test_self_contained_task_includes_acceptance_and_constraints\ntests/test_automations.py::test_compute_next_run_at_supports_every_and_daily\ntests/test_automations.py::test_agent_automation_crud_flow\ntests/test_automations.py::test_automation_run_skips_when_background_alive\ntests/test_automations.py::test_automation_serve_emits_health_snapshot\ntests/test_background_run.py::test_run_id_from_log_parses_agent_result\ntests/test_background_run.py::test_background_list_reports_dead_pid\ntests/test_background_run.py::test_background_start_echo_command\ntests/test_background_run.py::test_background_reconciles_completed_child_process\ntests/test_background_run.py::test_background_show_includes_run_id_from_log\ntests/test_background_run.py::test_readonly_background_dead_record_does_not_write_file\ntests/test_background_run.py::test_background_stop_and_logs\ntests/test_background_unified.py::test_background_run_store_start\ntests/test_background_unified.py::test_background_run_store_list\ntests/test_background_unified.py::test_background_run_store_get\ntests/test_background_unified.py::test_background_run_store_get_missing\ntests/test_background_unified.py::test_background_run_store_readonly\ntests/test_background_unified.py::test_ultrawork_deprecation_redirect\ntests/test_browser_tools.py::BrowserToolsRegistrationTest::test_all_tools_registered_when_disabled\ntests/test_browser_tools.py::BrowserToolsRegistrationTest::test_disabled_message_constant\ntests/test_browser_tools.py::BrowserToolsRegistrationTest::test_disabled_tool_returns_install_error\ntests/test_browser_tools.py::BrowserToolsRegistrationTest::test_has_playwright_is_bool\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_click_element\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_evaluate_javascript\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_fill_form_field\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_get_content_html\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_get_content_text\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_navigate_error_returns_status\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_navigate_to_url\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_registration_all_tools\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_screenshot_returns_base64\ntests/test_browser_tools.py::BrowserToolsFunctionalTest::test_snapshot_returns_text\ntests/test_budget.py::RunBudgetTests::test_budget_is_frozen\ntests/test_budget.py::RunBudgetTests::test_custom_valid_budget\ntests/test_budget.py::RunBudgetTests::test_default_values_are_valid\ntests/test_budget.py::RunBudgetTests::test_negative_cost_raises\ntests/test_budget.py::RunBudgetTests::test_negative_iterations_raises\ntests/test_budget.py::RunBudgetTests::test_negative_tool_calls_raises\ntests/test_budget.py::RunBudgetTests::test_zero_iterations_raises\ntests/test_budget.py::RunBudgetTests::test_zero_tool_calls_is_valid\ntests/test_bug_fixes.py::TestIndexOutOfBoundsFixes::test_jit_approval_auth_header_bounds_checking\ntests/test_bug_fixes.py::TestIndexOutOfBoundsFixes::test_plan_backtick_split_bounds_checking\ntests/test_bug_fixes.py::TestIndexOutOfBoundsFixes::test_task_token_split_bounds_checking\ntests/test_bug_fixes.py::TestIndexOutOfBoundsFixes::test_status_class_empty_string_handling\ntests/test_bug_fixes.py::TestKeyErrorFixes::test_nested_dict_access_with_get\ntests/test_bug_fixes.py::TestKeyErrorFixes::test_tsb_format_attestation_access\ntests/test_bug_fixes.py::TestKeyErrorFixes::test_tui_approval_subagents_dict_access\ntests/test_bug_fixes.py::TestKeyErrorFixes::test_tui_commands_dict_access\ntests/test_bug_fixes.py::TestKeyErrorFixes::test_doctor_dict_access\ntests/test_bug_fixes.py::TestKeyErrorFixes::test_ergonomics_dict_access\ntests/test_bug_fixes.py::TestResourceLeakFixes::test_notify_urlopen_context_manager\ntests/test_bug_fixes.py::TestResourceLeakFixes::test_automation_delivery_urlopen_context_manager\ntests/test_bug_fixes.py::TestAssertionFailureFixes::test_llm_retry_no_assert\ntests/test_bug_fixes.py::TestAssertionFailureFixes::test_code_analysis_client_no_assert\ntests/test_bug_fixes.py::TestAssertionFailureFixes::test_mcp_http_no_assert\ntests/test_bug_fixes.py::TestContentLengthValidationFix::test_content_length_parsing_with_validation\ntests/test_bug_fixes.py::TestSkillRouterIndexBoundsFix::test_skill_router_issues_list_validation\ntests/test_bug_fixes.py::TestANPAdapterIndexBoundsFix::test_anp_adapter_observations_validation\ntests/test_bug_fixes.py::TestCodeQualityFixes::test_parse_approval_arguments_helper\ntests/test_bug_fixes.py::TestCodeQualityFixes::test_truncate_string_helper\ntests/test_bug_fixes.py::TestCodeQualityFixes::test_resolve_selected_skills_docstring\ntests/test_bug_fixes.py::TestCodeQualityFixes::test_constants_for_magic_numbers\ntests/test_bug_fixes.py::TestLoggingImprovements::test_import_error_logging\ntests/test_bug_fixes.py::TestLoggingImprovements::test_exception_context_logging\ntests/test_bug_fixes.py::TestLoggingImprovements::test_docstring_expansion\ntests/test_bug_fixes.py::TestTypeHintImprovements::test_optional_type_hint_consistency\ntests/test_bug_fixes.py::TestTypeHintImprovements::test_code_ontology_type_hints\ntests/test_bug_fixes.py::TestImportOrganization::test_imports_at_top_level\ntests/test_bug_fixes.py::TestErrorRecoveryImprovement::test_temp_file_cleanup_logging\ntests/test_chat_agent.py::ChatAgentTests::test_approval_policy_allow_all_destructive\ntests/test_chat_agent.py::ChatAgentTests::test_chat_agent_accepts_plain_text_for_simple_question_after_parse_retries\ntests/test_chat_agent.py::ChatAgentTests::test_chat_agent_can_use_code_analysis_tools_when_enabled\ntests/test_chat_agent.py::ChatAgentTests::test_chat_agent_gracefully_degrades_after_parse_retries\ntests/test_chat_agent.py::ChatAgentTests::test_chat_agent_includes_lsp_context_when_task_mentions_code_file\ntests/test_chat_agent.py::ChatAgentTests::test_chat_agent_injects_matching_memories_into_prompt\ntests/test_chat_agent.py::ChatAgentTests::test_chat_agent_injects_task_spec_into_prompt\ntests/test_chat_agent.py::ChatAgentTests::test_chat_agent_rejects_plain_text_fallback_for_workspace_task\ntests/test_chat_agent.py::ChatAgentTests::test_chat_agent_retries_on_invalid_decision_then_recovers\ntests/test_chat_agent.py::ChatAgentTests::test_chat_agent_runs_tool_then_final\ntests/test_chat_agent.py::ChatAgentTests::test_cli_agent_help\ntests/test_chat_agent.py::ChatAgentTests::test_cli_agent_resume_fresh_restart_skips_replay\ntests/test_chat_agent.py::ChatAgentTests::test_cli_agent_resume_replays_observations_and_auto_approves_pending\ntests/test_chat_agent.py::ChatAgentTests::test_cli_agent_resume_replays_original_task\ntests/test_chat_agent.py::ChatAgentTests::test_cli_agent_resume_unknown_run_id_returns_error\ntests/test_chat_agent.py::ChatAgentTests::test_cli_agent_run_approve_call_id_allows_exact_write\ntests/test_chat_agent.py::ChatAgentTests::test_cli_agent_run_hitl_approval_continues_same_run\ntests/test_chat_agent.py::ChatAgentTests::test_cli_agent_run_returns_pending_approval_for_unapproved_write\ntests/test_chat_agent.py::ChatAgentTests::test_cli_agent_run_route_model_uses_routed_model\ntests/test_chat_agent.py::ChatAgentTests::test_destructive_decision_can_be_allowed\ntests/test_chat_agent.py::ChatAgentTests::test_destructive_decision_can_be_approved_by_call_id\ntests/test_chat_agent.py::ChatAgentTests::test_destructive_decision_can_be_approved_by_hitl_handler\ntests/test_chat_agent.py::ChatAgentTests::test_destructive_decision_returns_pending_approval_by_default\ntests/test_chat_agent.py::ChatAgentTests::test_parse_model_decision_accepts_tool_and_final\ntests/test_chat_agent.py::ChatAgentTests::test_read_only_permission_blocks_destructive\ntests/test_chat_agent.py::ChatAgentTests::test_workspace_write_permission_allows_file_write_not_shell\ntests/test_checkpoint.py::ExtractCheckpointTests::test_extracts_known_keys_only\ntests/test_checkpoint.py::ExtractCheckpointTests::test_skips_missing_optional_keys\ntests/test_checkpoint.py::InMemoryCheckpointStoreTests::test_delete_missing_is_noop\ntests/test_checkpoint.py::InMemoryCheckpointStoreTests::test_delete_removes_entry\ntests/test_checkpoint.py::InMemoryCheckpointStoreTests::test_load_missing_returns_none\ntests/test_checkpoint.py::InMemoryCheckpointStoreTests::test_overwrite_updates_snapshot\ntests/test_checkpoint.py::InMemoryCheckpointStoreTests::test_save_and_load\ntests/test_checkpoint.py::SQLiteCheckpointStoreTests::test_creates_parent_dirs\ntests/test_checkpoint.py::SQLiteCheckpointStoreTests::test_delete_removes_entry\ntests/test_checkpoint.py::SQLiteCheckpointStoreTests::test_load_missing_returns_none\ntests/test_checkpoint.py::SQLiteCheckpointStoreTests::test_overwrite_upserts\ntests/test_checkpoint.py::SQLiteCheckpointStoreTests::test_persist_across_instances\ntests/test_checkpoint.py::AgentRunnerCheckpointTests::test_checkpoint_saved_after_tool_call\ntests/test_checkpoint.py::AgentRunnerCheckpointTests::test_initial_context_extra_merged\ntests/test_checkpoint.py::AgentRunnerCheckpointTests::test_task_in_extra_is_not_overwritten\ntests/test_cli.py::CLITests::test_agent_run_code_analysis_flag_enables_tools\ntests/test_cli.py::CLITests::test_agent_status_unknown_run_id_error\ntests/test_cli.py::CLITests::test_audit_list_show_and_prune\ntests/test_cli.py::CLITests::test_cli_help_includes_description\ntests/test_cli.py::CLITests::test_cli_version_outputs_version\ntests/test_cli.py::CLITests::test_completion_outputs_shell_snippet\ntests/test_cli.py::CLITests::test_config_auto_discovery_and_profile\ntests/test_cli.py::CLITests::test_config_defaults_apply_to_optional_flags\ntests/test_cli.py::CLITests::test_daily_dry_run_human_output\ntests/test_cli.py::CLITests::test_doctor_aigateway_compat_mode_reports_gateway_compat\ntests/test_cli.py::CLITests::test_doctor_aigateway_compat_mode_write_env_without_wizard\ntests/test_cli.py::CLITests::test_doctor_aigateway_reports_gateway_mode_when_configured\ntests/test_cli.py::CLITests::test_doctor_aigateway_reports_missing_base_url\ntests/test_cli.py::CLITests::test_doctor_aigateway_wizard_reads_keychain_token_when_input_empty\ntests/test_cli.py::CLITests::test_doctor_aigateway_wizard_writes_compat_base_url\ntests/test_cli.py::CLITests::test_doctor_aigateway_wizard_writes_env\ntests/test_cli.py::CLITests::test_doctor_all_accepts_provider_from_config_string\ntests/test_cli.py::CLITests::test_doctor_all_outputs_aggregate_report\ntests/test_cli.py::CLITests::test_doctor_env_order_reports_paths\ntests/test_cli.py::CLITests::test_doctor_graphqlite_outputs_json\ntests/test_cli.py::CLITests::test_doctor_mcp_wizard_outputs_launch_command\ntests/test_cli.py::CLITests::test_doctor_mcp_wizard_redacts_auth_token_in_launch_command\ntests/test_cli.py::CLITests::test_doctor_model_ok_when_key_set\ntests/test_cli.py::CLITests::test_doctor_model_reports_missing_key\ntests/test_cli.py::CLITests::test_doctor_model_wizard_uses_keychain_when_prompt_empty\ntests/test_cli.py::CLITests::test_doctor_project_wizard_outputs_next_steps\ntests/test_cli.py::CLITests::test_doctor_providers_outputs_checks\ntests/test_cli.py::CLITests::test_doctor_providers_wizard_batch_write_env\ntests/test_cli.py::CLITests::test_doctor_providers_wizard_fails_when_selected_provider_missing\ntests/test_cli.py::CLITests::test_doctor_providers_wizard_sets_env\ntests/test_cli.py::CLITests::test_graphqlite_migrate_shows_status\ntests/test_cli.py::CLITests::test_graphqlite_query_executes_cypher\ntests/test_cli.py::CLITests::test_graphqlite_smoke_runs_real_query\ntests/test_cli.py::CLITests::test_init_interactive_prompts_for_api_key\ntests/test_cli.py::CLITests::test_init_wizard_delegates_to_setup\ntests/test_cli.py::CLITests::test_init_writes_env_file_when_requested\ntests/test_cli.py::CLITests::test_init_writes_workspace_config_non_interactive\ntests/test_cli.py::CLITests::test_mcp_http_allows_remote_bind_with_auth\ntests/test_cli.py::CLITests::test_mcp_http_oauth_active_kid_requires_file\ntests/test_cli.py::CLITests::test_mcp_http_oauth_dpop_replay_ttl_accepted\ntests/test_cli.py::CLITests::test_mcp_http_oauth_key_ring_file_loads\ntests/test_cli.py::CLITests::test_mcp_http_oauth_key_ring_rejects_unknown_active_kid\ntests/test_cli.py::CLITests::test_mcp_http_rejects_remote_bind_without_auth\ntests/test_cli.py::CLITests::test_model_smoke_outputs_provider_and_content\ntests/test_cli.py::CLITests::test_setup_human_output\ntests/test_cli.py::CLITests::test_setup_writes_workspace_and_redacts_stdout\ntests/test_cli.py::CLITests::test_top_level_run_parser_exposes_stream_flags\ntests/test_cli.py::CLITests::test_ultrawork_show_unknown_via_cli\ntests/test_cli.py::CLITests::test_ultrawork_stop_unknown_via_cli\ntests/test_cli_chat.py::test_print_chat_help\ntests/test_cli_chat.py::test_chat_command_with_invalid_args\ntests/test_cli_chat.py::test_chat_command_smoke_test\ntests/test_cli_chat.py::test_run_chat_repl_exit_command\ntests/test_cli_chat.py::test_run_chat_repl_quit_command\ntests/test_cli_chat.py::test_run_chat_repl_help_command\ntests/test_cli_chat.py::test_run_chat_repl_keyboard_interrupt\ntests/test_cli_chat.py::test_run_chat_repl_eof\ntests/test_cli_chat.py::test_run_chat_repl_empty_input\ntests/test_cli_chat.py::test_run_chat_repl_context_command\ntests/test_cli_chat.py::test_run_chat_repl_add_command\ntests/test_cli_chat.py::test_run_chat_repl_drop_command\ntests/test_cli_chat.py::test_run_chat_repl_cost_command\ntests/test_cli_chat.py::test_run_chat_repl_compact_command\ntests/test_cli_chat.py::test_run_chat_repl_provider_command\ntests/test_cli_chat.py::test_run_chat_repl_model_command\ntests/test_cli_chat.py::test_run_chat_repl_effort_command\ntests/test_cli_chat.py::test_run_chat_repl_budget_command\ntests/test_cli_chat.py::test_run_chat_repl_provider_command_updates_adapter\ntests/test_cli_chat.py::test_run_chat_repl_model_command_updates_adapter\ntests/test_cli_chat.py::test_run_chat_repl_effort_command_updates_budget\ntests/test_cli_chat.py::test_cli_default_entry_launches_chat\ntests/test_cli_chat.py::test_git_sandbox_consent_saved_to_config\ntests/test_cli_chat.py::test_chat_parser_initial_task\ntests/test_cli_chat.py::test_shell_escape_blocked_in_chat_repl\ntests/test_cli_chat.py::test_execute_shell_command_simple\ntests/test_cli_chat.py::test_execute_shell_command_destructive_blocked\ntests/test_cli_chat.py::test_execute_shell_command_not_found\ntests/test_cli_chat.py::test_complete_file_path_basic\ntests/test_cli_chat.py::test_complete_file_path_with_directory\ntests/test_cli_chat.py::test_complete_file_path_no_match\ntests/test_cli_chat.py::test_complete_symbol_basic\ntests/test_cli_chat.py::test_complete_symbol_no_match\ntests/test_cli_chat.py::test_show_interactive_diff_basic\ntests/test_cli_chat.py::test_suspend_to_background_basic\ntests/test_cli_chat.py::test_suspend_to_background_with_dirty_workspace\ntests/test_cli_chat.py::test_suspend_to_background_preserves_context\ntests/test_cli_chat.py::test_interactive_review_mode_no_changes\ntests/test_cli_chat.py::test_interactive_review_mode_invalid_run_id\ntests/test_cli_chat.py::test_interactive_review_mode_with_changes\ntests/test_cli_chat.py::test_dual_mode_integration_suspension_to_review\ntests/test_cli_chat.py::test_acp_state_consistency_across_modes\ntests/test_cli_chat.py::test_git_sandbox_consent_updates_existing_config\ntests/test_cli_ergonomics_handlers.py::test_yesterday_recall_and_status_commands\ntests/test_cli_ergonomics_handlers.py::test_background_session_and_approval_commands\ntests/test_cli_ergonomics_handlers.py::test_approval_check_and_revoke_cli\ntests/test_cli_ergonomics_handlers.py::test_ci_review_print_only_and_journal\ntests/test_cli_ergonomics_handlers.py::test_status_short_and_resume_missing_provider\ntests/test_cli_ergonomics_handlers.py::test_recipes_run_invokes_agent_when_provider_set\ntests/test_cli_ergonomics_handlers.py::test_ci_review_runs_agent_with_staged_diff\ntests/test_cli_ergonomics_handlers.py::test_daily_journal_command_requires_provider\ntests/test_cli_ergonomics_handlers.py::test_register_code_parse_backend_rejects_empty_name\ntests/test_cli_ergonomics_handlers.py::test_daily_journal_render_and_cost_helpers\ntests/test_cli_ergonomics_handlers.py::test_approval_check_with_arg_flags\ntests/test_cli_ergonomics_handlers.py::test_approval_explain_with_mismatch_reasons\ntests/test_cli_ergonomics_handlers.py::test_approval_pending_and_approve_workflow\ntests/test_cli_ergonomics_handlers.py::test_approval_preset_and_doctor\ntests/test_cli_ergonomics_handlers.py::test_approval_check_invalid_json\ntests/test_cli_ergonomics_handlers.py::test_approval_preset_uses_correct_tool_names\ntests/test_cli_ergonomics_handlers.py::test_approval_approve_persists_state\ntests/test_cli_ergonomics_handlers.py::test_approval_explain_shows_expired_and_mode_mismatch\ntests/test_cli_ergonomics_handlers.py::test_readonly_commands_dont_mutate_fresh_workspace\ntests/test_cli_ergonomics_handlers.py::test_runstore_readonly_prevents_mutation\ntests/test_cli_ergonomics_handlers.py::test_readonly_query_commands_do_not_create_teaagent_dir\ntests/test_cli_ergonomics_handlers.py::test_table_driven_zero_footprint_queries_vs_mutating_initializers\ntests/test_cli_ergonomics_handlers.py::test_black_box_cli_zero_footprint_commands\ntests/test_cli_ergonomics_handlers.py::test_approval_why_denied_returns_denials\ntests/test_cli_ergonomics_handlers.py::test_approval_why_denied_filter_by_call_id\ntests/test_cli_ergonomics_handlers.py::test_approval_why_denied_no_denials\ntests/test_cli_ergonomics_handlers.py::test_approval_why_denied_run_not_found\ntests/test_cli_execution.py::test_agent_execution_factory_creates_components\ntests/test_cli_execution.py::test_agent_execution_factory_creates_execution_context\ntests/test_cli_execution.py::test_default_command_executor_is_abstract\ntests/test_cli_execution.py::test_default_command_executor_execute\ntests/test_cli_execution.py::test_execution_context_dataclass\ntests/test_cli_experiment.py::ExperimentCommandTests::test_experiment_cancel_non_git_repo\ntests/test_cli_experiment.py::ExperimentCommandTests::test_experiment_cancel_orphaned_only\ntests/test_cli_experiment.py::ExperimentCommandTests::test_experiment_compare_no_options\ntests/test_cli_experiment.py::ExperimentCommandTests::test_experiment_compare_non_git_repo\ntests/test_cli_experiment.py::ExperimentCommandTests::test_experiment_list_git_repo\ntests/test_cli_experiment.py::ExperimentCommandTests::test_experiment_list_non_git_repo\ntests/test_cli_experiment.py::ExperimentCommandTests::test_experiment_select_invalid_option\ntests/test_cli_experiment.py::ExperimentCommandTests::test_experiment_select_non_git_repo\ntests/test_cli_permission_explain.py::test_permission_explain_all_modes\ntests/test_cli_permission_explain.py::test_permission_explain_read_only\ntests/test_cli_permission_explain.py::test_permission_explain_danger_full_access\ntests/test_cli_permission_explain.py::test_permission_explain_workspace_write\ntests/test_cli_permission_explain.py::test_permission_explain_prompt\ntests/test_cli_permission_explain.py::test_permission_explain_allow\ntests/test_cli_permission_explain.py::test_permission_explain_help_works\ntests/test_cli_permission_explain.py::test_all_mode_entries_have_required_fields\ntests/test_code_analysis.py::test_code_analysis_tools_not_registered_when_disabled\ntests/test_code_analysis.py::test_code_analysis_tools_registered_and_callable\ntests/test_code_analysis.py::test_ingest_code_relations_to_graph\ntests/test_code_analysis.py::test_graph_isolation_by_root\ntests/test_code_analysis.py::test_extract_tree_sitter_relations_unknown_extension_returns_empty\ntests/test_code_analysis.py::test_extract_tree_sitter_relations_known_extension_parser_failure_falls_back\ntests/test_code_analysis.py::test_extract_tree_sitter_relations_non_python_parser_failure_raises\ntests/test_code_analysis_client.py::test_initialize_and_definition_roundtrip\ntests/test_code_analysis_client.py::test_diagnostics_shape\ntests/test_code_analysis_graph_cache.py::test_graph_cache_evicts_oldest_when_over_capacity\ntests/test_code_analysis_manager.py::test_unknown_extension_has_no_client\ntests/test_code_analysis_manager.py::test_missing_lsp_binary_gracefully_returns_none\ntests/test_code_analysis_prompt.py::test_extract_candidate_paths_from_task_and_spec\ntests/test_code_analysis_prompt.py::test_get_lsp_context_renders_diagnostics_and_symbols\ntests/test_code_graph_integration.py::TestCodeGraphIntegration::test_ingest_code_relations_to_graph\ntests/test_code_mode_trusted_only.py::test_child_process_backend_rejects_untrusted_mode\ntests/test_code_ontology.py::CodeOntologyTests::test_builder_extracts_function_calls\ntests/test_code_ontology.py::CodeOntologyTests::test_builder_extracts_imports\ntests/test_code_ontology.py::CodeOntologyTests::test_builder_extracts_inheritance\ntests/test_code_ontology.py::CodeOntologyTests::test_builder_handles_syntax_errors\ntests/test_code_ontology.py::CodeOntologyTests::test_builder_parses_simple_python_file\ntests/test_code_ontology.py::CodeOntologyTests::test_code_edge_to_dict\ntests/test_code_ontology.py::CodeOntologyTests::test_code_node_to_dict\ntests/test_code_ontology.py::CodeOntologyTests::test_ontology_graph_without_store\ntests/test_conformance_tiers.py::StreamingTierTests::test_streaming_fails_when_no_chunks\ntests/test_conformance_tiers.py::StreamingTierTests::test_streaming_passes_when_chunks_received\ntests/test_conformance_tiers.py::StreamingTierTests::test_streaming_skipped_when_not_configured\ntests/test_conformance_tiers.py::StructuredOutputTierTests::test_structured_output_fails_for_non_json\ntests/test_conformance_tiers.py::StructuredOutputTierTests::test_structured_output_passes_for_valid_json\ntests/test_conformance_tiers.py::StructuredOutputTierTests::test_tiered_report_as_dict_includes_new_tiers\ntests/test_conformance_tiers.py::ConformanceTierEnumTests::test_all_four_tiers_exist\ntests/test_consensus.py::TestPeerIdentity::test_peer_identity_creation\ntests/test_consensus.py::TestPeerIdentity::test_fingerprint_generation\ntests/test_consensus.py::TestPeerIdentity::test_signature_verification\ntests/test_consensus.py::TestPeerIdentity::test_signature_verification_invalid\ntests/test_consensus.py::TestVote::test_vote_creation\ntests/test_consensus.py::TestVote::test_vote_with_comment\ntests/test_consensus.py::TestVote::test_vote_serialization\ntests/test_consensus.py::TestProposal::test_proposal_creation\ntests/test_consensus.py::TestProposal::test_proposal_expiration\ntests/test_consensus.py::TestProposal::test_proposal_serialization\ntests/test_consensus.py::TestConsensusState::test_consensus_state_creation\ntests/test_consensus.py::TestConsensusState::test_add_vote\ntests/test_consensus.py::TestConsensusState::test_get_vote\ntests/test_consensus.py::TestConsensusState::test_has_voted\ntests/test_consensus.py::TestConsensusState::test_vote_counting\ntests/test_consensus.py::TestConsensusState::test_quorum_calculation_simple_majority\ntests/test_consensus.py::TestConsensusState::test_quorum_calculation_supermajority\ntests/test_consensus.py::TestConsensusState::test_quorum_calculation_unanimous\ntests/test_consensus.py::TestConsensusState::test_has_quorum\ntests/test_consensus.py::TestConsensusState::test_is_approved_simple_majority\ntests/test_consensus.py::TestConsensusState::test_is_approved_rejected\ntests/test_consensus.py::TestConsensusState::test_is_approved_unanimous\ntests/test_consensus.py::TestConsensusState::test_consensus_state_serialization\ntests/test_consensus.py::TestConsensusConfig::test_config_creation\ntests/test_consensus.py::TestConsensusConfig::test_config_custom_values\ntests/test_consensus.py::TestConsensusConfig::test_config_serialization\ntests/test_consensus.py::TestPeerRegistry::test_registry_in_memory\ntests/test_consensus.py::TestPeerRegistry::test_registry_duplicate_error\ntests/test_consensus.py::TestPeerRegistry::test_registry_unregister\ntests/test_consensus.py::TestPeerRegistry::test_registry_list_active\ntests/test_consensus.py::TestPeerRegistry::test_registry_activate_deactivate\ntests/test_consensus.py::TestPeerRegistry::test_registry_key_rotation\ntests/test_consensus.py::TestPeerRegistry::test_registry_verify_peer\ntests/test_consensus.py::TestPeerRegistry::test_registry_verify_inactive_peer\ntests/test_consensus.py::TestPeerRegistry::test_registry_persistence\ntests/test_consensus.py::TestPeerRegistry::test_registry_persistence_empty\ntests/test_consensus.py::TestVotingMechanism::test_initiate_voting\ntests/test_consensus.py::TestVotingMechanism::test_cast_vote\ntests/test_consensus.py::TestVotingMechanism::test_cast_vote_duplicate\ntests/test_consensus.py::TestVotingMechanism::test_cast_vote_closed\ntests/test_consensus.py::TestVotingMechanism::test_cancel_vote\ntests/test_consensus.py::TestVotingMechanism::test_check_timeout\ntests/test_consensus.py::TestVotingMechanism::test_close_voting_approved\ntests/test_consensus.py::TestVotingMechanism::test_close_voting_rejected\ntests/test_consensus.py::TestVotingMechanism::test_list_active_votings\ntests/test_consensus.py::TestVotingMechanism::test_cleanup_completed\ntests/test_consensus.py::TestConsensusEngine::test_request_consensus\ntests/test_consensus.py::TestConsensusEngine::test_request_consensus_custom_peers\ntests/test_consensus.py::TestConsensusEngine::test_request_consensus_no_peers\ntests/test_consensus.py::TestConsensusEngine::test_submit_vote\ntests/test_consensus.py::TestConsensusEngine::test_submit_vote_invalid_signature\ntests/test_consensus.py::TestConsensusEngine::test_get_consensus_status\ntests/test_consensus.py::TestConsensusEngine::test_get_consensus_status_expired\ntests/test_consensus.py::TestConsensusEngine::test_generate_attestation\ntests/test_consensus.py::TestConsensusEngine::test_generate_attestation_not_approved\ntests/test_consensus.py::TestConsensusEngine::test_cancel_consensus\ntests/test_consensus.py::TestConsensusEngine::test_resolve_conflict\ntests/test_consensus.py::TestConsensusEngine::test_list_active_consensus\ntests/test_consensus.py::TestConsensusEngine::test_engine_persistence\ntests/test_consensus_cli.py::test_consensus_peers_list_empty\ntests/test_consensus_cli.py::test_consensus_peers_add\ntests/test_consensus_cli.py::test_consensus_peers_list_after_add\ntests/test_consensus_cli.py::test_consensus_peers_remove\ntests/test_consensus_cli.py::test_consensus_peers_activate\ntests/test_consensus_cli.py::test_consensus_peers_deactivate\ntests/test_consensus_cli.py::test_consensus_status\ntests/test_consensus_cli.py::test_consensus_history\ntests/test_consensus_cli.py::test_consensus_config_set\ntests/test_consensus_cli.py::test_consensus_request\ntests/test_consensus_cli.py::test_consensus_vote\ntests/test_context_auto_compaction.py::AutoCompactionTests::test_compaction_manager_auto_trigger\ntests/test_context_auto_compaction.py::AutoCompactionTests::test_compaction_manager_disabled\ntests/test_context_auto_compaction.py::AutoCompactionTests::test_compaction_manager_respects_interval\ntests/test_context_auto_compaction.py::AutoCompactionTests::test_compaction_manager_token_estimation\ntests/test_context_pack.py::ContextPackTests::test_build_context_pack_is_deterministic_for_task_paths\ntests/test_context_pack.py::ContextPackTests::test_context_pack_candidate_quality_for_daily_usage_task\ntests/test_context_pack.py::ContextPackTests::test_context_pack_includes_graphqlite_hits_when_db_exists\ntests/test_context_pack.py::ContextPackTests::test_context_pack_includes_hybrid_hits_when_index_exists\ntests/test_context_pack.py::ContextPackTests::test_context_pack_includes_knowledge_hits_when_marker_exists\ntests/test_context_pack.py::ContextPackTests::test_context_pack_only_touches_memory_catalog_dir\ntests/test_context_pack.py::ContextPackTests::test_context_pack_uses_lsp_symbols_when_hydration_succeeds\ntests/test_daily.py::DailyTokenBudgetTests::test_harness_health_warns_without_optional_indexes\ntests/test_daily.py::DailyTokenBudgetTests::test_token_budget_reports_contributors_and_cost\ntests/test_daily.py::DailyTokenBudgetTests::test_unknown_model_context_window_degrades_to_unknown_zone\ntests/test_docs_consistency.py::test_validate_docs_consistency_passes_when_inputs_match\ntests/test_docs_consistency.py::test_validate_docs_consistency_detects_mismatch\ntests/test_docs_consistency.py::test_validate_provider_docs_consistency_passes_for_repo_docs\ntests/test_docs_consistency.py::test_validate_plugin_skill_catalog_passes_for_repo_catalog\ntests/test_docs_consistency.py::test_validate_survey_doc_passes_for_repo_survey\ntests/test_docs_consistency.py::test_validate_mode_safety_matrix_passes_for_repo_usage\ntests/test_docs_consistency.py::test_validate_surface_recipes_passes_for_repo_usage\ntests/test_docs_consistency.py::test_validate_provider_docs_detects_stale_llm_adapter_count\ntests/test_docs_consistency.py::test_validate_date_coherence_detects_use_cases_survey_drift\ntests/test_docs_consistency.py::test_validate_matrix_open_gap_count_detects_stale_matrix\ntests/test_docs_consistency.py::test_open_partial_planned_gap_count_matches_use_cases_section\ntests/test_docs_generator_guardrails.py::test_build_use_case_matrix_requires_survey_review_date\ntests/test_docs_generator_guardrails.py::test_build_use_case_matrix_includes_canonical_markers\ntests/test_env_config.py::PackageSpecTests::test_package_spec_defaults\ntests/test_env_config.py::PackageSpecTests::test_package_spec_with_extras\ntests/test_env_config.py::PackageSpecTests::test_package_spec_with_version\ntests/test_env_config.py::EnvironmentSpecTests::test_environment_spec_defaults\ntests/test_env_config.py::EnvironmentSpecTests::test_environment_spec_with_packages\ntests/test_env_config.py::ParseTeaagentTomlTests::test_parse_complex_config\ntests/test_env_config.py::ParseTeaagentTomlTests::test_parse_missing_file\ntests/test_env_config.py::ParseTeaagentTomlTests::test_parse_simple_config\ntests/test_env_config.py::LockfileTests::test_lockfile_deserialization\ntests/test_env_config.py::LockfileTests::test_lockfile_generation\ntests/test_env_config.py::LockfileTests::test_lockfile_integrity_tampered\ntests/test_env_config.py::LockfileTests::test_lockfile_integrity_verification\ntests/test_env_config.py::LockfileTests::test_lockfile_serialization\ntests/test_env_config.py::LockfileTests::test_lockfile_write_read\ntests/test_env_config.py::LockfileTests::test_read_missing_lockfile\ntests/test_ergonomics.py::test_load_workspace_defaults_merges_toml_and_json\ntests/test_ergonomics.py::test_expand_at_references\ntests/test_ergonomics.py::test_approval_preset_store\ntests/test_ergonomics.py::test_scoped_approval_path_glob\ntests/test_ergonomics.py::test_scoped_approval_command_prefix\ntests/test_ergonomics.py::test_multiple_grants_same_tool\ntests/test_ergonomics.py::test_scoped_deny_blocks_only_matching_paths\ntests/test_ergonomics.py::test_once_consumes_single_grant_only\ntests/test_ergonomics.py::test_approval_check_reports_deny_before_allow\ntests/test_ergonomics.py::test_approval_check_does_not_consume_once\ntests/test_ergonomics.py::test_approval_revoke_removes_grant\ntests/test_ergonomics.py::test_migrate_grant_id_writes_audit\ntests/test_ergonomics.py::test_legacy_once_grant_without_grant_id_is_consumed\ntests/test_ergonomics.py::test_scoped_approval_once_consumed\ntests/test_ergonomics.py::test_cli_approval_handler_honors_run_root\ntests/test_ergonomics.py::test_scoped_approval_expired_grant\ntests/test_ergonomics.py::test_first_hour_recipe_listed\ntests/test_ergonomics.py::test_recipes_registry\ntests/test_ergonomics.py::test_guidance_collects_agents_md\ntests/test_ergonomics.py::test_daily_journal_path\ntests/test_ergonomics.py::test_cli_init_writes_toml\ntests/test_ergonomics.py::test_top_level_daily_parser_is_visible\ntests/test_ergonomics.py::test_normalize_providerless_run_task\ntests/test_ergonomics.py::test_attach_follow_exits_on_terminal_run\ntests/test_ergonomics.py::test_session_stream_yields_events\ntests/test_ergonomics.py::test_model_capabilities_table\ntests/test_ergonomics.py::test_list_at_candidates\ntests/test_ergonomics.py::test_merge_acp_context_blocks\ntests/test_ergonomics.py::test_model_capabilities_match_providers\ntests/test_ergonomics.py::test_provider_required_without_init\ntests/test_ergonomics.py::test_resolve_auto_compact_defaults\ntests/test_ergonomics.py::test_scoped_approval_hardening_and_observability\ntests/test_ergonomics.py::test_approval_doctor_scoped_auditing_and_pruning\ntests/test_ergonomics.py::test_agent_resume_auto_approve_creates_scoped_approval\ntests/test_ergonomics.py::test_resume_policy_strict_exact_match_wiring\ntests/test_ergonomics.py::test_legacy_approval_list_returns_stable_id_without_migration\ntests/test_ergonomics_modules.py::test_notify_darwin\ntests/test_ergonomics_modules.py::test_notify_linux\ntests/test_ergonomics_modules.py::test_notify_returns_false_on_failure\ntests/test_ergonomics_modules.py::test_notify_unknown_platform\ntests/test_ergonomics_modules.py::test_escape_quotes\ntests/test_ergonomics_modules.py::test_parse_day_handles_invalid\ntests/test_ergonomics_modules.py::test_list_yesterday_and_recall_runs\ntests/test_ergonomics_modules.py::test_list_recall_enrich_handles_pending_errors\ntests/test_ergonomics_modules.py::test_estimate_run_cost_and_daily_cap\ntests/test_ergonomics_modules.py::test_build_status_short\ntests/test_ergonomics_modules.py::test_build_status_short_missing_heartbeat\ntests/test_ergonomics_modules.py::test_read_toml_and_json_edge_cases\ntests/test_ergonomics_modules.py::test_automation_limits_runtime_and_cost\ntests/test_errors.py::ErrorCategoryTests::test_categories_are_string_enum\ntests/test_errors.py::ErrorCategoryTests::test_category_is_instance_of_str\ntests/test_errors.py::ErrorHierarchyTests::test_agent_harness_error_is_exception\ntests/test_errors.py::ErrorHierarchyTests::test_budget_exceeded_is_model_logic\ntests/test_errors.py::ErrorHierarchyTests::test_error_message_is_preserved\ntests/test_errors.py::ErrorHierarchyTests::test_tool_execution_error_is_system\ntests/test_errors.py::ErrorHierarchyTests::test_tool_permission_error_is_permission\ntests/test_errors.py::ErrorHierarchyTests::test_tool_validation_error_is_model_logic\ntests/test_errors.py::ErrorCategoryMatchingTests::test_model_logic_errors_create_failed_model_logic_status\ntests/test_errors.py::ErrorCategoryMatchingTests::test_permission_errors_create_failed_permission_status\ntests/test_errors.py::ErrorCategoryMatchingTests::test_system_errors_create_failed_system_status\ntests/test_errors.py::DenialReasonCodeTests::test_all_reason_codes_are_strings\ntests/test_errors.py::DenialReasonCodeTests::test_auto_mode_blocked_code\ntests/test_errors.py::DenialReasonCodeTests::test_enum_values_distinct\ntests/test_errors.py::DenialReasonCodeTests::test_file_policy_denied_code\ntests/test_errors.py::DenialReasonCodeTests::test_jit_no_approval_code\ntests/test_errors.py::DenialReasonCodeTests::test_jit_user_denied_code\ntests/test_errors.py::DenialReasonCodeTests::test_missing_state_code\ntests/test_errors.py::DenialReasonCodeTests::test_multisig_no_quorum_code\ntests/test_errors.py::DenialReasonCodeTests::test_plan_contract_denied_code\ntests/test_errors.py::DenialReasonCodeTests::test_read_only_mode_code\ntests/test_errors.py::DenialReasonCodeTests::test_workspace_write_mode_code\ntests/test_errors.py::ToolPermissionErrorReasonCodeTests::test_can_set_reason_code\ntests/test_errors.py::ToolPermissionErrorReasonCodeTests::test_custom_hint_with_reason_code\ntests/test_errors.py::ToolPermissionErrorReasonCodeTests::test_default_reason_code_is_none\ntests/test_errors.py::ToolPermissionErrorReasonCodeTests::test_hint_still_defaults_when_no_reason_code\ntests/test_errors.py::ToolPermissionErrorReasonCodeTests::test_hint_still_defaults_with_reason_code\ntests/test_errors.py::ToolPermissionErrorReasonCodeTests::test_reason_code_in_error_hierarchy\ntests/test_eval.py::RunEvalTests::test_all_pass_when_expected_found\ntests/test_eval.py::RunEvalTests::test_case_without_expected_always_passes\ntests/test_eval.py::RunEvalTests::test_empty_cases_pass_rate_zero\ntests/test_eval.py::RunEvalTests::test_fails_when_expected_missing\ntests/test_eval.py::RunEvalTests::test_judge_score_field_none_in_basic_run_eval\ntests/test_eval.py::RunEvalWithJudgeTests::test_fails_when_expected_missing_even_if_judge_passes\ntests/test_eval.py::RunEvalWithJudgeTests::test_fails_when_judge_score_below_threshold\ntests/test_eval.py::RunEvalWithJudgeTests::test_no_judge_prompt_skips_judge_call\ntests/test_eval.py::RunEvalWithJudgeTests::test_passes_when_judge_score_above_threshold\ntests/test_eval.py::RunEvalWithJudgeTests::test_threshold_from_judge_fn_attribute\ntests/test_eval.py::MakeLLMJudgeFnTests::test_clamps_score_to_0_1\ntests/test_eval.py::MakeLLMJudgeFnTests::test_error_on_adapter_failure\ntests/test_eval.py::MakeLLMJudgeFnTests::test_parses_json_score\ntests/test_eval.py::MakeLLMJudgeFnTests::test_parses_score_from_non_json_response\ntests/test_eval.py::MakeLLMJudgeFnTests::test_passing_threshold_stored_on_fn\ntests/test_external_backends.py::test_fallback_knowledge_backend_uses_primary_when_available\ntests/test_external_backends.py::test_fallback_knowledge_backend_falls_back_on_error\ntests/test_external_backends.py::test_code_parse_backend_registry_roundtrip\ntests/test_external_backends.py::test_knowledge_backend_registry_roundtrip\ntests/test_external_backends.py::test_register_knowledge_backend_rejects_empty_name\ntests/test_external_backends.py::test_get_unknown_knowledge_backend_raises\ntests/test_external_backends.py::test_fallback_health_reports_primary_failure\ntests/test_external_backends.py::test_fallback_index_and_get_use_fallback\ntests/test_external_backends.py::test_cx_cli_adapter_parses_json_and_raw_output\ntests/test_external_backends.py::test_local_knowledge_adapter_reads_file\ntests/test_external_backends.py::test_cx_cli_adapter_timeout_raises_backend_execution_error\ntests/test_external_backends.py::test_cx_cli_adapter_non_zero_exit_raises_backend_execution_error\ntests/test_external_backends.py::test_cx_cli_adapter_success_passes_timeout\ntests/test_external_backends.py::test_qmd_cli_adapter_timeout_raises_backend_execution_error\ntests/test_external_backends.py::test_qmd_cli_adapter_non_zero_exit_raises_backend_execution_error\ntests/test_federated_sync.py::test_graph_change_creation\ntests/test_federated_sync.py::test_sync_message_creation\ntests/test_federated_sync.py::test_sync_ack_creation\ntests/test_federated_sync.py::test_sync_state_creation\ntests/test_federated_sync.py::test_federated_sync_initialization\ntests/test_federated_sync.py::test_federated_sync_load_state\ntests/test_federated_sync.py::test_record_node_change\ntests/test_federated_sync.py::test_record_edge_change\ntests/test_federated_sync.py::test_create_sync_message\ntests/test_federated_sync.py::test_process_sync_message_without_store\ntests/test_federated_sync.py::test_export_import_sync_message\ntests/test_federated_sync.py::test_concurrent_record_node_changes\ntests/test_federated_sync.py::test_import_sync_message_oserror_returns_none\ntests/test_federated_sync.py::test_sync_state_persistence\ntests/test_federated_sync.py::test_change_id_generation\ntests/test_federated_sync.py::test_graph_version_update\ntests/test_federated_sync.py::test_collect_approval_signatures_async_non_blocking\ntests/test_federated_sync.py::test_collect_approval_signatures_quorum_and_dedup\ntests/test_federated_sync.py::test_collect_approval_signatures_uses_async_sleep\ntests/test_federated_sync.py::test_collect_approval_signatures_rejects_missing_auth_token\ntests/test_federated_sync.py::test_submit_approval_signature_includes_auth_token_when_configured\ntests/test_file_tail.py::test_iter_jsonl_tail_follows_appended_lines\ntests/test_file_tail.py::test_iter_jsonl_tail_reads_existing_lines_without_follow\ntests/test_focus.py::test_focus_frame_creation\ntests/test_focus.py::test_focus_stack_push_pop\ntests/test_focus.py::test_focus_stack_serialization\ntests/test_focus.py::test_session_compression_on_topic_return\ntests/test_focus.py::test_session_focus_stack_integration\ntests/test_gatherer.py::test_gatherer_sufficient_on_first_turn\ntests/test_gatherer.py::test_gatherer_soft_limit_warning\ntests/test_gatherer.py::test_gatherer_hard_limit_error\ntests/test_gatherer.py::test_gatherer_gathers_on_insufficient\ntests/test_gatherer.py::test_gatherer_respects_sufficient_after_gathering\ntests/test_gatherer_skill_rag.py::TestGathererSkillRAGIntegration::test_gatherer_uses_skill_rag_when_enabled\ntests/test_gatherer_skill_rag.py::TestGathererSkillRAGIntegration::test_gatherer_fallback_to_flat_when_skill_rag_disabled\ntests/test_gatherer_skill_rag.py::TestGathererSkillRAGIntegration::test_gatherer_fallback_on_skill_rag_error\ntests/test_gatherer_skill_rag.py::TestGathererSkillRAGIntegration::test_gatherer_respects_hard_limit\ntests/test_gatherer_skill_rag.py::TestGathererSkillRAGIntegration::test_skill_rag_token_reduction_benefit\ntests/test_gatherer_skill_rag.py::TestGathererSkillRAGIntegration::test_gatherer_without_retriever_uses_flat\ntests/test_gatherer_skill_rag.py::TestGathererSkillRAGIntegration::test_gatherer_skill_rag_max_rounds_respected\ntests/test_git_sandbox.py::test_is_git_repository_non_git\ntests/test_git_sandbox.py::test_is_git_repository_git_repo\ntests/test_git_sandbox.py::test_is_worktree_clean_clean\ntests/test_git_sandbox.py::test_is_worktree_clean_dirty\ntests/test_git_sandbox.py::test_stash_save_and_pop\ntests/test_git_sandbox.py::test_stash_untracked_files\ntests/test_git_sandbox.py::test_git_sandbox_not_available_non_git\ntests/test_git_sandbox.py::test_git_sandbox_available_in_git_repo\ntests/test_git_sandbox.py::test_git_sandbox_start_clean\ntests/test_git_sandbox.py::test_git_sandbox_start_dirty_no_stash\ntests/test_git_sandbox.py::test_git_sandbox_start_dirty_with_stash\ntests/test_git_sandbox.py::test_git_sandbox_commit_transaction\ntests/test_git_sandbox.py::test_git_sandbox_merge_squash\ntests/test_git_sandbox.py::test_git_sandbox_discard\ntests/test_git_sandbox.py::test_rollback_with_dirty_sandbox\ntests/test_git_sandbox.py::test_git_sandbox_keep\ntests/test_git_sandbox.py::test_git_transaction_sink\ntests/test_git_sandbox.py::test_git_transaction_sink_ignores_failed_calls\ntests/test_git_sandbox.py::test_git_transaction_sink_commits_shell_mutate\ntests/test_git_sandbox.py::test_find_orphaned_sandbox_branches\ntests/test_git_sandbox.py::test_prune_sandbox_branch\ntests/test_git_sandbox.py::test_find_orphaned_sandbox_branches_with_active_run\ntests/test_git_sandbox.py::test_has_merge_conflicts_no_conflicts\ntests/test_git_sandbox.py::test_get_conflicted_files_no_conflicts\ntests/test_git_sandbox.py::test_abort_merge_no_merge\ntests/test_git_sandbox.py::test_extract_conflict_context\ntests/test_git_sandbox.py::test_apply_llm_resolution\ntests/test_git_sandbox.py::test_parallel_experiment_stack_start_all\ntests/test_git_sandbox.py::test_parallel_experiment_stack_get_sandbox\ntests/test_git_sandbox.py::test_parallel_experiment_stack_cleanup_all\ntests/test_git_sandbox.py::test_parallel_experiment_stack_cleanup_keep_best\ntests/test_git_sandbox.py::test_os_sandbox_is_path_allowed\ntests/test_git_sandbox.py::test_os_sandbox_sanitize_environment\ntests/test_git_sandbox.py::test_os_sandbox_execute_sandboxed\ntests/test_git_sandbox.py::test_os_sandbox_set_resource_limits\ntests/test_git_tools.py::TestGitAdd::test_add_all\ntests/test_git_tools.py::TestGitAdd::test_add_specific_file\ntests/test_git_tools.py::TestGitCommit::test_commit_amend\ntests/test_git_tools.py::TestGitCommit::test_commit_with_message\ntests/test_git_tools.py::TestGitBranch::test_create_and_checkout\ntests/test_git_tools.py::TestGitBranch::test_create_branch\ntests/test_git_tools.py::TestGitCheckout::test_checkout_create_new\ntests/test_git_tools.py::TestGitCheckout::test_checkout_existing_branch\ntests/test_git_tools.py::TestGitStash::test_stash_and_pop\ntests/test_git_tools.py::TestGitToolsRegistration::test_git_tools_are_destructive\ntests/test_git_tools.py::TestGitToolsRegistration::test_register_all_git_tools\ntests/test_governance_adversarial_runtime.py::test_lint_catches_mislabelled_plugin_write_tool\ntests/test_governance_adversarial_runtime.py::test_read_only_blocks_mislabelled_write_tool_by_name_at_runtime\ntests/test_governance_adversarial_runtime.py::test_runner_blocks_mislabelled_plugin_write_in_read_only_before_handler\ntests/test_governance_adversarial_runtime.py::test_plugin_load_then_read_only_runner_blocks_standard_write_name\ntests/test_governance_adversarial_runtime.py::test_custom_plugin_without_read_only_annotation_blocked\ntests/test_governance_adversarial_runtime.py::test_custom_plugin_with_write_keywords_blocked_even_if_read_only\ntests/test_governance_adversarial_runtime.py::test_runner_blocks_custom_plugin_in_read_only_before_handler\ntests/test_governance_adversarial_runtime.py::test_read_only_runner_blocks_registry_with_lint_errors\ntests/test_governance_adversarial_runtime.py::test_read_only_blocks_mutating_handler_despite_benign_metadata\ntests/test_governance_adversarial_runtime.py::test_tool_lint_errors_on_read_only_mutating_handler\ntests/test_governance_adversarial_runtime.py::test_read_only_runner_blocks_mutating_handler_before_execution\ntests/test_governance_adversarial_runtime.py::test_read_only_runner_allows_benign_read_only_plugin\ntests/test_governance_adversarial_runtime.py::test_read_only_runner_allows_benign_finalize\ntests/test_governance_fuzz.py::TestPlanBeforeWriteFuzz::test_workspace_write_mode_strict_default\ntests/test_governance_fuzz.py::TestPlanBeforeWriteFuzz::test_skip_plan_check_override\ntests/test_governance_fuzz.py::TestPlanBeforeWriteFuzz::test_read_only_mode_blocks_all_writes\ntests/test_governance_fuzz.py::TestPlanBeforeWriteFuzz::test_malformed_plan_contract_rejected\ntests/test_governance_fuzz.py::TestMemoryInvalidationFuzz::test_file_signature_change_invalidates_cards\ntests/test_governance_fuzz.py::TestMemoryInvalidationFuzz::test_auto_invalidation_disabled_when_config_disabled\ntests/test_governance_fuzz.py::TestMemoryInvalidationFuzz::test_path_filtering_in_auto_invalidation\ntests/test_governance_fuzz.py::TestApprovalQueueSecurity::test_approval_queue_initialization\ntests/test_governance_fuzz.py::TestApprovalQueueSecurity::test_request_generation\ntests/test_governance_fuzz.py::TestApprovalQueueSecurity::test_batch_creation\ntests/test_governance_fuzz.py::TestApprovalQueueSecurity::test_pending_requests_filter\ntests/test_governance_fuzz.py::TestGovernanceIntegration::test_plan_gate_blocks_without_skip_flag\ntests/test_governance_fuzz.py::TestGovernanceIntegration::test_memory_auto_invalidation_conservative_defaults\ntests/test_governance_hardening.py::SSHKeyRedactionTests::test_mixed_content_redaction\ntests/test_governance_hardening.py::SSHKeyRedactionTests::test_redacts_dsa_private_key\ntests/test_governance_hardening.py::SSHKeyRedactionTests::test_redacts_ec_private_key\ntests/test_governance_hardening.py::SSHKeyRedactionTests::test_redacts_openssh_private_key\ntests/test_governance_hardening.py::SSHKeyRedactionTests::test_redacts_rsa_private_key\ntests/test_governance_hardening.py::SSHKeyRedactionTests::test_ssh_redaction_disabled\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_allows_eval_literal\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_clean_read_only_handler_passes\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_eval\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_eval_dynamic\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_exec\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_exec_dynamic\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_os_remove\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_os_system\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_os_system_string\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_shutil_move\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_shutil_rmtree\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_subprocess_call\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_subprocess_popen\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_subprocess_run\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_detects_subprocess_string_command\ntests/test_governance_hardening.py::ExpandedASTFuzzTests::test_non_read_only_skips_check\ntests/test_governance_hardening.py::HMACApprovalQueueTests::test_default_hmac_secret_from_env\ntests/test_governance_hardening.py::HMACApprovalQueueTests::test_load_with_invalid_hmac_returns_empty\ntests/test_governance_hardening.py::HMACApprovalQueueTests::test_load_with_missing_hmac_returns_empty\ntests/test_governance_hardening.py::HMACApprovalQueueTests::test_load_with_valid_hmac\ntests/test_governance_hardening.py::HMACApprovalQueueTests::test_save_with_hmac_includes_signature\ntests/test_governance_hardening.py::HMACApprovalQueueTests::test_save_without_hmac_backward_compatible\ntests/test_governance_hardening.py::PermissionModeCollisionTests::test_hook_permission_mode_distinct_from_policy\ntests/test_governance_hardening.py::PermissionModeCollisionTests::test_hook_permission_mode_values\ntests/test_governance_hardening.py::PermissionModeCollisionTests::test_policy_permission_mode_values\ntests/test_governance_hardening.py::MultiSigPlaceholderTests::test_ssh_verification_dev_hash_rejected_by_default\ntests/test_governance_hardening.py::MultiSigPlaceholderTests::test_ssh_verification_dev_hash_when_allowed\ntests/test_governance_hardening.py::MultiSigPlaceholderTests::test_ssh_verification_implemented_flag\ntests/test_graphqlite_production.py::GraphQLitePersistentStoreTests::test_fetch_document_from_store\ntests/test_graphqlite_production.py::GraphQLitePersistentStoreTests::test_graph_retrieve_from_fake_store\ntests/test_graphqlite_production.py::GraphQLitePersistentStoreTests::test_migration_status_on_memory_store\ntests/test_graphqlite_production.py::GraphQLitePersistentStoreTests::test_persistent_store_skips_migrations_on_memory\ntests/test_graphqlite_production.py::GraphQLitePersistentStoreTests::test_sync_from_and_to_knowledge_graph\ntests/test_graphqlite_store.py::GraphQLiteStoreTests::test_graphqlite_fallback_to_dummy\ntests/test_graphqlite_store.py::GraphQLiteStoreTests::test_query_delegates_to_graphqlite\ntests/test_graphqlite_store.py::GraphQLiteStoreTests::test_real_graphqlite_runtime_smoke_or_reports_environment_issue\ntests/test_graphqlite_store.py::GraphQLiteStoreTests::test_sync_from_knowledge_graph_writes_documents_and_edges\ntests/test_hads_compliance.py::TestHADSCompliance::test_existing_usage_doc_is_now_hads\ntests/test_hads_compliance.py::TestHADSCompliance::test_sample_hads_document\ntests/test_heartbeat.py::HeartbeatTests::test_cli_agent_status_returns_heartbeat_liveness\ntests/test_heartbeat.py::HeartbeatTests::test_run_chat_agent_emits_heartbeat_when_configured\ntests/test_heartbeat.py::HeartbeatTests::test_run_store_heartbeat_for_run_reports_running_until_terminal\ntests/test_heartbeat.py::HeartbeatTests::test_thread_loop_emits_at_least_one_heartbeat\ntests/test_heartbeat.py::HeartbeatTests::test_tick_records_audit_event\ntests/test_hooks.py::TestHookRegistry::test_disabled_hooks_do_not_fire\ntests/test_hooks.py::TestHookRegistry::test_post_hook_receives_result\ntests/test_hooks.py::TestHookRegistry::test_pre_hook_can_veto\ntests/test_hooks.py::TestHookIntegration::test_hook_mutations_are_audited_when_context_is_bound\ntests/test_hooks.py::TestHookIntegration::test_hook_veto_is_audited_when_context_is_bound\ntests/test_hooks.py::TestHookIntegration::test_post_hook_mutates_result_returned_by_execute\ntests/test_hooks.py::TestHookIntegration::test_post_hook_receives_tool_result\ntests/test_hooks.py::TestHookIntegration::test_post_hook_returning_none_preserves_original_result\ntests/test_hooks.py::TestHookIntegration::test_pre_hook_mutates_arguments_passed_to_handler\ntests/test_hooks.py::TestHookIntegration::test_pre_hook_returning_none_preserves_original_args\ntests/test_hooks.py::TestHookIntegration::test_pre_hook_veto_blocks_tool_execution\ntests/test_hooks.py::TestBuiltInHooks::test_shell_command_hook_fails_on_bad_command\ntests/test_hooks.py::TestBuiltInHooks::test_shell_command_hook_runs_on_matching_tool\ntests/test_hooks.py::TestBuiltInHooks::test_shell_command_hook_skips_non_matching_tool\ntests/test_human_output.py::test_build_readiness_items_categorizes_git_permission_as_blocking\ntests/test_human_output.py::test_format_readiness_summary_includes_ready_and_next\ntests/test_human_output.py::test_format_setup_summary_lists_safe_command\ntests/test_human_output.py::test_format_ascii_table\ntests/test_intent.py::IntentTests::test_build_task_spec_includes_missing_fields\ntests/test_intent.py::IntentTests::test_clarify_task_accepts_concrete_task\ntests/test_intent.py::IntentTests::test_clarify_task_flags_vague_task\ntests/test_intent.py::IntentTests::test_cli_agent_run_clarify_stops_before_model_when_ambiguous\ntests/test_intent.py::IntentTests::test_cli_clarify_outputs_json\ntests/test_latency_tier.py::LatencyTierTests::test_all_five_tiers_in_enum\ntests/test_latency_tier.py::LatencyTierTests::test_fast_adapter_passes_generous_threshold\ntests/test_latency_tier.py::LatencyTierTests::test_latency_detail_includes_ms_unit\ntests/test_latency_tier.py::LatencyTierTests::test_latency_tier_skipped_when_not_configured\ntests/test_latency_tier.py::LatencyTierTests::test_p50_check_always_passed\ntests/test_latency_tier.py::LatencyTierTests::test_slow_adapter_fails_tight_threshold\ntests/test_llm.py::LLMAdapterTests::test_aigateway_uses_compat_base_url\ntests/test_llm.py::LLMAdapterTests::test_available_providers_include_requested_adapters\ntests/test_llm.py::LLMAdapterTests::test_claude_adapter_rejects_malformed_response\ntests/test_llm.py::LLMAdapterTests::test_claude_adapter_uses_messages_api_shape\ntests/test_llm.py::LLMAdapterTests::test_cli_lists_model_providers\ntests/test_llm.py::LLMAdapterTests::test_configuration_check_reports_missing_key\ntests/test_llm.py::LLMAdapterTests::test_gemini_adapter_rejects_malformed_response\ntests/test_llm.py::LLMAdapterTests::test_gemini_adapter_reports_safety_block\ntests/test_llm.py::LLMAdapterTests::test_gemini_adapter_sends_system_instruction\ntests/test_llm.py::LLMAdapterTests::test_gemini_adapter_uses_generate_content_shape\ntests/test_llm.py::LLMAdapterTests::test_gpt_adapter_forwards_response_format_when_provided\ntests/test_llm.py::LLMAdapterTests::test_gpt_adapter_uses_openai_chat_completions_shape\ntests/test_llm.py::LLMAdapterTests::test_ollama_is_openai_compatible_without_api_key\ntests/test_llm.py::LLMAdapterTests::test_openai_adapter_accepts_choice_text_fallback\ntests/test_llm.py::LLMAdapterTests::test_openai_adapter_accepts_message_content_parts_list\ntests/test_llm.py::LLMAdapterTests::test_openai_adapter_accepts_reasoning_content_fallback\ntests/test_llm.py::LLMAdapterTests::test_openai_adapter_accepts_text_content_part_type\ntests/test_llm.py::LLMAdapterTests::test_openai_adapter_fallbacks_when_response_format_not_supported\ntests/test_llm.py::LLMAdapterTests::test_openai_adapter_rejects_malformed_response\ntests/test_llm.py::LLMAdapterTests::test_openai_adapter_reports_provider_error_payload\ntests/test_llm.py::LLMAdapterTests::test_openai_streaming_reads_sse_lines_incrementally\ntests/test_llm.py::LLMAdapterTests::test_opencodezen_go_ignores_response_format\ntests/test_llm.py::LLMAdapterTests::test_opencodezen_go_is_openai_compatible_and_configurable\ntests/test_llm.py::LLMAdapterTests::test_opencodezen_go_model_env_override_uses_underscore_key\ntests/test_llm.py::LLMAdapterTests::test_opencodezen_ignores_response_format\ntests/test_llm.py::LLMAdapterTests::test_opencodezen_is_openai_compatible_and_uses_its_api\ntests/test_llm.py::LLMAdapterTests::test_openrouter_adapter_uses_openai_compatible_shape\ntests/test_llm.py::LLMAdapterTests::test_openrouter_with_referrer_header\ntests/test_llm.py::LLMAdapterTests::test_provider_extra_headers_supports_aig_auth\ntests/test_llm.py::LLMAdapterTests::test_unknown_provider_raises_configuration_error\ntests/test_llm.py::LLMAdapterTests::test_vllm_is_openai_compatible_without_api_key\ntests/test_llm.py::LLMAdapterTests::test_workers_ai_falls_back_to_aigateway_compat_base_url_when_workers_unset\ntests/test_llm.py::LLMAdapterTests::test_workers_ai_prefers_workers_base_url_when_both_workers_and_compat_set\ntests/test_llm.py::LLMAdapterTests::test_workers_ai_requires_account_id_or_base_url\ntests/test_llm.py::LLMAdapterTests::test_workers_ai_uses_cloudflare_account_id_when_base_url_unset\ntests/test_llm.py::LLMAdapterTests::test_workers_ai_uses_openai_compatible_shape\ntests/test_llm_conformance.py::LLMConformanceTests::test_cli_model_conformance_outputs_report\ntests/test_llm_conformance.py::LLMConformanceTests::test_run_model_conformance_fails_unexpected_content\ntests/test_llm_conformance.py::LLMConformanceTests::test_run_model_conformance_reports_pass_skip_and_fail\ntests/test_llm_internals.py::TestIterSseDataLines::test_yields_data_lines\ntests/test_llm_internals.py::TestIterSseDataLines::test_skips_non_data_lines\ntests/test_llm_internals.py::TestIterSseDataLines::test_done_with_data_prefix_terminates\ntests/test_llm_internals.py::TestIterSseDataLines::test_handles_str_input\ntests/test_llm_internals.py::TestIterSseDataLines::test_handles_data_with_colons\ntests/test_llm_internals.py::TestIterSseDataLines::test_no_data_lines_returns_nothing\ntests/test_llm_internals.py::TestConsumeSseJsonChunks::test_parses_json_chunks\ntests/test_llm_internals.py::TestConsumeSseJsonChunks::test_skips_malformed_json\ntests/test_llm_internals.py::TestConsumeSseJsonChunks::test_empty_input\ntests/test_llm_internals.py::TestConsumeSseJsonChunks::test_only_done_returns_nothing\ntests/test_llm_internals.py::TestExtractOpenaiToolCalls::test_extracts_single_tool_call\ntests/test_llm_internals.py::TestExtractOpenaiToolCalls::test_extracts_multiple_tool_calls\ntests/test_llm_internals.py::TestExtractOpenaiToolCalls::test_empty_when_no_choices\ntests/test_llm_internals.py::TestExtractOpenaiToolCalls::test_empty_when_no_tool_calls\ntests/test_llm_internals.py::TestExtractOpenaiToolCalls::test_invalid_json_arguments_uses_empty_dict\ntests/test_llm_internals.py::TestExtractClaudeToolCalls::test_extracts_tool_calls\ntests/test_llm_internals.py::TestExtractClaudeToolCalls::test_empty_when_no_tool_use\ntests/test_llm_internals.py::TestExtractClaudeToolCalls::test_empty_when_no_content\ntests/test_llm_internals.py::TestExtractGeminiToolCalls::test_extracts_function_calls\ntests/test_llm_internals.py::TestExtractGeminiToolCalls::test_empty_when_no_candidates\ntests/test_llm_internals.py::TestExtractGeminiToolCalls::test_empty_when_no_function_calls\ntests/test_llm_internals.py::TestNativeToolCallsToDecisionText::test_formats_single_call\ntests/test_llm_internals.py::TestNativeToolCallsToDecisionText::test_only_first_call_is_used\ntests/test_llm_internals.py::TestExtractGeminiSafety::test_returns_blocked_when_rating_has_blocked_true\ntests/test_llm_internals.py::TestExtractGeminiSafety::test_returns_blocked_without_category_when_no_blocked_flag\ntests/test_llm_internals.py::TestExtractGeminiSafety::test_returns_none_when_no_safety_block\ntests/test_llm_internals.py::TestExtractGeminiSafety::test_returns_none_when_no_candidates\ntests/test_llm_internals.py::TestExtractGeminiSafety::test_maps_known_categories\ntests/test_llm_internals.py::TestExtractGeminiSafety::test_returns_other_for_unknown_category\ntests/test_llm_internals.py::TestExtractGeminiStreamText::test_extracts_text_from_part\ntests/test_llm_internals.py::TestExtractGeminiStreamText::test_empty_when_no_candidates\ntests/test_llm_internals.py::TestExtractGeminiStreamText::test_empty_when_no_parts\ntests/test_llm_internals.py::TestExtractGeminiStreamText::test_concatenates_multiple_text_parts\ntests/test_llm_internals.py::TestProviderExtraHeaders::test_workers_ai_extra_headers\ntests/test_llm_internals.py::TestProviderExtraHeaders::test_unknown_provider_returns_empty\ntests/test_llm_internals.py::TestProviderExtraHeaders::test_no_env_var_returns_empty\ntests/test_llm_internals.py::TestProviderExtraHeaders::test_invalid_json_raises\ntests/test_llm_internals.py::TestEstimateCost::test_known_provider_returns_cost\ntests/test_llm_internals.py::TestEstimateCost::test_unknown_provider_uses_default_rate\ntests/test_llm_internals.py::TestEstimateCost::test_zero_tokens_costs_nothing\ntests/test_llm_internals.py::TestExtractOpenaiContentEdgeCases::test_top_level_output_text_requires_choices\ntests/test_llm_internals.py::TestExtractOpenaiContentEdgeCases::test_output_text_fallback_when_choices_have_no_text\ntests/test_llm_internals.py::TestExtractOpenaiContentEdgeCases::test_nested_result_fallback\ntests/test_llm_internals.py::TestExtractOpenaiContentEdgeCases::test_nested_result_content_fallback\ntests/test_llm_internals.py::TestBuildSslContextFromEnv::test_returns_none_without_env_vars\ntests/test_llm_internals.py::TestBuildSslContextFromEnv::test_ssl_cert_file_returns_context\ntests/test_llm_internals.py::TestBuildSslContextFromEnv::test_requests_ca_bundle_returns_context\ntests/test_llm_internals.py::TestBuildSslContextFromEnv::test_client_cert_without_ca_returns_context\ntests/test_llm_internals.py::TestBuildSslContextFromEnv::test_client_cert_and_key_returns_context\ntests/test_llm_internals.py::TestBuildSslContextFromEnv::test_requests_ca_bundle_preferred_over_ssl_cert_file\ntests/test_llm_internals.py::TestCallWithRetryEdgeCases::test_raises_on_non_transient_status\ntests/test_llm_internals.py::TestCallWithRetryEdgeCases::test_raises_on_network_error\ntests/test_llm_transport.py::LLMTransportTests::test_build_ssl_context_loads_ca_bundle_from_requests_env\ntests/test_llm_transport.py::LLMTransportTests::test_build_ssl_context_loads_client_cert_and_key\ntests/test_llm_transport.py::LLMTransportTests::test_build_ssl_context_returns_none_without_tls_env\ntests/test_llm_transport.py::LLMTransportTests::test_transport_post_json_passes_ssl_context_when_tls_env_set\ntests/test_lore_commit_formatter.py::TestLoreCommitFormatter::test_generate_lore_commit_message\ntests/test_low_coverage_modules.py::TestLLMRetryConfig::test_defaults\ntests/test_low_coverage_modules.py::TestLLMRetryConfig::test_delay_capped_at_max\ntests/test_low_coverage_modules.py::TestLLMRetryConfig::test_delay_increases_with_attempt\ntests/test_low_coverage_modules.py::TestCallWithRetry::test_raises_after_max_retries\ntests/test_low_coverage_modules.py::TestCallWithRetry::test_raises_on_non_transient_error\ntests/test_low_coverage_modules.py::TestCallWithRetry::test_retries_on_429\ntests/test_low_coverage_modules.py::TestCallWithRetry::test_retries_on_network_error\ntests/test_low_coverage_modules.py::TestCallWithRetry::test_retries_on_transient_error\ntests/test_low_coverage_modules.py::TestCallWithRetry::test_success_on_first_try\ntests/test_low_coverage_modules.py::TestExtractOpenAIContent::test_choice_not_dict\ntests/test_low_coverage_modules.py::TestExtractOpenAIContent::test_content_not_string\ntests/test_low_coverage_modules.py::TestExtractOpenAIContent::test_empty_choices\ntests/test_low_coverage_modules.py::TestExtractOpenAIContent::test_empty_content\ntests/test_low_coverage_modules.py::TestExtractOpenAIContent::test_message_not_dict\ntests/test_low_coverage_modules.py::TestExtractOpenAIContent::test_missing_choices\ntests/test_low_coverage_modules.py::TestExtractOpenAIContent::test_missing_content\ntests/test_low_coverage_modules.py::TestExtractOpenAIContent::test_missing_message\ntests/test_low_coverage_modules.py::TestExtractOpenAIContent::test_valid_response\ntests/test_low_coverage_modules.py::TestFirstChoiceDelta::test_choice_not_dict\ntests/test_low_coverage_modules.py::TestFirstChoiceDelta::test_default_empty_delta\ntests/test_low_coverage_modules.py::TestFirstChoiceDelta::test_delta_not_dict\ntests/test_low_coverage_modules.py::TestFirstChoiceDelta::test_empty_choices\ntests/test_low_coverage_modules.py::TestFirstChoiceDelta::test_missing_choices\ntests/test_low_coverage_modules.py::TestFirstChoiceDelta::test_valid_delta\ntests/test_low_coverage_modules.py::TestExtractClaudeContent::test_content_not_list\ntests/test_low_coverage_modules.py::TestExtractClaudeContent::test_missing_content_blocks\ntests/test_low_coverage_modules.py::TestExtractClaudeContent::test_multiple_text_blocks\ntests/test_low_coverage_modules.py::TestExtractClaudeContent::test_no_text_content\ntests/test_low_coverage_modules.py::TestExtractClaudeContent::test_valid_response\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_candidate_not_dict\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_content_not_dict\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_empty_candidates\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_missing_candidates\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_missing_content\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_missing_parts\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_multiple_parts\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_no_text\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_parts_not_list\ntests/test_low_coverage_modules.py::TestExtractGeminiContent::test_valid_response\ntests/test_low_coverage_modules.py::TestRaiseProviderError::test_dict_error\ntests/test_low_coverage_modules.py::TestRaiseProviderError::test_dict_error_fallback\ntests/test_low_coverage_modules.py::TestRaiseProviderError::test_dict_error_with_status\ntests/test_low_coverage_modules.py::TestRaiseProviderError::test_no_error\ntests/test_low_coverage_modules.py::TestRaiseProviderError::test_prompt_blocked\ntests/test_low_coverage_modules.py::TestRaiseProviderError::test_string_error\ntests/test_low_coverage_modules.py::TestTracingHTTPTransport::test_error_sets_error_status\ntests/test_low_coverage_modules.py::TestTracingHTTPTransport::test_success_creates_span\ntests/test_low_coverage_modules.py::TestChildProcessCodeModeBackend::test_execute_error\ntests/test_low_coverage_modules.py::TestChildProcessCodeModeBackend::test_execute_ignores_private_vars\ntests/test_low_coverage_modules.py::TestChildProcessCodeModeBackend::test_execute_rejects_non_serializable\ntests/test_low_coverage_modules.py::TestChildProcessCodeModeBackend::test_execute_simple_code\ntests/test_low_coverage_modules.py::TestChildProcessCodeModeBackend::test_execute_timeout\ntests/test_low_coverage_modules.py::TestChildProcessCodeModeBackend::test_execute_with_inputs\ntests/test_low_coverage_modules.py::TestApplyResourceLimits::test_no_resource_module\ntests/test_managed_runtime.py::ManagedRuntimeAdapterProtocolTests::test_fake_satisfies_protocol\ntests/test_managed_runtime.py::ManagedRuntimeAdapterProtocolTests::test_unhealthy_satisfies_protocol\ntests/test_managed_runtime.py::ManagedAgentRunnerTests::test_healthy_returns_false_for_unhealthy\ntests/test_managed_runtime.py::ManagedAgentRunnerTests::test_healthy_returns_true\ntests/test_managed_runtime.py::ManagedAgentRunnerTests::test_run_empty_context_defaults_to_dict\ntests/test_managed_runtime.py::ManagedAgentRunnerTests::test_run_passes_context\ntests/test_managed_runtime.py::ManagedAgentRunnerTests::test_run_returns_managed_run_result\ntests/test_managed_runtime.py::ManagedAgentRunnerTests::test_runtime_name_defaults_to_class_name\ntests/test_managed_runtime.py::RuntimeStubImportTests::test_anthropic_raises_import_error_without_sdk\ntests/test_managed_runtime.py::RuntimeStubImportTests::test_google_adk_raises_import_error_without_sdk\ntests/test_managed_runtime.py::RuntimeStubImportTests::test_openai_raises_import_error_without_sdk\ntests/test_managed_runtime.py::RuntimeStubImportTests::test_vertex_raises_import_error_without_sdk\ntests/test_managed_runtime.py::ManagedRuntimeHelperTests::test_adk_events_to_text_collects_final_response\ntests/test_managed_runtime.py::ManagedRuntimeHelperTests::test_format_vertex_output_nested_dict\ntests/test_managed_runtime.py::ManagedRuntimeHelperTests::test_managed_runtime_capabilities_report_optional_sdk_status\ntests/test_managed_runtime.py::ManagedRuntimeHelperTests::test_vertex_agent_resource_name_short_id\ntests/test_managed_runtime.py::ManagedRuntimeHelperTests::test_vertex_query_prefers_message_kwarg\ntests/test_managed_runtime.py::GoogleADKRuntimeTests::test_run_task_uses_runner\ntests/test_managed_runtime.py::VertexAgentRuntimeTests::test_run_task_fetches_engine_and_queries\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_completed_event_contains_output_length\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_exception_still_raised_when_logger_present\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_failed_event_contains_error\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_failed_event_emitted_on_exception\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_no_audit_without_logger\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_result_still_returned_when_logger_present\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_run_id_propagated_to_events\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_runtime_name_in_audit_events\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_started_and_completed_events_emitted\ntests/test_managed_runtime_audit.py::ManagedAgentRunnerAuditTests::test_started_event_contains_task\ntests/test_managed_runtime_audit.py::ManagedRuntimeToolContextTests::test_context_merged_correctly\ntests/test_managed_runtime_audit.py::ManagedRuntimeToolContextTests::test_empty_context_passed_as_dict\ntests/test_managed_runtime_audit.py::ManagedRuntimeToolContextTests::test_tools_forwarded_in_context\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_auth_token_accepts_correct_bearer\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_auth_token_blocks_unauthenticated_request\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_auth_token_rejects_wrong_bearer\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_batch_returns_array_of_responses\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_batch_skips_non_dict_items\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_delete_nonexistent_session_returns_404\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_delete_removes_session\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_empty_batch_returns_202\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_get_returns_sse_keepalive_for_valid_session\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_get_without_session_returns_400\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_initialize_returns_session_id_and_protocol_info\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_initialize_without_id_returns_400\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_invalid_json_body_returns_400\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_non_numeric_content_length_returns_400\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_notification_returns_202_with_empty_body\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_origin_in_allowlist_passes\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_origin_not_in_allowlist_returns_403\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_oversized_json_body_returns_413_without_reading_body\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_request_with_unknown_session_returns_400\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_scalar_json_payload_returns_400\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_subsequent_request_without_session_returns_400\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_tools_call_executes_workspace_tool\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_tools_list_with_valid_session\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_unknown_method_returns_jsonrpc_error_inside_200\ntests/test_mcp_http.py::MCPHTTPTransportTests::test_unknown_path_returns_404\ntests/test_mcp_http.py::MCPHTTPOAuthIntegrationTests::test_authorization_code_flow\ntests/test_mcp_http.py::MCPHTTPOAuthIntegrationTests::test_invalid_token_rejected\ntests/test_mcp_http.py::MCPHTTPOAuthIntegrationTests::test_oauth_metadata_endpoint\ntests/test_mcp_http.py::MCPHTTPOAuthIntegrationTests::test_oauth_resource_server_uses_authorization_server_key_ring\ntests/test_mcp_http.py::MCPHTTPOAuthIntegrationTests::test_token_endpoint_bad_code\ntests/test_mcp_http.py::MCPHTTPOAuthIntegrationTests::test_unauthorized_without_token_when_oauth_enabled\ntests/test_mcp_server.py::MCPServerTests::test_initialize_returns_protocol_and_capabilities\ntests/test_mcp_server.py::MCPServerTests::test_serve_mcp_stdio_round_trip\ntests/test_mcp_server.py::MCPServerTests::test_tools_call_executes_read_file\ntests/test_mcp_server.py::MCPServerTests::test_tools_call_returns_is_error_for_validation_failure\ntests/test_mcp_server.py::MCPServerTests::test_tools_list_returns_workspace_tools\ntests/test_mcp_server.py::MCPServerTests::test_unknown_method_returns_method_not_found\ntests/test_memory.py::MemoryCatalogTests::test_cli_memory_commands\ntests/test_memory.py::MemoryCatalogTests::test_memory_catalog_add_list_search_show\ntests/test_memory.py::MemoryCatalogTests::test_memory_catalog_skips_malformed_entries\ntests/test_memory_failure.py::TestFailureCard::test_create_failure_card\ntests/test_memory_failure.py::TestFailureCard::test_serialization\ntests/test_memory_failure.py::TestFailureCardStorage::test_append_and_list\ntests/test_memory_failure.py::TestFailureCardStorage::test_append_multiple\ntests/test_memory_failure.py::TestFailureCardStorage::test_clear_all\ntests/test_memory_failure.py::TestFailureCardStorage::test_clear_by_id\ntests/test_memory_failure.py::TestFailureCardStorage::test_get_by_id\ntests/test_memory_failure.py::TestFailureCardStorage::test_missing_file\ntests/test_memory_failure.py::TestFailureCardStorage::test_corrupted_file\ntests/test_memory_failure.py::TestFailureCardMatching::test_match_by_file_path\ntests/test_memory_failure.py::TestFailureCardMatching::test_match_by_error_type\ntests/test_memory_failure.py::TestFailureCardMatching::test_match_by_keywords\ntests/test_memory_failure.py::TestFailureCardMatching::test_no_match\ntests/test_memory_failure.py::TestFailureCardMatching::test_result_limit\ntests/test_memory_failure.py::TestFailureCardMatching::test_sorting_by_timestamp\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_catalog_add_with_branch\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_catalog_delete_by_branch\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_catalog_delete_by_run_id\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_catalog_delete_nonexistent_branch\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_catalog_quarantine_by_branch\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_catalog_quarantine_preserves_provenance\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_catalog_readonly_prevents_delete\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_catalog_readonly_prevents_quarantine\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_entry_from_payload_invalid_branch\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_entry_from_payload_with_branch\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_entry_from_payload_without_branch\ntests/test_memory_isolation.py::MemoryIsolationTests::test_memory_entry_with_branch_and_run_id\ntests/test_memory_pinned.py::TestPinnedFile::test_create_pinned_file\ntests/test_memory_pinned.py::TestPinnedFile::test_update_last_modified\ntests/test_memory_pinned.py::TestPinnedFile::test_serialization\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_add_file\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_add_nonexistent_file\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_add_duplicate_file\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_remove_file\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_remove_non_pinned_file\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_list_all\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_clear_all\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_update_last_modified\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_is_pinned\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_missing_file\ntests/test_memory_pinned.py::TestPinnedFileStorage::test_corrupted_file\ntests/test_memory_pinned.py::TestFileWatcher::test_file_watcher_initialization\ntests/test_memory_pinned.py::TestFileWatcher::test_file_watcher_start_stop\ntests/test_memory_pinned.py::TestFileWatcher::test_update_watched_files\ntests/test_model_routing.py::ModelRoutingTests::test_analyze_complexity_high\ntests/test_model_routing.py::ModelRoutingTests::test_analyze_complexity_low\ntests/test_model_routing.py::ModelRoutingTests::test_analyze_complexity_medium\ntests/test_model_routing.py::ModelRoutingTests::test_classify_task_uses_deterministic_categories\ntests/test_model_routing.py::ModelRoutingTests::test_cli_model_route_outputs_json\ntests/test_model_routing.py::ModelRoutingTests::test_estimate_tokens\ntests/test_model_routing.py::ModelRoutingTests::test_route_model_chooses_provider_specific_model\ntests/test_model_routing.py::ModelRoutingTests::test_route_model_includes_complexity\ntests/test_model_routing.py::ModelRoutingTests::test_route_model_respects_explicit_model_override\ntests/test_model_routing.py::ModelRoutingTests::test_route_model_uses_complexity_based_routing\ntests/test_notify_slack_discord.py::TestSlackDiscordNotifications::test_all_notification_targets_fire\ntests/test_notify_slack_discord.py::TestSlackDiscordNotifications::test_discord_webhook_sends_embed_payload\ntests/test_notify_slack_discord.py::TestSlackDiscordNotifications::test_slack_webhook_sends_formatted_payload\ntests/test_oauth21.py::JWTTests::test_create_and_verify_roundtrip\ntests/test_oauth21.py::JWTTests::test_decode_jwt_unsafe\ntests/test_oauth21.py::JWTTests::test_verify_allow_expired\ntests/test_oauth21.py::JWTTests::test_verify_aud_mismatch\ntests/test_oauth21.py::JWTTests::test_verify_expired_token\ntests/test_oauth21.py::JWTTests::test_verify_invalid_format\ntests/test_oauth21.py::JWTTests::test_verify_iss_mismatch\ntests/test_oauth21.py::JWTTests::test_verify_wrong_key_fails\ntests/test_oauth21.py::PKCETests::test_s256_challenge_matches\ntests/test_oauth21.py::PKCETests::test_verifier_challenge_roundtrip\ntests/test_oauth21.py::PKCETests::test_verifier_custom_length\ntests/test_oauth21.py::PKCETests::test_verifier_default_length\ntests/test_oauth21.py::PKCETests::test_verifier_rejects_invalid_length\ntests/test_oauth21.py::JWKThumbprintTests::test_oct_key_thumbprint\ntests/test_oauth21.py::JWKThumbprintTests::test_thumbprint_deterministic\ntests/test_oauth21.py::JWKThumbprintTests::test_thumbprint_ignores_extra_fields\ntests/test_oauth21.py::AuthorizationServerTests::test_authorize_wrong_challenge_method\ntests/test_oauth21.py::AuthorizationServerTests::test_authorize_wrong_redirect_uri\ntests/test_oauth21.py::AuthorizationServerTests::test_create_authorization_code\ntests/test_oauth21.py::AuthorizationServerTests::test_dpop_nonce_invalid\ntests/test_oauth21.py::AuthorizationServerTests::test_dpop_nonce_management\ntests/test_oauth21.py::AuthorizationServerTests::test_exchange_code_bad_verifier\ntests/test_oauth21.py::AuthorizationServerTests::test_exchange_code_success_bearer\ntests/test_oauth21.py::AuthorizationServerTests::test_exchange_code_twice_fails\ntests/test_oauth21.py::AuthorizationServerTests::test_exchange_code_wrong_client_secret\ntests/test_oauth21.py::AuthorizationServerTests::test_get_unknown_client\ntests/test_oauth21.py::AuthorizationServerTests::test_introspect_invalid_token\ntests/test_oauth21.py::AuthorizationServerTests::test_metadata\ntests/test_oauth21.py::AuthorizationServerTests::test_no_state_in_authorization\ntests/test_oauth21.py::AuthorizationServerTests::test_refresh_disabled_when_ttl_zero\ntests/test_oauth21.py::AuthorizationServerTests::test_refresh_token_reuse_revokes_family\ntests/test_oauth21.py::AuthorizationServerTests::test_refresh_token_rotation\ntests/test_oauth21.py::AuthorizationServerTests::test_register_client\ntests/test_oauth21.py::AuthorizationServerTests::test_register_duplicate_fails\ntests/test_oauth21.py::ResourceServerTests::test_validate_bad_token\ntests/test_oauth21.py::ResourceServerTests::test_validate_bearer_token\ntests/test_oauth21.py::ResourceServerTests::test_validate_missing_auth_header\ntests/test_oauth21.py::ResourceServerTests::test_validate_token_with_wrong_signing_key\ntests/test_oauth21.py::ResourceServerTests::test_validate_unsupported_scheme\ntests/test_oauth21.py::DPoPIntegrationTests::test_dpop_bad_signature_rejected\ntests/test_oauth21.py::DPoPIntegrationTests::test_dpop_bound_token_flow\ntests/test_oauth21_multikey.py::OAuth21MultiKeyResourceServerTests::test_resource_server_rejects_token_signed_with_unknown_key\ntests/test_oauth21_multikey.py::OAuth21MultiKeyResourceServerTests::test_resource_server_rejects_token_with_kid_pointing_to_wrong_key\ntests/test_oauth21_multikey.py::OAuth21MultiKeyResourceServerTests::test_resource_server_verifies_tokens_for_all_keys_in_ring\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreImportGuardTests::test_conn_factory_bypasses_import_check\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreImportGuardTests::test_raises_import_error_without_psycopg2\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreClientTests::test_client_secret_not_stored_in_plaintext\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreClientTests::test_get_missing_client_returns_none\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreClientTests::test_register_and_get_client\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreClientTests::test_validate_client_secret_correct\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreClientTests::test_validate_client_secret_unknown_client\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreClientTests::test_validate_client_secret_wrong\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreCodeTests::test_consume_is_one_time\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreCodeTests::test_consume_missing_code_returns_none\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreCodeTests::test_prune_removes_expired_codes\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreCodeTests::test_save_and_consume_code\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreNonceTests::test_consume_nonce_is_one_time\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreNonceTests::test_delete_nonce\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreNonceTests::test_get_missing_nonce_returns_none\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreNonceTests::test_save_and_get_nonce\ntests/test_oauth21_pg_store.py::PostgreSQLOAuthStoreNonceTests::test_save_nonce_idempotent\ntests/test_oauth21_redis_store.py::RedisOAuthStoreImportGuardTests::test_client_injection_bypasses_import_check\ntests/test_oauth21_redis_store.py::RedisOAuthStoreImportGuardTests::test_raises_import_error_without_redis\ntests/test_oauth21_redis_store.py::RedisOAuthStoreClientTests::test_get_missing_client_returns_none\ntests/test_oauth21_redis_store.py::RedisOAuthStoreClientTests::test_register_and_get_client\ntests/test_oauth21_redis_store.py::RedisOAuthStoreClientTests::test_register_client_overwrites_existing\ntests/test_oauth21_redis_store.py::RedisOAuthStoreClientTests::test_secret_stored_as_hex_not_plaintext\ntests/test_oauth21_redis_store.py::RedisOAuthStoreClientTests::test_validate_client_secret_correct\ntests/test_oauth21_redis_store.py::RedisOAuthStoreClientTests::test_validate_client_secret_unknown_client\ntests/test_oauth21_redis_store.py::RedisOAuthStoreClientTests::test_validate_client_secret_wrong\ntests/test_oauth21_redis_store.py::RedisOAuthStoreCodeTests::test_consume_is_one_time\ntests/test_oauth21_redis_store.py::RedisOAuthStoreCodeTests::test_consume_missing_code_returns_none\ntests/test_oauth21_redis_store.py::RedisOAuthStoreCodeTests::test_prune_is_noop\ntests/test_oauth21_redis_store.py::RedisOAuthStoreCodeTests::test_save_and_consume_code\ntests/test_oauth21_redis_store.py::RedisOAuthStoreCodeTests::test_save_code_nx_does_not_overwrite\ntests/test_oauth21_redis_store.py::RedisOAuthStoreNonceTests::test_consume_nonce_is_one_time\ntests/test_oauth21_redis_store.py::RedisOAuthStoreNonceTests::test_delete_nonce\ntests/test_oauth21_redis_store.py::RedisOAuthStoreNonceTests::test_get_missing_nonce_returns_none\ntests/test_oauth21_redis_store.py::RedisOAuthStoreNonceTests::test_key_prefix_applied\ntests/test_oauth21_redis_store.py::RedisOAuthStoreNonceTests::test_save_and_get_nonce\ntests/test_oauth21_redis_store.py::RedisOAuthStoreNonceTests::test_save_nonce_nx_preserves_original\ntests/test_oauth21_redis_store.py::RedisOAuthStoreProtocolTests::test_implements_oauth_store_protocol\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_authorization_code_is_consumed_once\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_authorization_flow_persists_across_server_instances\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_authorization_server_consumes_dpop_nonce_once\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_client_secret_is_hashed_at_rest\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_hashed_client_secret_rejects_wrong_secret\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_invalid_json_in_redirect_uris_raises_error\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_invalid_uri_format_raises_error\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_non_list_redirect_uris_raises_error\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_nonce_consume_is_one_time\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_nonce_persists_and_prunes\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_prune_removes_expired_codes\ntests/test_oauth21_sqlite_store.py::SQLiteOAuthStoreTests::test_refresh_token_rotation_persists_across_instances\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_active_kid_always_valid\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_no_window_zero_never_enforces_expiry\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_non_active_kid_rejected_outside_window\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_non_active_kid_valid_within_window\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_non_active_kid_without_deprecated_at_always_valid\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_rotate_changes_active_kid\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_rotate_is_immutable_original_unchanged\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_rotate_marks_old_kid_deprecated_at\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_rotate_preserves_all_keys\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_rotate_preserves_rotation_window\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_rotate_unknown_kid_raises\ntests/test_oauth_rotation.py::OAuthKeyRingRotationTests::test_unknown_kid_falls_back_to_active\ntests/test_oauth_rotation.py::OAuthKeyRingCLIRotationWindowTests::test_rotation_window_accepted_on_serve\ntests/test_oauth_rotation.py::OAuthKeyRingCLIRotationWindowTests::test_rotation_window_zero_is_default\ntests/test_openapi.py::GenerateOpenAPISchemaTests::test_basic_structure\ntests/test_openapi.py::GenerateOpenAPISchemaTests::test_custom_title_and_version\ntests/test_openapi.py::GenerateOpenAPISchemaTests::test_mcp_annotations_embedded_on_destructive\ntests/test_openapi.py::GenerateOpenAPISchemaTests::test_multiple_tools_produce_multiple_paths\ntests/test_openapi.py::GenerateOpenAPISchemaTests::test_no_server_when_url_omitted\ntests/test_openapi.py::GenerateOpenAPISchemaTests::test_read_only_tool_has_no_destructive_annotation\ntests/test_openapi.py::GenerateOpenAPISchemaTests::test_responses_include_400_and_403\ntests/test_openapi.py::GenerateOpenAPISchemaTests::test_server_url_embedded\ntests/test_openapi.py::GenerateOpenAPISchemaTests::test_tool_becomes_post_path\ntests/test_openapi.py::WorkspaceOpenAPICLITests::test_workspace_openapi_custom_title_and_version\ntests/test_openapi.py::WorkspaceOpenAPICLITests::test_workspace_openapi_outputs_valid_schema\ntests/test_ownership.py::test_workspace_lock_serialization\ntests/test_ownership.py::test_registry_acquire_lock\ntests/test_ownership.py::test_registry_release_lock\ntests/test_ownership.py::test_registry_zombie_cleanup\ntests/test_ownership.py::test_registry_concurrent_lock\ntests/test_ownership.py::test_registry_multiple_workspaces\ntests/test_ownership.py::test_registry_file_lock_protection\ntests/test_p0_harness.py::P0HarnessTests::test_approved_destructive_tool_can_run\ntests/test_p0_harness.py::P0HarnessTests::test_cost_budget_blocks_final_after_decision_cost_update\ntests/test_p0_harness.py::P0HarnessTests::test_cost_budget_blocks_tool_after_decision_cost_update\ntests/test_p0_harness.py::P0HarnessTests::test_denied_hitl_approval_fails_without_tool_execution\ntests/test_p0_harness.py::P0HarnessTests::test_destructive_tool_can_be_approved_by_hitl_handler\ntests/test_p0_harness.py::P0HarnessTests::test_destructive_tool_requires_exact_call_approval\ntests/test_p0_harness.py::P0HarnessTests::test_initial_observations_count_against_tool_call_budget\ntests/test_p0_harness.py::P0HarnessTests::test_initial_observations_replayed_into_context\ntests/test_p0_harness.py::P0HarnessTests::test_iteration_budget_stops_non_terminating_agent\ntests/test_p0_harness.py::P0HarnessTests::test_runner_executes_registered_tool_and_audits_result\ntests/test_p0_harness.py::P0HarnessTests::test_schema_rejects_unexpected_arguments\ntests/test_p1_primitives.py::P1PrimitiveTests::test_agentic_retrieve_routes_and_fuses_results\ntests/test_p1_primitives.py::P1PrimitiveTests::test_context_compactor_pins_memory_keys\ntests/test_p1_primitives.py::P1PrimitiveTests::test_offline_eval_reports_pass_rate\ntests/test_p1_primitives.py::P1PrimitiveTests::test_skill_review_and_aibom\ntests/test_p1_primitives.py::P1PrimitiveTests::test_trace_recorder_receives_audit_events\ntests/test_p2_primitives.py::P2PrimitiveTests::test_code_mode_accepts_backend_interface\ntests/test_p2_primitives.py::P2PrimitiveTests::test_code_mode_blocks_imports_and_unknown_calls\ntests/test_p2_primitives.py::P2PrimitiveTests::test_code_mode_executes_safe_subset\ntests/test_p2_primitives.py::P2PrimitiveTests::test_code_mode_rejects_non_plain_inputs_and_outputs\ntests/test_p2_primitives.py::P2PrimitiveTests::test_code_mode_times_out_in_sandbox\ntests/test_p2_primitives.py::P2PrimitiveTests::test_container_code_mode_backend_builds_isolated_command\ntests/test_p2_primitives.py::P2PrimitiveTests::test_container_code_mode_backend_can_require_image_digest\ntests/test_p2_primitives.py::P2PrimitiveTests::test_container_code_mode_backend_can_restrict_allowed_images\ntests/test_p2_primitives.py::P2PrimitiveTests::test_container_code_mode_backend_enforces_streaming_output_limit\ntests/test_p2_primitives.py::P2PrimitiveTests::test_container_code_mode_backend_rejects_empty_image\ntests/test_p2_primitives.py::P2PrimitiveTests::test_graph_rag_traverses_relations_to_documents\ntests/test_p2_primitives.py::P2PrimitiveTests::test_managed_agent_readiness_flags_missing_hitl_for_destructive_tool\ntests/test_p2_primitives.py::P2PrimitiveTests::test_provider_portability_reports_missing_capabilities\ntests/test_p2_primitives.py::P2PrimitiveTests::test_stateless_mcp_request_executes_via_registry\ntests/test_phase4_agent_factory.py::TestAgentFactory::test_factory_initialization\ntests/test_phase4_agent_factory.py::TestAgentFactory::test_generate_agent_template\ntests/test_phase4_agent_factory.py::TestAgentFactory::test_generate_agent_registers_in_registry\ntests/test_phase4_agent_factory.py::TestAgentFactory::test_hot_reload_agent\ntests/test_phase4_agent_factory.py::TestAgentFactory::test_hot_reload_nonexistent_agent\ntests/test_phase4_agent_factory.py::TestAgentFactory::test_list_dynamic_agents\ntests/test_phase4_agent_factory.py::TestAgentFactory::test_agent_specification_with_personality\ntests/test_phase4_coordinator.py::TestTaskCoordinator::test_coordinator_initialization\ntests/test_phase4_coordinator.py::TestTaskCoordinator::test_classify_task_heuristic\ntests/test_phase4_coordinator.py::TestTaskCoordinator::test_classify_task_multi_step_detection\ntests/test_phase4_coordinator.py::TestTaskCoordinator::test_generate_single_step_workflow\ntests/test_phase4_coordinator.py::TestTaskCoordinator::test_generate_multi_step_workflow_heuristic\ntests/test_phase4_coordinator.py::TestTaskCoordinator::test_route_task_integration\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_manager_initialization\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_default_tool_classifications\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_register_custom_tool_permission\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_grant_agent_tool_access_safe_only\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_grant_agent_tool_access_with_destructive\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_check_tool_access_allowed\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_check_tool_access_not_whitelisted\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_check_tool_access_requires_approval\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_apply_safe_defaults\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_request_tool_approval_without_callback\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_request_tool_approval_with_callback\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_revoke_agent_tool_access\ntests/test_phase4_tool_permissions.py::TestToolPermissionManager::test_approval_is_per_agent_not_global\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_engine_initialization\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_execute_single_step_workflow\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_execute_multi_step_workflow\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_execute_workflow_with_missing_agent\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_enter_polish_mode\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_polish_agent_prompt\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_polish_nonexistent_agent\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_resume_workflow\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_get_workflow_summary\ntests/test_phase4_workflow_engine.py::TestWorkflowEngine::test_cancel_workflow\ntests/test_phase5_agent_factory.py::TestAgentFactoryEvolution::test_evolve_agent_prompt_heuristic\ntests/test_phase5_agent_factory.py::TestAgentFactoryEvolution::test_evolve_nonexistent_agent\ntests/test_phase5_agent_factory.py::TestAgentFactoryEvolution::test_evolution_preserves_tools\ntests/test_phase5_context_bus.py::TestContextBus::test_context_bus_initialization\ntests/test_phase5_context_bus.py::TestContextBus::test_publish_delta\ntests/test_phase5_context_bus.py::TestContextBus::test_subscribe_deltas\ntests/test_phase5_context_bus.py::TestContextBus::test_subscribe_deltas_filtered_by_agent\ntests/test_phase5_context_bus.py::TestContextBus::test_subscribe_deltas_filtered_by_type\ntests/test_phase5_context_bus.py::TestContextBus::test_clear_deltas\ntests/test_phase5_context_bus.py::TestContextBus::test_cleanup_old_deltas_scoped_to_workflow\ntests/test_phase5_context_bus.py::TestContextBus::test_parallel_publish_from_threads\ntests/test_phase5_context_bus.py::TestContextBus::test_delta_card_metadata\ntests/test_phase5_context_bus.py::TestArchiveToRag::test_archive_to_rag_basic\ntests/test_phase5_context_bus.py::TestArchiveToRag::test_archive_to_rag_with_concurrent_publish\ntests/test_phase5_context_bus.py::TestArchiveToRag::test_archive_to_rag_rag_store_failure\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_server_initialization\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_approval_request_record_creation\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_request_approval_creates_record\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_concurrent_approve_is_idempotent\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_approve_request\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_reject_request\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_get_pending_requests\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_get_request_status_nonexistent\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_approve_nonexistent_request\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_reject_nonexistent_request\ntests/test_phase5_jit_approval_server.py::TestJITApprovalServer::test_cleanup_old_requests\ntests/test_phase5_workflow_engine.py::TestWorkflowEngineSelfHealing::test_self_healing_enabled\ntests/test_phase5_workflow_engine.py::TestWorkflowEngineSelfHealing::test_self_healing_disabled\ntests/test_phase5_workflow_engine.py::TestWorkflowEngineSelfHealing::test_max_self_healing_attempts_configurable\ntests/test_phase5_workflow_engine.py::TestWorkflowEngineSelfHealing::test_validation_result_passed\ntests/test_phase5_workflow_engine.py::TestWorkflowEngineSelfHealing::test_validation_result_failed\ntests/test_phase5_workflow_engine.py::TestWorkflowEngineSelfHealing::test_step_execution_validation_fields\ntests/test_phase5_workflow_engine.py::TestWorkflowEngineSelfHealing::test_self_correction_prompt_generation\ntests/test_phase6_control_plane.py::test_format_sse_event\ntests/test_phase6_control_plane.py::test_control_plane_serve_blocking_binds_port\ntests/test_phase6_control_plane.py::test_control_plane_serves_dashboard_and_sse\ntests/test_phase6_control_plane.py::test_jit_approve_invalid_json_returns_400\ntests/test_phase6_control_plane.py::test_jit_approve_with_approval_callback_grants_tool_access\ntests/test_phase6_docker.py::test_preflight_failure_falls_back_and_emits_audit\ntests/test_phase6_docker.py::test_resource_violation_aborts_container\ntests/test_phase6_docker.py::test_poll_resource_limits_aborts_on_violation\ntests/test_phase6_jit_server.py::test_jit_wait_times_out_with_short_deadline\ntests/test_phase6_jit_server.py::test_send_sse_event_format\ntests/test_phase6_remaining_features.py::test_parse_vote_import_payload_accepts_wrapper\ntests/test_phase6_remaining_features.py::test_consensus_wait_and_votes_import\ntests/test_phase6_remaining_features.py::test_control_plane_bridge_publishes_workflow\ntests/test_phase6_remaining_features.py::test_comparator_selects_successful_subagent\ntests/test_phase6_remaining_features.py::test_swarm_publishes_to_control_plane\ntests/test_phase6_remaining_features.py::test_wasm_invoke_contract_and_manifest\ntests/test_phase6_skill_writer.py::test_skill_writer_blocks_unsafe_tool_patterns\ntests/test_phase6_skill_writer.py::test_skill_writer_publishes_and_loads_safe_skill\ntests/test_phase6_swarm_score.py::test_success_zero_forces_score_zero\ntests/test_phase6_swarm_score.py::test_score_decreases_with_higher_tokens\ntests/test_phase6_swarm_score.py::test_rank_prompt_tournament_selects_successful_branch\ntests/test_phase6_swarm_score.py::test_save_prompt_to_gene_pool\ntests/test_phase6_swarm_score.py::test_invalid_metrics_raise\ntests/test_plan_contract.py::test_load_plan_contract_requires_plans_dir\ntests/test_plan_contract.py::test_load_plan_contract_allows_external_with_flag\ntests/test_plan_contract.py::test_load_plan_contract_accepts_plans_dir_artifact\ntests/test_policy.py::PermissionModeTests::test_all_modes_are_accessible\ntests/test_policy.py::ParsePermissionModeTests::test_parses_valid_modes\ntests/test_policy.py::ParsePermissionModeTests::test_raises_on_unknown_mode\ntests/test_policy.py::ApprovalPolicyTests::test_allow_mode_passes_destructive\ntests/test_policy.py::ApprovalPolicyTests::test_danger_full_access_mode_passes_destructive\ntests/test_policy.py::ApprovalPolicyTests::test_hmac_sha256_fingerprint_matching\ntests/test_policy.py::ApprovalPolicyTests::test_non_destructive_tool_always_allowed\ntests/test_policy.py::ApprovalPolicyTests::test_policy_is_frozen\ntests/test_policy.py::ApprovalPolicyTests::test_prompt_mode_preapproved_call_id_with_store\ntests/test_policy.py::ApprovalPolicyTests::test_prompt_mode_with_allow_all_destructive_passes\ntests/test_policy.py::ApprovalPolicyTests::test_prompt_mode_without_approval_blocks\ntests/test_policy.py::ApprovalPolicyTests::test_read_only_blocks_destructive\ntests/test_policy.py::ApprovalPolicyTests::test_resume_deduplication\ntests/test_policy.py::ApprovalPolicyTests::test_scoped_approval_blocks_same_call_id_different_tool\ntests/test_policy.py::ApprovalPolicyTests::test_scoped_approval_blocks_sensitive_command_mismatch\ntests/test_policy.py::ApprovalPolicyTests::test_scoped_approval_blocks_sensitive_content_mismatch\ntests/test_policy.py::ApprovalPolicyTests::test_scoped_approval_blocks_sensitive_patch_mismatch\ntests/test_policy.py::ApprovalPolicyTests::test_workspace_write_allows_file_write_tools\ntests/test_policy.py::ApprovalPolicyTests::test_workspace_write_blocks_shell_destructive\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_approvals_json_written_with_0600\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_check_security_health_detects_wrong_approvals_mode\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_check_security_health_detects_wrong_approvals_ownership\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_check_security_health_detects_wrong_dir_mode\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_check_security_health_detects_wrong_dir_ownership\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_check_security_health_detects_wrong_secret_mode\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_check_security_health_detects_wrong_secret_ownership\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_check_security_health_fresh_workspace_is_ok\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_check_security_health_result_structure\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_secret_raises_ioerror_on_corrupt_content\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_secret_raises_ioerror_on_non_hex_content\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_secret_written_with_0600\ntests/test_policy.py::TrustBoundaryPermissionsTests::test_teaagent_dir_created_with_0700\ntests/test_policy.py::TrustBoundaryRegressionTests::test_bad_key_type_detected_by_health_check\ntests/test_policy.py::TrustBoundaryRegressionTests::test_corrupt_json_detected_by_health_check\ntests/test_policy.py::TrustBoundaryRegressionTests::test_fix_permissions_repairs_dir_mode\ntests/test_policy.py::TrustBoundaryRegressionTests::test_fresh_v2_approval_not_flagged_as_orphan\ntests/test_policy.py::TrustBoundaryRegressionTests::test_mutating_store_fails_closed_on_corrupt_json\ntests/test_policy.py::TrustBoundaryRegressionTests::test_repair_store_noops_on_healthy_store\ntests/test_policy.py::TrustBoundaryRegressionTests::test_repair_store_operator_reset_is_audited_separately\ntests/test_policy.py::TrustBoundaryRegressionTests::test_repair_store_rebuilds_corrupt_store_with_backup\ntests/test_policy.py::TrustBoundaryRegressionTests::test_repair_store_same_second_creates_distinct_backups\ntests/test_policy.py::TrustBoundaryRegressionTests::test_rotated_secret_flags_old_v2_approval_as_orphan\ntests/test_policy.py::TrustBoundaryRegressionTests::test_v2_approval_without_key_id_not_flagged\ntests/test_policy.py::TrustBoundaryRegressionTests::test_valid_approvals_json_passes_content_check\ntests/test_policy.py::TrustBoundaryRegressionTests::test_wrong_top_level_type_detected_by_health_check\ntests/test_policy.py::MultiSigQuorumTests::test_approval_request_hash_generation\ntests/test_policy.py::MultiSigQuorumTests::test_high_risk_detection_custom_patterns\ntests/test_policy.py::MultiSigQuorumTests::test_high_risk_detection_default_patterns\ntests/test_policy.py::MultiSigQuorumTests::test_multi_sig_config_custom\ntests/test_policy.py::MultiSigQuorumTests::test_multi_sig_config_defaults\ntests/test_policy.py::MultiSigQuorumTests::test_multi_sig_config_from_workspace_json\ntests/test_policy.py::MultiSigQuorumTests::test_multi_sig_quorum_stub_returns_false\ntests/test_policy.py::MultiSigQuorumTests::test_multi_sig_quorum_without_agent_id\ntests/test_policy.py::MultiSigQuorumTests::test_policy_with_multi_sig_disabled\ntests/test_policy_jit.py::JITApprovalStateTests::test_approve_once\ntests/test_policy_jit.py::JITApprovalStateTests::test_approve_session\ntests/test_policy_jit.py::JITApprovalStateTests::test_multiple_approvals\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_disabled_skips_prompt\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_prompt_deny_choice\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_prompt_explain_choice\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_prompt_interrupted\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_prompt_invalid_then_valid\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_prompt_once_choice\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_prompt_session_choice\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_state_allows_once_approved_call\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_state_allows_session_approved_tool\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_state_without_jit_state_raises_error\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_jit_state_without_tty_raises_error\ntests/test_policy_jit.py::ApprovalPolicyJITTests::test_non_destructive_always_allowed\ntests/test_prefetch_cache_migration.py::PrefetchCacheMigrationTests::test_prefetch_cache_migration_creates_table\ntests/test_prefetch_cache_migration.py::PrefetchCacheMigrationTests::test_prefetch_cache_migration_idempotent\ntests/test_prefetch_cache_migration.py::PrefetchCacheMigrationTests::test_prefetch_cache_table_schema\ntests/test_preflight.py::PreflightTests::test_cli_agent_preflight_returns_needs_clarification_exit_code\ntests/test_preflight.py::PreflightTests::test_cli_agent_preflight_with_route_model_reports_routing\ntests/test_preflight.py::PreflightTests::test_preflight_includes_routing_and_matching_memories\ntests/test_preflight.py::PreflightTests::test_preflight_marks_ambiguous_task_not_ready\ntests/test_preflight_env_health.py::TestPreflightEnvHealth::test_health_check_detects_network_restriction\ntests/test_preflight_env_health.py::TestPreflightEnvHealth::test_health_check_detects_readonly_dir\ntests/test_preflight_env_health.py::TestPreflightEnvHealth::test_health_check_passes_on_normal_dir\ntests/test_prompt.py::ExtractJSONObjectTests::test_embedded_json_with_multiple_json_objects_returns_first_object\ntests/test_prompt.py::ExtractJSONObjectTests::test_ignores_invalid_brace_before_valid_object\ntests/test_prompt.py::ExtractJSONObjectTests::test_parses_bare_json_object\ntests/test_prompt.py::ExtractJSONObjectTests::test_parses_embedded_json_between_braces\ntests/test_prompt.py::ExtractJSONObjectTests::test_parses_fenced_json_with_language_tag\ntests/test_prompt.py::ExtractJSONObjectTests::test_parses_fenced_json_without_language_tag\ntests/test_prompt.py::ExtractJSONObjectTests::test_parses_json_when_prior_text_contains_braces\ntests/test_prompt.py::ExtractJSONObjectTests::test_parses_nested_braces_correctly\ntests/test_prompt.py::ExtractJSONObjectTests::test_raises_on_bare_braces_with_invalid_json\ntests/test_prompt.py::ExtractJSONObjectTests::test_raises_on_fenced_block_with_invalid_json\ntests/test_prompt.py::ExtractJSONObjectTests::test_raises_on_no_json\ntests/test_prompt.py::ExtractJSONObjectTests::test_repairs_trailing_comma_and_unquoted_key\ntests/test_prompt.py::LoadProjectInstructionsTests::test_loads_fallback_instruction_filenames\ntests/test_prompt.py::LoadProjectInstructionsTests::test_loads_hierarchical_instructions_from_parent_to_child\ntests/test_prompt.py::LoadProjectInstructionsTests::test_returns_content_when_agents_md_exists\ntests/test_prompt.py::LoadProjectInstructionsTests::test_returns_empty_when_no_agents_md\ntests/test_prompt.py::AssembleAgentPromptTests::test_includes_memories_in_user_prompt\ntests/test_prompt.py::AssembleAgentPromptTests::test_includes_observations_in_user_prompt\ntests/test_prompt.py::AssembleAgentPromptTests::test_includes_project_instructions_in_system_prompt\ntests/test_prompt.py::AssembleAgentPromptTests::test_includes_task_spec_in_user_prompt\ntests/test_prompt.py::AssembleAgentPromptTests::test_omits_project_instructions_when_none\ntests/test_prompt.py::AssembleAgentPromptTests::test_returns_prompt_bundle_with_task\ntests/test_prompt.py::AssembleAgentPromptTests::test_tool_metadata_in_system_prompt\ntests/test_prompt.py::ParseModelDecisionTests::test_parses_embedded_json_tool\ntests/test_prompt.py::ParseModelDecisionTests::test_parses_fenced_json_final\ntests/test_prompt.py::ParseModelDecisionTests::test_parses_final_decision\ntests/test_prompt.py::ParseModelDecisionTests::test_parses_tool_decision\ntests/test_prompt.py::ParseModelDecisionTests::test_raises_on_final_without_string_content\ntests/test_prompt.py::ParseModelDecisionTests::test_raises_on_tool_with_non_string_call_id\ntests/test_prompt.py::ParseModelDecisionTests::test_raises_on_tool_without_object_arguments\ntests/test_prompt.py::ParseModelDecisionTests::test_raises_on_tool_without_string_name\ntests/test_prompt.py::ParseModelDecisionTests::test_raises_on_unknown_type\ntests/test_prompt.py::ParseModelDecisionTests::test_tool_without_call_id_generates_default\ntests/test_provenance_gate.py::test_local_source_allows_automation_write\ntests/test_provenance_gate.py::test_web_message_quarantines_without_attestation\ntests/test_provenance_gate.py::test_web_message_allows_with_attestation\ntests/test_provenance_gate.py::test_canonical_digest_is_stable\ntests/test_provenance_gate.py::test_parse_source_kind_accepts_aliases\ntests/test_provider_expansion.py::TestProviderExpansion::test_deepseek_config\ntests/test_provider_expansion.py::TestProviderExpansion::test_grok_config\ntests/test_provider_expansion.py::TestProviderExpansion::test_mistral_config\ntests/test_provider_expansion.py::TestProviderExpansion::test_new_providers_registered\ntests/test_provider_expansion.py::TestProviderExpansion::test_new_providers_use_openai_compatible_adapter\ntests/test_provider_expansion.py::TestProviderExpansion::test_total_provider_count\ntests/test_quality_matrix.py::QualityMatrixTests::test_parallel_stack_run_tests_failing_command\ntests/test_quality_matrix.py::QualityMatrixTests::test_parallel_stack_run_tests_multiple_branches\ntests/test_quality_matrix.py::QualityMatrixTests::test_parallel_stack_run_tests_non_git_repo\ntests/test_quality_matrix.py::QualityMatrixTests::test_parallel_stack_run_tests_timeout\ntests/test_quality_matrix.py::QualityMatrixTests::test_parallel_stack_run_tests_with_sandboxes\ntests/test_quality_matrix.py::QualityMatrixTests::test_test_result_dataclass\ntests/test_refactoring.py::TestFunctionDecomposition::test_load_suspension_data_valid_file\ntests/test_refactoring.py::TestFunctionDecomposition::test_load_suspension_data_missing_file\ntests/test_refactoring.py::TestFunctionDecomposition::test_load_suspension_data_corrupted_file\ntests/test_refactoring.py::TestFunctionDecomposition::test_display_review_header\ntests/test_refactoring.py::TestFunctionDecomposition::test_get_changed_files_with_changes\ntests/test_refactoring.py::TestFunctionDecomposition::test_get_changed_files_no_changes\ntests/test_refactoring.py::TestFunctionDecomposition::test_display_file_list\ntests/test_refactoring.py::TestFunctionDecomposition::test_handle_review_choice_accept\ntests/test_refactoring.py::TestFunctionDecomposition::test_handle_review_choice_edit\ntests/test_refactoring.py::TestFunctionDecomposition::test_handle_review_choice_reject\ntests/test_refactoring.py::TestFunctionDecomposition::test_handle_review_choice_quit\ntests/test_refactoring.py::TestFunctionDecomposition::test_display_review_summary\ntests/test_refactoring.py::TestFunctionDecomposition::test_save_review_decisions\ntests/test_refactoring.py::TestHelperFunctions::test_truncate_string_basic\ntests/test_refactoring.py::TestHelperFunctions::test_truncate_string_no_truncation\ntests/test_refactoring.py::TestHelperFunctions::test_truncate_string_custom_suffix\ntests/test_refactoring.py::TestHelperFunctions::test_truncate_string_zero_max\ntests/test_refactoring.py::TestHelperFunctions::test_truncate_string_exact_length\ntests/test_refactoring.py::TestImportOrganization::test_subagent_review_imports_at_top_level\ntests/test_refactoring.py::TestTypeSafety::test_sandbox_branch_name_type_handling\ntests/test_refactoring.py::TestErrorRecovery::test_write_file_temp_cleanup_on_error\ntests/test_refactoring.py::TestBackwardCompatibility::test_interactive_review_mode_backward_compatible\ntests/test_refresh_competitive_docs.py::test_refresh_competitive_docs_passes_for_repo\ntests/test_refresh_competitive_docs.py::test_check_competitive_docs_passes_without_mutating_tracked_docs\ntests/test_refresh_competitive_docs.py::test_check_competitive_docs_reports_stale_generated_file\ntests/test_refresh_competitive_docs.py::test_main_check_mode_accepts_argv\ntests/test_release_evidence_bundle.py::test_release_evidence_bundle_counts_only_smoke\ntests/test_remediation_p1_p2.py::DevSignatureGateTests::test_dev_hash_allowed_when_explicit\ntests/test_remediation_p1_p2.py::DevSignatureGateTests::test_dev_hash_rejected_by_default\ntests/test_remediation_p1_p2.py::PreapprovedCallIdTests::test_preapproved_call_id_creates_scoped_approval\ntests/test_remediation_p1_p2.py::ShellObfuscationTests::test_backtick_expansion\ntests/test_remediation_p1_p2.py::ShellObfuscationTests::test_brace_expansion\ntests/test_remediation_p1_p2.py::ShellObfuscationTests::test_quote_stripping_rm_rf_prod\ntests/test_remediation_p1_p2.py::StrictLocalMcpTests::test_loopback_requires_auth_when_strict\ntests/test_remediation_p1_p2.py::AuditChainReloadTests::test_two_loggers_same_path_preserve_chain\ntests/test_remediation_p1_p2.py::AtomicScopedApprovalTests::test_concurrent_consume_only_one_wins\ntests/test_remediation_p1_p2.py::WorkflowRollbackTests::test_strict_validation_triggers_journal_restore\ntests/test_remediation_p1_p2.py::RelayDevSignatureTests::test_dev_signature_rejected_without_allow_flag\ntests/test_replay_cli.py::ReplayCLITests::test_replay_fork_creates_checkpoint\ntests/test_replay_cli.py::ReplayCLITests::test_replay_fork_invalid_step\ntests/test_replay_cli.py::ReplayCLITests::test_replay_fork_nonexistent_run\ntests/test_replay_cli.py::ReplayCLITests::test_replay_fork_valid\ntests/test_replay_cli.py::ReplayCLITests::test_replay_list_empty\ntests/test_replay_cli.py::ReplayCLITests::test_replay_resume_nonexistent_checkpoint\ntests/test_replay_cli.py::ReplayCLITests::test_replay_resume_valid\ntests/test_replay_cli.py::ReplayCLITests::test_replay_steps_nonexistent_run\ntests/test_replay_cli.py::ReplayCLITests::test_replay_steps_with_entries\ntests/test_resource_monitor.py::ProcessAliveTests::test_current_process_alive\ntests/test_resource_monitor.py::ProcessAliveTests::test_init_process_alive\ntests/test_resource_monitor.py::ProcessAliveTests::test_invalid_pid_returns_false\ntests/test_run_store.py::RunStoreTests::test_cli_lists_and_shows_runs\ntests/test_run_store.py::RunStoreTests::test_list_runs_skips_corrupt_jsonl_files\ntests/test_run_store.py::RunStoreTests::test_list_runs_skips_records_without_run_id\ntests/test_run_store.py::RunStoreTests::test_observations_for_run_returns_completed_tool_calls\ntests/test_run_store.py::RunStoreTests::test_pending_approval_for_run_clears_after_resolution\ntests/test_run_store.py::RunStoreTests::test_pending_approval_for_run_returns_last_unresolved\ntests/test_run_store.py::RunStoreTests::test_run_paused_summarizes_as_pending_approval\ntests/test_run_store.py::RunStoreTests::test_run_store_persists_and_summarizes_audit_events\ntests/test_run_store.py::RunStoreTests::test_run_store_uses_owner_only_permissions\ntests/test_run_store.py::RunStoreTests::test_task_for_run_extracts_original_task\ntests/test_sandbox_cli.py::test_sandbox_route_command\ntests/test_sandbox_cli.py::test_sandbox_route_command_with_config\ntests/test_sandbox_cli.py::test_sandbox_route_command_invalid_path\ntests/test_sandbox_cli.py::test_sandbox_check_wasm_command\ntests/test_sandbox_cli.py::test_sandbox_check_compatibility_command\ntests/test_sandbox_cli.py::test_sandbox_check_compatibility_command_invalid_path\ntests/test_sandbox_cli.py::test_sandbox_monitor_command\ntests/test_sandbox_cli.py::test_sandbox_monitor_command_with_duration\ntests/test_sandbox_hardening.py::ContainerSecurityOptTests::test_all_security_opts_combined\ntests/test_sandbox_hardening.py::ContainerSecurityOptTests::test_apparmor_profile_added\ntests/test_sandbox_hardening.py::ContainerSecurityOptTests::test_image_still_last_positional\ntests/test_sandbox_hardening.py::ContainerSecurityOptTests::test_no_extra_security_opts_by_default\ntests/test_sandbox_hardening.py::ContainerSecurityOptTests::test_oci_runtime_added\ntests/test_sandbox_hardening.py::ContainerSecurityOptTests::test_oci_runtime_none_omitted\ntests/test_sandbox_hardening.py::ContainerSecurityOptTests::test_seccomp_default_keyword\ntests/test_sandbox_hardening.py::ContainerSecurityOptTests::test_seccomp_profile_added\ntests/test_sandbox_hardening.py::ContainerSecurityOptTests::test_selinux_label_added\ntests/test_sandbox_hardening.py::ContainerCodeModeBackendConfigTests::test_config_has_security_fields\ntests/test_sandbox_hardening.py::ContainerCodeModeBackendConfigTests::test_config_security_fields_default_none\ntests/test_sandbox_hardening.py::IsolateCodeModeBackendTests::test_executes_via_gvisor_runtime\ntests/test_sandbox_hardening.py::IsolateCodeModeBackendTests::test_is_vm_isolated_is_not_in_container_backend\ntests/test_sandbox_hardening.py::IsolateCodeModeBackendTests::test_is_vm_isolated_true\ntests/test_sandbox_hardening.py::IsolateCodeModeBackendTests::test_require_image_digest_default_true\ntests/test_sandbox_hardening.py::IsolateCodeModeBackendTests::test_seccomp_profile_default_is_default\ntests/test_sandbox_hardening.py::ExecuteCodeModeAuditTests::test_audit_logger_none_no_error\ntests/test_sandbox_hardening.py::ExecuteCodeModeAuditTests::test_container_backend_falls_back_when_docker_unavailable\ntests/test_sandbox_hardening.py::ExecuteCodeModeAuditTests::test_explicit_sandbox_overrides_profile\ntests/test_sandbox_hardening.py::ExecuteCodeModeAuditTests::test_no_audit_without_logger\ntests/test_sandbox_hardening.py::ExecuteCodeModeAuditTests::test_profile_derives_sandbox_when_no_sandbox_given\ntests/test_sandbox_hardening.py::ExecuteCodeModeAuditTests::test_profile_selected_event_emitted\ntests/test_sandbox_hardening.py::ExecuteCodeModeAuditTests::test_violation_event_on_unsafe_code\ntests/test_sandbox_profile.py::SandboxProfileDefaultSandboxTests::test_ci_is_between_local_and_production\ntests/test_sandbox_profile.py::SandboxProfileDefaultSandboxTests::test_each_profile_returns_code_mode_sandbox\ntests/test_sandbox_profile.py::SandboxProfileDefaultSandboxTests::test_local_has_relaxed_limits\ntests/test_sandbox_profile.py::SandboxProfileDefaultSandboxTests::test_production_has_tightest_limits\ntests/test_sandbox_profile.py::SandboxProfileValidateRuntimeTests::test_local_and_ci_always_no_warnings\ntests/test_sandbox_profile.py::SandboxProfileValidateRuntimeTests::test_production_returns_list\ntests/test_sandbox_profile.py::SandboxProfileValidateRuntimeTests::test_production_warnings_are_strings\ntests/test_sandbox_profile.py::SandboxProfileEnumTests::test_all_three_profiles_exist\ntests/test_sandbox_profile.py::SandboxProfileEnumTests::test_profiles_are_strings\ntests/test_sandbox_profile.py::SandboxProfileEnumTests::test_sandbox_profile_imported_from_code_mode\ntests/test_schema.py::SchemaValidationTests::test_accepts_array_field\ntests/test_schema.py::SchemaValidationTests::test_accepts_boolean_field\ntests/test_schema.py::SchemaValidationTests::test_accepts_number_as_int_or_float\ntests/test_schema.py::SchemaValidationTests::test_accepts_string_or_integer_when_no_type_specified\ntests/test_schema.py::SchemaValidationTests::test_accepts_valid_object_with_optional_field_omitted\ntests/test_schema.py::SchemaValidationTests::test_accepts_valid_object_with_required_field\ntests/test_schema.py::SchemaValidationTests::test_label_appears_in_error_message\ntests/test_schema.py::SchemaValidationTests::test_rejects_bool_when_integer_expected\ntests/test_schema.py::SchemaValidationTests::test_rejects_missing_required_field\ntests/test_schema.py::SchemaValidationTests::test_rejects_non_dict_value\ntests/test_schema.py::SchemaValidationTests::test_rejects_non_object_schema\ntests/test_schema.py::SchemaValidationTests::test_rejects_unknown_field\ntests/test_schema.py::SchemaValidationTests::test_rejects_unsupported_schema_type\ntests/test_schema.py::SchemaValidationTests::test_rejects_wrong_type\ntests/test_schema.py::SchemaValidationTests::test_validates_array_item_type_when_items_schema_is_present\ntests/test_schema.py::SchemaValidationTests::test_validates_nested_object_fields\ntests/test_schema_migration.py::SQLiteMigrationStoreTests::test_applied_versions_empty_initially\ntests/test_schema_migration.py::SQLiteMigrationStoreTests::test_creates_migration_table\ntests/test_schema_migration.py::SQLiteMigrationStoreTests::test_mark_applied_idempotent\ntests/test_schema_migration.py::SQLiteMigrationStoreTests::test_mark_applied_records_version\ntests/test_schema_migration.py::SQLiteMigrationStoreTests::test_persists_across_instances\ntests/test_schema_migration.py::SQLiteMigrationStoreTests::test_status_reports_pending\ntests/test_schema_migration.py::MigrationRunnerTests::test_apply_pending_runs_new_migrations\ntests/test_schema_migration.py::MigrationRunnerTests::test_apply_pending_skips_already_applied\ntests/test_schema_migration.py::MigrationRunnerTests::test_migrations_run_in_version_order\ntests/test_schema_migration.py::MigrationRunnerTests::test_status_returns_correct_pending\ntests/test_schema_migration.py::DoctorMigrationCLITests::test_doctor_migration_with_store_returns_ok\ntests/test_schema_migration.py::DoctorMigrationCLITests::test_doctor_migration_without_store_returns_error\ntests/test_security_edge_cases.py::SSHRedactionEdgeCases::test_multiple_ssh_keys\ntests/test_security_edge_cases.py::SSHRedactionEdgeCases::test_nested_ssh_keys\ntests/test_security_edge_cases.py::SSHRedactionEdgeCases::test_partial_ssh_key_not_redacted\ntests/test_security_edge_cases.py::PermissionModeEdgeCases::test_hook_permission_mode_isolation\ntests/test_security_edge_cases.py::PermissionModeEdgeCases::test_hook_permission_mode_string_values\ntests/test_security_edge_cases.py::ASTFuzzEdgeCases::test_async_function_with_write\ntests/test_security_edge_cases.py::ASTFuzzEdgeCases::test_comprehension_with_write\ntests/test_security_edge_cases.py::ASTFuzzEdgeCases::test_lambda_with_write\ntests/test_security_edge_cases.py::ASTFuzzEdgeCases::test_nested_function_calls\ntests/test_security_edge_cases.py::ASTFuzzEdgeCases::test_try_except_with_write\ntests/test_security_fixes.py::TestShellCommandInjectionFix::test_shell_uses_shlex_split_not_shell_true\ntests/test_security_fixes.py::TestShellCommandInjectionFix::test_shell_blocks_dangerous_commands\ntests/test_security_fixes.py::TestRegexValidationFix::test_regex_pattern_validation\ntests/test_security_fixes.py::TestRegexValidationFix::test_regex_timeout_protection\ntests/test_security_fixes.py::TestTOCTOUFix::test_atomic_file_write\ntests/test_security_fixes.py::TestTOCTOUFix::test_mtime_mismatch_detection\ntests/test_security_fixes.py::TestSymlinkValidationFix::test_symlink_blocked_in_read\ntests/test_security_fixes.py::TestSymlinkValidationFix::test_symlink_blocked_in_write\ntests/test_security_fixes.py::TestSecureRandomFix::test_context_bus_uses_secrets\ntests/test_security_fixes.py::TestSecureRandomFix::test_llm_retry_uses_secrets\ntests/test_security_fixes.py::TestEnvironmentVariableFilteringFix::test_allowlist_environment_variables\ntests/test_security_fixes.py::TestWeakTokenHashingFix::test_hash_token_uses_pbkdf2\ntests/test_security_fixes.py::TestWeakTokenHashingFix::test_hash_token_with_salt_uses_random_salt\ntests/test_security_fixes.py::TestWeakTokenHashingFix::test_verify_token_with_salt\ntests/test_security_fixes.py::TestLineValidationFix::test_line_number_validation\ntests/test_security_fixes.py::TestLineValidationFix::test_line_number_type_validation\ntests/test_security_fixes.py::TestPathTraversalFix::test_path_traversal_blocked\ntests/test_security_fixes.py::TestEmptyFileValidationFix::test_empty_file_edit_blocked\ntests/test_security_fixes.py::TestContextBusValidationFix::test_workflow_id_validation\ntests/test_security_fixes.py::TestContextBusValidationFix::test_max_delta_age_validation\ntests/test_self_healing_merge.py::SelfHealingMergeTests::test_git_branch_sandbox_merge_self_healing_enabled_no_provider\ntests/test_self_healing_merge.py::SelfHealingMergeTests::test_git_branch_sandbox_merge_with_self_healing_params\ntests/test_self_healing_merge.py::SelfHealingMergeTests::test_resolve_conflicts_with_llm_disabled_self_healing\ntests/test_self_healing_merge.py::SelfHealingMergeTests::test_resolve_conflicts_with_llm_max_iterations\ntests/test_self_healing_merge.py::SelfHealingMergeTests::test_run_lsp_validation_invalid_python\ntests/test_self_healing_merge.py::SelfHealingMergeTests::test_run_lsp_validation_non_python\ntests/test_self_healing_merge.py::SelfHealingMergeTests::test_run_lsp_validation_python_file\ntests/test_session_stream_extended.py::test_is_terminal_detects_completed_and_failed\ntests/test_session_stream_extended.py::test_stream_run_events_requires_existing_run_when_not_following\ntests/test_session_stream_extended.py::test_stream_run_events_honors_max_wait\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationDollarSubstitutionTests::test_dollar_substitution_in_middle\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationDollarSubstitutionTests::test_dollar_substitution_with_rm\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationDollarSubstitutionTests::test_nested_dollar_substitution\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationDollarSubstitutionTests::test_simple_dollar_substitution\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationBacktickTests::test_backtick_nested_in_command\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationBacktickTests::test_backtick_with_rm\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationBacktickTests::test_multiple_backticks\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationBacktickTests::test_simple_backtick\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationChainingTests::test_and_chain\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationChainingTests::test_double_and_chain\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationChainingTests::test_mixed_chain\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationChainingTests::test_or_chain\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationBraceExpansionTests::test_brace_prefix_expansion\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationBraceExpansionTests::test_brace_three_alternatives\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationBraceExpansionTests::test_brace_with_rm\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationBraceExpansionTests::test_simple_brace_expansion\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationPipeTests::test_pipe_chain\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationPipeTests::test_pipe_with_grep\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationPipeTests::test_simple_pipe\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationSemicolonTests::test_multiple_semicolons\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationSemicolonTests::test_semicolon_with_cd\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationSemicolonTests::test_simple_semicolon\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationUnquotedVarTests::test_env_var_expansion_attempt\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationUnquotedVarTests::test_unquoted_var\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationUnquotedVarTests::test_var_in_path\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationUnquotedVarTests::test_var_with_braces\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationProcessSubstitutionTests::test_process_substitution_with_delete\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationProcessSubstitutionTests::test_simple_process_substitution\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationCombinedTechniquesTests::test_backtick_and_brace\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationCombinedTechniquesTests::test_dollar_sub_and_chain\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationCombinedTechniquesTests::test_empty_command\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationCombinedTechniquesTests::test_escape_and_substitution\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationCombinedTechniquesTests::test_heavily_obfuscated_rm_prod\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationCombinedTechniquesTests::test_quoted_obfuscation_with_chain\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationCombinedTechniquesTests::test_simple_command_no_obfuscation\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationHighRiskIntegrationTests::test_backtick_detected_as_high_risk\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationHighRiskIntegrationTests::test_brace_expansion_detected_as_high_risk\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationHighRiskIntegrationTests::test_chained_command_detected_as_high_risk\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationHighRiskIntegrationTests::test_dollar_sub_detected_as_high_risk\ntests/test_shell_obfuscation_adversarial.py::ShellObfuscationHighRiskIntegrationTests::test_safe_command_not_flagged\ntests/test_signature_relay.py::test_signature_relay_store_roundtrip\ntests/test_signature_relay.py::test_signature_relay_requires_auth_on_wan_bind\ntests/test_signature_relay.py::test_federated_http_broadcast_and_collect\ntests/test_signature_relay.py::test_signature_relay_rate_limit\ntests/test_sigstore_signer.py::SigstoreSignerTests::test_sign_bundle_failure\ntests/test_sigstore_signer.py::SigstoreSignerTests::test_sign_bundle_success\ntests/test_sigstore_signer.py::SigstoreSignerTests::test_sign_with_identity_token\ntests/test_sigstore_signer.py::SigstoreSignerTests::test_signer_requires_sigstore\ntests/test_sigstore_signer.py::SigstoreSignerTests::test_verify_bundle_success\ntests/test_sigstore_signer.py::SigstoreSignerTests::test_verify_with_identity_policy\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_detect_ci_oidc_token_github_actions\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_detect_ci_oidc_token_gitlab_ci\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_detect_ci_oidc_token_none\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_verifier_initialization\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_verifier_offline_mode\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_verify_missing_signature_required\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_verify_no_signature_required\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_verify_offline_mode\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_verify_sigstore_no_certificate\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_verify_ssh_signature_present\ntests/test_sigstore_signer.py::TSBProvenanceVerifierTests::test_verify_unknown_signer\ntests/test_sigstore_signer.py::SigstoreAvailabilityTests::test_sigstore_availability_flag\ntests/test_skill_activation_explain.py::test_explain_reports_shadowed_duplicate_skill\ntests/test_skill_activation_explain.py::test_explain_no_auto_skills_zero_tokens\ntests/test_skill_candidate_artifacts.py::test_write_and_validate_candidate_bundle\ntests/test_skill_candidate_artifacts.py::test_validate_reports_missing_artifacts\ntests/test_skill_candidate_artifacts.py::test_validate_reports_invalid_json\ntests/test_skill_candidate_artifacts.py::test_validate_reports_candidate_bundle_tamper\ntests/test_skill_candidate_artifacts.py::test_validate_reports_policy_escalation\ntests/test_skill_eval.py::test_offline_eval_passes_valid_bundle\ntests/test_skill_eval.py::test_offline_eval_fails_oversized_skill\ntests/test_skill_eval.py::test_create_from_run_writes_eval_report\ntests/test_skill_eval_dataset.py::test_default_eval_dataset_passes\ntests/test_skill_eval_dataset.py::test_eval_dataset_all_check_types\ntests/test_skill_eval_dataset.py::test_eval_dataset_invalid_cases_array\ntests/test_skill_eval_dataset.py::test_eval_dataset_custom_case_failure\ntests/test_skill_eval_dataset.py::test_eval_dataset_unknown_check_and_bad_case\ntests/test_skill_eval_dataset.py::test_load_eval_dataset_invalid_json\ntests/test_skill_executor.py::test_execute_skill_low_risk_code_mode\ntests/test_skill_executor.py::test_execute_skill_wasm_compat_python\ntests/test_skill_executor.py::test_skill_writer_publish_then_execute\ntests/test_skill_rag.py::TestPromptBasedProber::test_prober_identifies_sufficient_context\ntests/test_skill_rag.py::TestPromptBasedProber::test_prober_identifies_insufficient_context_with_uncertainty\ntests/test_skill_rag.py::TestPromptBasedProber::test_prober_identifies_insufficient_short_context\ntests/test_skill_rag.py::TestPromptBasedProber::test_prober_identifies_misaligned_context_no_overlap\ntests/test_skill_rag.py::TestPromptBasedProber::test_prober_identifies_misaligned_context_low_overlap\ntests/test_skill_rag.py::TestPromptBasedProber::test_prober_custom_confidence_threshold\ntests/test_skill_rag.py::TestSkillRouter::test_router_routes_to_exit_for_sufficient_state\ntests/test_skill_rag.py::TestSkillRouter::test_router_routes_to_query_rewriting_for_vague_query\ntests/test_skill_rag.py::TestSkillRouter::test_router_routes_to_decomposition_for_multi_part_query\ntests/test_skill_rag.py::TestSkillRouter::test_router_routes_to_evidence_focusing_for_missing_details\ntests/test_skill_rag.py::TestSkillRouter::test_router_defaults_to_query_rewriting_for_insufficient\ntests/test_skill_rag.py::TestSkillRouter::test_router_decompose_question_splits_correctly\ntests/test_skill_rag.py::TestSkillRouter::test_router_rewrite_query_adds_context\ntests/test_skill_rag.py::TestSkillRouter::test_router_focus_evidence_adds_specificity\ntests/test_skill_rag.py::TestSkillRAGEngine::test_engine_terminates_on_sufficient_context\ntests/test_skill_rag.py::TestSkillRAGEngine::test_engine_respects_max_rounds_limit\ntests/test_skill_rag.py::TestSkillRAGEngine::test_engine_tracks_skills_used\ntests/test_skill_rag.py::TestSkillRAGEngine::test_engine_returns_context_and_answer\ntests/test_skill_rag.py::TestHiddenStateProber::test_hidden_state_prober_requires_implementation\ntests/test_skill_rag.py::TestHiddenStateProber::test_hidden_state_prober_concrete_implementation\ntests/test_skill_rag.py::TestSkillRAGIntegration::test_skill_rag_retrieve_function_exists\ntests/test_skill_rag.py::TestSkillRAGIntegration::test_skill_rag_retrieve_with_default_prober\ntests/test_skill_rag.py::TestSkillRAGIntegration::test_skill_rag_retrieve_with_custom_prober\ntests/test_skill_rag.py::TestSkillRAGIntegration::test_skill_rag_retrieve_respects_max_rounds\ntests/test_skill_review.py::SkillReviewTests::test_ast_detects_dangerous_calls\ntests/test_skill_review.py::SkillReviewTests::test_ast_detects_dangerous_imports\ntests/test_skill_review.py::SkillReviewTests::test_ast_ignores_safe_python_code\ntests/test_skill_review.py::SkillReviewTests::test_external_network_reference_warning\ntests/test_skill_review.py::SkillReviewTests::test_long_skill_without_reference_md_warning\ntests/test_skill_review.py::SkillReviewTests::test_missing_description_in_frontmatter\ntests/test_skill_review.py::SkillReviewTests::test_missing_name_in_frontmatter\ntests/test_skill_review.py::SkillReviewTests::test_missing_skill_md\ntests/test_skill_review.py::SkillReviewTests::test_missing_yaml_frontmatter\ntests/test_skill_review.py::SkillReviewTests::test_network_and_length_warnings_together\ntests/test_skill_review.py::SkillReviewTests::test_review_skill_file_not_directory\ntests/test_skill_review.py::SkillReviewTests::test_short_skill_without_reference_md_is_fine\ntests/test_skill_review.py::SkillReviewTests::test_too_many_lines_warning\ntests/test_skill_review.py::SkillReviewTests::test_wget_triggers_network_warning\ntests/test_skill_router.py::test_skill_router_init\ntests/test_skill_router.py::test_skill_router_with_custom_config\ntests/test_skill_router.py::test_route_skill_low_risk\ntests/test_skill_router.py::test_route_skill_medium_risk\ntests/test_skill_router.py::test_route_skill_high_risk_with_wasm\ntests/test_skill_router.py::test_route_skill_with_preferred_sandbox\ntests/test_skill_router.py::test_route_skill_wasm_incompatible\ntests/test_skill_router.py::test_get_sandbox_config_wasm\ntests/test_skill_router.py::test_get_sandbox_config_docker\ntests/test_skill_router.py::test_get_sandbox_config_directory_snapshot\ntests/test_smart_hitl.py::test_smart_hitl_approval_y\ntests/test_smart_hitl.py::test_smart_hitl_approval_p\ntests/test_smart_hitl.py::test_smart_hitl_approval_t\ntests/test_strategic_features.py::test_build_vote_signing_message_stable\ntests/test_strategic_features.py::test_dev_vote_signature_canonical_and_legacy\ntests/test_strategic_features.py::test_sanitize_tenant_id_rejects_invalid\ntests/test_strategic_features.py::test_control_plane_registry_isolates_tenants\ntests/test_strategic_features.py::test_control_plane_server_lists_tenants\ntests/test_strategic_features.py::test_vote_relay_dev_signature\ntests/test_strategic_features.py::test_vote_relay_server_health\ntests/test_strategic_features.py::test_wasm_manifest_written\ntests/test_strategic_features.py::test_ssh_sign_produces_signature_blob\ntests/test_streaming.py::test_decision_content_streamer_emits_only_final_content\ntests/test_streaming.py::test_format_progress_line_for_tool_call\ntests/test_streaming.py::test_audit_dict_to_stream_event_maps_iteration\ntests/test_streaming.py::test_build_run_stream_handlers_json_stream_progress\ntests/test_streaming.py::test_build_run_stream_handlers_enables_stream_flag\ntests/test_subagent.py::SubagentTests::test_cli_agent_run_subagent_flag_exposes_tool\ntests/test_subagent.py::SubagentTests::test_subagent_depth_limit_blocks_second_level\ntests/test_subagent.py::SubagentTests::test_subagent_tool_absent_when_disabled\ntests/test_subagent.py::SubagentTests::test_subagent_tool_executes_child_run_and_returns_summary\ntests/test_subagent_approval_queue_integration.py::test_should_use_centralized_approval_rules\ntests/test_subagent_approval_queue_integration.py::test_sync_submit_and_approve\ntests/test_subagent_approval_queue_integration.py::test_centralized_handler_denied\ntests/test_subagent_approval_queue_integration.py::test_approval_subagents_cli_list_approve\ntests/test_subagent_approval_queue_store.py::TestQueueDiskSnapshot::test_default_construction\ntests/test_subagent_approval_queue_store.py::TestApprovalQueuePruneReport::test_removed_count\ntests/test_subagent_approval_queue_store.py::TestApprovalQueuePruneReport::test_empty_report\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_queue_path_uses_safe_id\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_list_parent_run_ids_empty\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_exists_returns_false_for_missing\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_save_and_load_roundtrip\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_load_returns_empty_for_missing\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_hmac_integrity_check\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_hmac_rejects_tampered_data\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_update_request_status\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_update_request_status_returns_false_for_missing\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_prune_stale_removes_old_files\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_prune_stale_skips_recent_files\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_prune_stale_skips_pending\ntests/test_subagent_approval_queue_store.py::TestApprovalQueueStore::test_list_parent_run_ids_after_save\ntests/test_subagent_approval_queue_store.py::TestDefaultHmacSecret::test_returns_none_when_unset\ntests/test_subagent_approval_queue_store.py::TestDefaultHmacSecret::test_returns_value_when_set\ntests/test_subagent_approval_queue_store.py::TestDefaultHmacSecret::test_returns_none_for_empty\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_minimal_dict\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_full_dict\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_missing_required_field_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_empty_required_field_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_none_required_field_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_invalid_status_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_invalid_tool_arguments_type_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_invalid_timeout_seconds_type_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_negative_timeout_seconds_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_zero_timeout_seconds_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_invalid_batch_index_type_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_negative_batch_index_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_invalid_timestamp_type_raises_error\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_valid_enum_status_values\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_none_tool_arguments_defaults_to_empty_dict\ntests/test_subagent_approval_queue_store.py::TestRequestFromDict::test_string_timeout_converts_to_int\ntests/test_subagent_approval_queue_store.py::TestPendingRequestsFromSnapshot::test_filters_pending\ntests/test_subagent_approval_queue_store.py::TestPendingRequestsFromSnapshot::test_returns_empty_when_none_pending\ntests/test_subagent_batch.py::TestSubagentBatch::test_batch_handles_task_failure\ntests/test_subagent_batch.py::TestSubagentBatch::test_batch_returns_error_for_empty_tasks\ntests/test_subagent_batch.py::TestSubagentBatch::test_batch_runs_tasks_concurrently\ntests/test_subagent_batch.py::TestSubagentBatch::test_batch_tool_is_registered\ntests/test_subagent_defs.py::test_load_subagent_defs_from_yaml_without_pyyaml\ntests/test_subagent_defs.py::test_named_subagent_tool_is_registered_and_callable\ntests/test_subagent_isolation.py::SubagentIsolationTests::test_deprecated_container_alias_still_works\ntests/test_subagent_isolation.py::SubagentIsolationTests::test_normalize_subagent_isolation_defaults_and_rejects_unknown\ntests/test_subagent_isolation.py::SubagentIsolationTests::test_normalize_subagent_isolation_deprecated_container_alias\ntests/test_subagent_isolation.py::SubagentIsolationTests::test_prepare_directory_snapshot_creates_snapshot_and_cleans_up\ntests/test_subagent_isolation.py::SubagentIsolationTests::test_prepare_worktree_creates_and_cleans_up\ntests/test_subagent_isolation.py::SubagentIsolationTests::test_prepare_worktree_requires_git_repository\ntests/test_subagent_isolation.py::SubagentIsolationTests::test_run_subagent_directory_snapshot_uses_isolated_root\ntests/test_subagent_isolation.py::SubagentIsolationTests::test_run_subagent_worktree_uses_isolated_root\ntests/test_subagent_isolation.py::test_docker_isolation_with_resource_limits\ntests/test_subagent_isolation.py::test_docker_isolation_without_resource_limits\ntests/test_subagent_isolation.py::test_isolation_context_with_resource_limits\ntests/test_subagent_lineage.py::SubagentLineageTests::test_parent_run_context_default_empty\ntests/test_subagent_lineage.py::SubagentLineageTests::test_run_subagent_records_lineage_and_audit\ntests/test_subagent_lineage.py::SubagentLineageTests::test_subagent_batch_returns_ordered_lineage\ntests/test_subagent_lineage.py::SubagentLineageTests::test_subagent_tool_uses_parent_run_context\ntests/test_subagent_review.py::TestSafeSegment::test_preserves_alphanumeric\ntests/test_subagent_review.py::TestSafeSegment::test_replaces_special_chars\ntests/test_subagent_review.py::TestSafeSegment::test_truncates_to_80_chars\ntests/test_subagent_review.py::TestSafeSegment::test_empty_returns_empty\ntests/test_subagent_review.py::TestSafeSegment::test_none_returns_empty\ntests/test_subagent_review.py::TestSubagentReviewArtifact::test_to_dict\ntests/test_subagent_review.py::TestListSubagentReviews::test_returns_empty_when_no_reviews_dir\ntests/test_subagent_review.py::TestListSubagentReviews::test_lists_reviews\ntests/test_subagent_review.py::TestListSubagentReviews::test_filter_by_parent_run_id\ntests/test_subagent_review.py::TestListSubagentReviews::test_skips_corrupt_json\ntests/test_subagent_review.py::TestLoadSubagentReview::test_raises_on_missing_review\ntests/test_subagent_review.py::TestLoadSubagentReview::test_loads_existing_review\ntests/test_subagent_team_orchestrator.py::TestTeamDef::test_default_construction\ntests/test_subagent_team_orchestrator.py::TestTeamDef::test_with_specialists\ntests/test_subagent_team_orchestrator.py::TestLoadTeamDefs::test_returns_empty_when_no_teams_dir\ntests/test_subagent_team_orchestrator.py::TestLoadTeamDefs::test_loads_yaml_team\ntests/test_subagent_team_orchestrator.py::TestLoadTeamDefs::test_loads_json_team\ntests/test_subagent_team_orchestrator.py::TestLoadTeamDefs::test_skips_unknown_file_types\ntests/test_subagent_team_orchestrator.py::TestLoadTeamDefs::test_skips_yaml_without_name\ntests/test_subagent_team_orchestrator.py::TestLoadTeamDefs::test_skips_yaml_returning_non_dict\ntests/test_subagent_team_orchestrator.py::TestLoadTeamDefs::test_skips_missing_name_field\ntests/test_subagent_team_orchestrator.py::TestTeamOrchestrator::test_list_teams\ntests/test_subagent_team_orchestrator.py::TestTeamOrchestrator::test_get_team_returns_none_for_unknown\ntests/test_subagent_team_orchestrator.py::TestTeamOrchestrator::test_run_team_returns_error_for_unknown_team\ntests/test_subagent_team_orchestrator.py::TestTeamOrchestrator::test_run_team_with_specialists\ntests/test_subagent_team_orchestrator.py::TestTeamOrchestrator::test_merge_results_concatenate\ntests/test_subagent_team_orchestrator.py::TestTeamOrchestrator::test_merge_results_lead_summary\ntests/test_surface_auth_hardening.py::test_extract_bearer_token\ntests/test_surface_auth_hardening.py::test_tenant_scoped_policy\ntests/test_surface_auth_hardening.py::test_token_file_admin_wildcard\ntests/test_surface_auth_hardening.py::test_relay_requires_auth_on_wan_bind\ntests/test_surface_auth_hardening.py::test_relay_rejects_missing_token\ntests/test_surface_auth_hardening.py::test_control_plane_tenant_authz\ntests/test_swarm.py::test_subagent_task_creation\ntests/test_swarm.py::test_subagent_result_creation\ntests/test_swarm.py::test_code_review_creation\ntests/test_swarm.py::test_subagent_execute_without_git\ntests/test_swarm.py::test_subagent_execute_with_git\ntests/test_swarm.py::test_swarm_manager_creation\ntests/test_swarm.py::test_swarm_manager_add_subagent\ntests/test_swarm.py::test_swarm_manager_execute_empty\ntests/test_swarm.py::test_swarm_manager_execute_multiple\ntests/test_swarm.py::test_swarm_manager_code_reviews\ntests/test_swarm.py::test_swarm_manager_select_best_result\ntests/test_swarm.py::test_swarm_manager_select_best_with_failed\ntests/test_swarm.py::test_swarm_consensus_mode_disabled\ntests/test_swarm.py::test_swarm_enable_consensus_mode\ntests/test_swarm.py::test_swarm_disable_consensus_mode\ntests/test_swarm.py::test_swarm_task_with_consensus_required\ntests/test_swarm.py::test_swarm_task_without_consensus\ntests/test_swarm_agent_execution.py::test_subagent_uses_manager_when_configured\ntests/test_swarm_agent_execution.py::test_swarm_manager_with_agent_execution_factory\ntests/test_swarm_locks.py::TestSwarmLockTimeout::test_swarm_manager_initializes_with_lock_timeout\ntests/test_swarm_locks.py::TestSwarmLockTimeout::test_swarm_manager_default_lock_timeout\ntests/test_swarm_locks.py::TestSwarmLockTimeout::test_update_subagent_heartbeat\ntests/test_swarm_locks.py::TestSwarmLockTimeout::test_swarm_with_custom_timeout\ntests/test_swarm_locks.py::TestSwarmLockTimeout::test_subagent_execution_without_heartbeat\ntests/test_swarm_locks.py::TestSwarmLockTimeout::test_multiple_subagents_heartbeat_tracking\ntests/test_swarm_locks.py::TestSwarmLockTimeout::test_heartbeat_monitor_cleanup_on_stop\ntests/test_swarm_locks.py::TestSwarmLockTimeout::test_swarm_manager_with_zero_subagents\ntests/test_sync_cli.py::SyncCLITests::test_federated_sync_create_sync_message\ntests/test_sync_cli.py::SyncCLITests::test_federated_sync_export_import_roundtrip\ntests/test_sync_cli.py::SyncCLITests::test_federated_sync_initialization\ntests/test_sync_cli.py::SyncCLITests::test_federated_sync_process_sync_message_without_store\ntests/test_sync_cli.py::SyncCLITests::test_federated_sync_record_edge_change\ntests/test_sync_cli.py::SyncCLITests::test_federated_sync_record_node_change\ntests/test_sync_cli.py::SyncCLITests::test_sync_export_without_graph_store\ntests/test_sync_cli.py::SyncCLITests::test_sync_import_nonexistent_file\ntests/test_sync_cli.py::SyncCLITests::test_sync_status_without_graph_store\ntests/test_telemetry.py::TelemetryConfigTests::test_custom_config\ntests/test_telemetry.py::TelemetryConfigTests::test_default_config\ntests/test_telemetry.py::TelemetryConfigTests::test_frozen\ntests/test_telemetry.py::TelemetryNotAvailableTests::test_error_message_is_helpful\ntests/test_telemetry.py::InMemoryMetricsSinkTests::test_counts_run_and_tool_events\ntests/test_telemetry.py::OTelAuditSinkTests::test_force_flush_returns_true\ntests/test_telemetry.py::OTelAuditSinkTests::test_full_run_lifecycle\ntests/test_telemetry.py::OTelAuditSinkTests::test_run_failed_sets_error_status\ntests/test_telemetry.py::OTelAuditSinkTests::test_run_started_creates_span\ntests/test_telemetry.py::OTelAuditSinkTests::test_shutdown_ends_open_spans\ntests/test_telemetry.py::OTelAuditSinkTests::test_tool_span_has_attributes\ntests/test_telemetry.py::TracingHTTPTransportTests::test_post_json_creates_span\ntests/test_telemetry.py::TracingHTTPTransportTests::test_post_json_error_sets_status\ntests/test_telemetry.py::ConfigureTelemetryTests::test_console_only\ntests/test_telemetry.py::ConfigureTelemetryTests::test_missing_otlp_endpoint_ok\ntests/test_telemetry.py::ConfigureMetricsTests::test_metrics_provider_records_run_lifecycle\ntests/test_telemetry.py::ConfigureMetricsTests::test_metrics_provider_uses_console_reader_when_requested\ntests/test_time_to_first_run_kpi.py::test_measure_time_to_first_run_under_budget\ntests/test_tool_calling_conformance.py::LLMToolDefinitionTests::test_custom_schema\ntests/test_tool_calling_conformance.py::LLMToolDefinitionTests::test_defaults\ntests/test_tool_calling_conformance.py::LLMToolCallTests::test_call_id_default\ntests/test_tool_calling_conformance.py::LLMToolCallTests::test_fields\ntests/test_tool_calling_conformance.py::LLMSafetyBlockTests::test_blocked_with_category\ntests/test_tool_calling_conformance.py::LLMSafetyBlockTests::test_not_blocked\ntests/test_tool_calling_conformance.py::LLMRequestToolsTests::test_default_tools_empty\ntests/test_tool_calling_conformance.py::LLMRequestToolsTests::test_tools_passed_through\ntests/test_tool_calling_conformance.py::LLMResponseToolCallsTests::test_default_tool_calls_empty\ntests/test_tool_calling_conformance.py::LLMResponseToolCallsTests::test_tool_calls_populated\ntests/test_tool_calling_conformance.py::ToolCallingTierTests::test_failed_when_no_tool_call\ntests/test_tool_calling_conformance.py::ToolCallingTierTests::test_passed_when_tool_called\ntests/test_tool_calling_conformance.py::ToolCallingTierTests::test_skipped_when_not_configured\ntests/test_tool_calling_conformance.py::SafetyTierTests::test_failed_when_no_refusal\ntests/test_tool_calling_conformance.py::SafetyTierTests::test_passed_on_api_level_block\ntests/test_tool_calling_conformance.py::SafetyTierTests::test_passed_on_text_refusal\ntests/test_tool_calling_conformance.py::ConformanceTierEnumTests::test_all_tiers_present\ntests/test_tool_dependency_injection.py::TestToolFactory::test_create_read_file_handler\ntests/test_tool_dependency_injection.py::TestToolFactory::test_create_write_file_handler\ntests/test_tool_dependency_injection.py::TestToolFactory::test_create_edit_at_hash_handler\ntests/test_tool_dependency_injection.py::TestToolFactory::test_create_run_shell_handler\ntests/test_tool_dependency_injection.py::TestToolFactory::test_create_run_shell_argv_handler\ntests/test_tool_dependency_injection.py::TestToolFactory::test_update_config\ntests/test_tool_dependency_injection.py::TestToolConfigProvider::test_static_config_provider\ntests/test_tool_dependency_injection.py::TestToolConfigProvider::test_dynamic_config_provider\ntests/test_tool_dependency_injection.py::TestToolClasses::test_read_file_tool\ntests/test_tool_dependency_injection.py::TestToolClasses::test_write_file_tool\ntests/test_tool_dependency_injection.py::TestToolClasses::test_edit_at_hash_tool\ntests/test_tool_dependency_injection.py::TestToolClasses::test_run_shell_tool\ntests/test_tool_dependency_injection.py::TestToolClasses::test_run_shell_argv_tool\ntests/test_tool_dependency_injection.py::TestToolFactoryIntegration::test_registry_with_factory\ntests/test_tool_dependency_injection.py::TestBackwardCompatibility::test_build_workspace_tool_registry_without_provider\ntests/test_tool_dependency_injection.py::TestBackwardCompatibility::test_build_workspace_tool_registry_with_provider\ntests/test_tools.py::ToolRegistryRegistrationTests::test_execute_unknown_tool_raises_key_error\ntests/test_tools.py::ToolRegistryRegistrationTests::test_execute_validates_array_output_items\ntests/test_tools.py::ToolRegistryRegistrationTests::test_execute_validates_input_and_runs_handler\ntests/test_tools.py::ToolRegistryRegistrationTests::test_get_unknown_tool_raises_key_error\ntests/test_tools.py::ToolRegistryRegistrationTests::test_mcp_metadata_empty_registry\ntests/test_tools.py::ToolRegistryRegistrationTests::test_mcp_metadata_returns_list_of_tool_dicts\ntests/test_tools.py::ToolRegistryRegistrationTests::test_register_and_get_by_name\ntests/test_tools.py::ToolRegistryRegistrationTests::test_register_multiple_distinct_tools\ntests/test_tools.py::ToolRegistryRegistrationTests::test_register_rejects_duplicate_name\ntests/test_tools.py::ToolRegistryRegistrationTests::test_register_rejects_empty_description\ntests/test_tools.py::ToolRegistryRegistrationTests::test_register_rejects_empty_name\ntests/test_tools.py::ToolRegistryRegistrationTests::test_register_rejects_name_with_whitespace\ntests/test_tournament.py::TestApproachHintGenerator::test_generate_hints_optimize\ntests/test_tournament.py::TestApproachHintGenerator::test_generate_hints_refactor\ntests/test_tournament.py::TestApproachHintGenerator::test_generate_hints_default\ntests/test_tournament.py::TestTournamentComparator::test_compare_approaches\ntests/test_tournament.py::TestTournamentComparator::test_weight_validation\ntests/test_tournament.py::TestTournamentComparator::test_generate_comparison_table\ntests/test_tournament.py::TestTournamentComparator::test_recommend_winner\ntests/test_tournament.py::TestTournamentComparator::test_no_results\ntests/test_tournament.py::TestTournamentBranchManager::test_create_branches\ntests/test_tournament.py::TestTournamentBranchManager::test_cleanup_branches\ntests/test_tournament.py::TestTournamentBranchManager::test_disk_space_check\ntests/test_tournament_parallel_executor.py::test_parallel_executor_routes_through_subagent_manager\ntests/test_tournament_parallel_executor.py::test_parallel_executor_parallel_batch_indexes\ntests/test_tournament_parallel_executor.py::test_format_subagent_approval_batch_with_pending\ntests/test_tranche_b_governance.py::test_workspace_tool_lint_passes_built_in_registry\ntests/test_tranche_b_governance.py::test_mislabelled_read_only_write_tool_fails_lint\ntests/test_tranche_b_governance.py::test_plan_gate_blocks_write_without_plan\ntests/test_tranche_b_governance.py::test_plan_gate_allows_write_with_plan_contract\ntests/test_tranche_b_governance.py::test_plan_before_write_enforcement\ntests/test_tranche_b_governance.py::test_audit_completeness_detects_missing_terminal_event\ntests/test_tranche_b_governance.py::test_run_trace_and_export\ntests/test_tranche_b_governance.py::test_validation_profile_fast_skips_missing_tools\ntests/test_tranche_b_governance.py::test_stateful_non_idempotent_tools_require_governance_annotation\ntests/test_tranche_bc_governance.py::test_security_selftest_passes_on_clean_workspace\ntests/test_tranche_bc_governance.py::test_failure_card_ttl_and_invalidation\ntests/test_tranche_bc_governance.py::test_failure_card_auto_reviewer_never_blocks\ntests/test_tranche_bc_governance.py::test_mcp_trust_policy_persist_and_hook_blocks\ntests/test_tranche_bc_governance.py::test_mcp_trust_policy_missing_env_var_raises_error\ntests/test_tranche_bc_governance.py::test_mcp_trust_policy_invalid_key_format_raises_error\ntests/test_tranche_bc_governance.py::test_mcp_trust_policy_save_with_invalid_key_raises_error\ntests/test_tsb_format.py::RedactionRuleTests::test_redaction_rule_custom\ntests/test_tsb_format.py::RedactionRuleTests::test_redaction_rule_defaults\ntests/test_tsb_format.py::RedactionFilterTests::test_redact_audit_log\ntests/test_tsb_format.py::RedactionFilterTests::test_redact_dict\ntests/test_tsb_format.py::RedactionFilterTests::test_redact_list_with_dicts\ntests/test_tsb_format.py::RedactionFilterTests::test_redact_list_with_sensitive_data\ntests/test_tsb_format.py::RedactionFilterTests::test_redact_nested_dict\ntests/test_tsb_format.py::RedactionFilterTests::test_redact_nested_sensitive_key\ntests/test_tsb_format.py::RedactionFilterTests::test_redact_paths\ntests/test_tsb_format.py::RedactionFilterTests::test_redact_string\ntests/test_tsb_format.py::TSBMetadataTests::test_metadata_defaults\ntests/test_tsb_format.py::TSBAttestationTests::test_attestation_defaults\ntests/test_tsb_format.py::TSBBuilderTests::test_build_tsb_basic\ntests/test_tsb_format.py::TSBBuilderTests::test_build_tsb_with_redaction\ntests/test_tsb_format.py::TSBVerifierTests::test_extract_skill\ntests/test_tsb_format.py::TSBVerifierTests::test_verify_ssh_signature_rejected\ntests/test_tsb_format.py::TSBVerifierTests::test_verify_tampered_tsb\ntests/test_tsb_format.py::TSBVerifierTests::test_verify_unsigned_tsb_allowed_with_flag\ntests/test_tsb_format.py::TSBVerifierTests::test_verify_unsigned_tsb_rejected\ntests/test_tsb_format.py::TSBVerifierTests::test_verify_valid_tsb\ntests/test_tui.py::TUITests::test_chat_command_default_memory_limit\ntests/test_tui.py::TUITests::test_chat_command_forwards_params_to_run_tui\ntests/test_tui.py::TUITests::test_chat_command_handles_exception\ntests/test_tui.py::TUITests::test_chat_command_handles_keyboard_interrupt\ntests/test_tui.py::TUITests::test_cli_tui_help_in_parser\ntests/test_tui.py::TUITests::test_complete_file_paths_basic\ntests/test_tui.py::TUITests::test_complete_file_paths_no_at\ntests/test_tui.py::TUITests::test_complete_symbols_no_at\ntests/test_tui.py::TUITests::test_get_cached_symbols_empty_repo\ntests/test_tui.py::TUITests::test_memory_clear_invalid_index\ntests/test_tui.py::TUITests::test_memory_clear_no_args\ntests/test_tui.py::TUITests::test_memory_clear_out_of_range_index\ntests/test_tui.py::TUITests::test_memory_failures_no_cards\ntests/test_tui.py::TUITests::test_run_tui_function\ntests/test_tui.py::TUITests::test_run_tui_setup_flag_runs_wizard_before_repl\ntests/test_tui.py::TUITests::test_tui_agent_settings_and_ask\ntests/test_tui.py::TUITests::test_tui_approval_commands\ntests/test_tui.py::TUITests::test_tui_approve_requires_call_id\ntests/test_tui.py::TUITests::test_tui_approved_call_id_allows_exact_write\ntests/test_tui.py::TUITests::test_tui_ask_clarify_requires_task\ntests/test_tui.py::TUITests::test_tui_ask_clarify_stops_before_adapter_when_ambiguous\ntests/test_tui.py::TUITests::test_tui_ask_clarify_with_concrete_task_builds_spec\ntests/test_tui.py::TUITests::test_tui_ask_requires_task\ntests/test_tui.py::TUITests::test_tui_budget_shows_remaining\ntests/test_tui.py::TUITests::test_tui_budget_wired_to_agent_run\ntests/test_tui.py::TUITests::test_tui_checkpoint_not_created_yet_returns_false\ntests/test_tui.py::TUITests::test_tui_clarify_accepts_concrete_task\ntests/test_tui.py::TUITests::test_tui_clarify_command\ntests/test_tui.py::TUITests::test_tui_clarify_requires_task\ntests/test_tui.py::TUITests::test_tui_compact_stub\ntests/test_tui.py::TUITests::test_tui_cost_shows_session_cost\ntests/test_tui.py::TUITests::test_tui_destructive_invalid_arg\ntests/test_tui.py::TUITests::test_tui_destructive_toggle\ntests/test_tui.py::TUITests::test_tui_effort_low_sets_200_cents\ntests/test_tui.py::TUITests::test_tui_effort_requires_low_normal_high\ntests/test_tui.py::TUITests::test_tui_effort_sets_level_and_budget\ntests/test_tui.py::TUITests::test_tui_empty_command_continues\ntests/test_tui.py::TUITests::test_tui_eof_returns_zero\ntests/test_tui.py::TUITests::test_tui_file_watcher_start_stop\ntests/test_tui.py::TUITests::test_tui_handle_checkpoint_delegates\ntests/test_tui.py::TUITests::test_tui_handle_undo_delegates\ntests/test_tui.py::TUITests::test_tui_handles_doctor_smoke_query_and_exit\ntests/test_tui.py::TUITests::test_tui_heartbeat_negative_clamped\ntests/test_tui.py::TUITests::test_tui_heartbeat_non_numeric\ntests/test_tui.py::TUITests::test_tui_heartbeat_requires_one_arg\ntests/test_tui.py::TUITests::test_tui_heartbeat_with_number\ntests/test_tui.py::TUITests::test_tui_heartbeat_zero_disables\ntests/test_tui.py::TUITests::test_tui_help_command\ntests/test_tui.py::TUITests::test_tui_hitl_approval_denial_blocks_write\ntests/test_tui.py::TUITests::test_tui_hitl_approval_prompt_allows_write\ntests/test_tui.py::TUITests::test_tui_malformed_shlex_input\ntests/test_tui.py::TUITests::test_tui_memory_add_no_text\ntests/test_tui.py::TUITests::test_tui_memory_commands\ntests/test_tui.py::TUITests::test_tui_memory_list\ntests/test_tui.py::TUITests::test_tui_memory_no_subcommand\ntests/test_tui.py::TUITests::test_tui_memory_search_no_query\ntests/test_tui.py::TUITests::test_tui_memory_show_requires_id\ntests/test_tui.py::TUITests::test_tui_memory_unknown_subcommand\ntests/test_tui.py::TUITests::test_tui_model_default_clears_override\ntests/test_tui.py::TUITests::test_tui_model_requires_one_arg\ntests/test_tui.py::TUITests::test_tui_permission_invalid_mode\ntests/test_tui.py::TUITests::test_tui_permission_invalid_raises\ntests/test_tui.py::TUITests::test_tui_permission_mode\ntests/test_tui.py::TUITests::test_tui_pin_non_existent_file\ntests/test_tui.py::TUITests::test_tui_pin_requires_path\ntests/test_tui.py::TUITests::test_tui_pinned_empty\ntests/test_tui.py::TUITests::test_tui_preflight_command_uses_current_settings\ntests/test_tui.py::TUITests::test_tui_preflight_requires_task\ntests/test_tui.py::TUITests::test_tui_print_header_output\ntests/test_tui.py::TUITests::test_tui_progress_invalid_arg\ntests/test_tui.py::TUITests::test_tui_progress_sink_handles_run_failed\ntests/test_tui.py::TUITests::test_tui_progress_streams_audit_events\ntests/test_tui.py::TUITests::test_tui_provider_requires_one_arg\ntests/test_tui.py::TUITests::test_tui_provider_unknown_name\ntests/test_tui.py::TUITests::test_tui_query_reports_graphqlite_runtime_error\ntests/test_tui.py::TUITests::test_tui_query_requires_cypher\ntests/test_tui.py::TUITests::test_tui_resume_creates_precise_scoped_approval\ntests/test_tui.py::TUITests::test_tui_resume_replays_observations_for_non_destructive_run\ntests/test_tui.py::TUITests::test_tui_resume_replays_persisted_run_task\ntests/test_tui.py::TUITests::test_tui_resume_requires_run_id\ntests/test_tui.py::TUITests::test_tui_resume_unknown_run_id\ntests/test_tui.py::TUITests::test_tui_root_requires_one_arg\ntests/test_tui.py::TUITests::test_tui_route_model_invalid_arg\ntests/test_tui.py::TUITests::test_tui_route_model_preview_and_ask\ntests/test_tui.py::TUITests::test_tui_route_requires_task\ntests/test_tui.py::TUITests::test_tui_runs_command\ntests/test_tui.py::TUITests::test_tui_scoped_approval_exact_matching\ntests/test_tui.py::TUITests::test_tui_setup_command_writes_workspace_config\ntests/test_tui.py::TUITests::test_tui_show_requires_run_id\ntests/test_tui.py::TUITests::test_tui_show_with_valid_run\ntests/test_tui.py::TUITests::test_tui_slash_alias_help\ntests/test_tui.py::TUITests::test_tui_smoke_reports_graphqlite_runtime_error\ntests/test_tui.py::TUITests::test_tui_state_save_ignores_os_write_failures\ntests/test_tui.py::TUITests::test_tui_status_requires_run_id\ntests/test_tui.py::TUITests::test_tui_status_with_valid_run\ntests/test_tui.py::TUITests::test_tui_subagent_invalid_arg\ntests/test_tui.py::TUITests::test_tui_subagent_on_off\ntests/test_tui.py::TUITests::test_tui_unapprove_requires_call_id\ntests/test_tui.py::TUITests::test_tui_unconfigured_workspace_shows_setup_hint\ntests/test_tui.py::TUITests::test_tui_unknown_command\ntests/test_tui.py::TUITests::test_tui_unpin_requires_path\ntests/test_tui.py::TUITests::test_tui_use_requires_one_arg\ntests/test_tui.py::TUITests::test_tui_use_switches_database_label\ntests/test_tui_interactive.py::TestTUIInteractive::test_tui_falls_back_without_prompt_toolkit\ntests/test_tui_interactive.py::TestTUIInteractive::test_tui_uses_prompt_toolkit_session\ntests/test_tui_split_pane.py::test_split_pane_detection_large_terminal\ntests/test_tui_split_pane.py::test_split_pane_detection_small_terminal\ntests/test_tui_split_pane.py::test_split_pane_detection_error_handling\ntests/test_tui_split_pane.py::test_state_panel_output\ntests/test_ultrawork.py::UltraworkStoreTests::test_cli_ultrawork_list_returns_persisted_record\ntests/test_ultrawork.py::UltraworkStoreTests::test_cli_ultrawork_stop_marks_record_stopped\ntests/test_ultrawork.py::UltraworkStoreTests::test_list_marks_alive_then_dead\ntests/test_ultrawork.py::UltraworkStoreTests::test_show_unknown_worker_raises\ntests/test_ultrawork.py::UltraworkStoreTests::test_start_returns_record_and_persists_file\ntests/test_ultrawork.py::UltraworkStoreTests::test_stop_terminates_running_worker\ntests/test_use_case_dashboard.py::test_parse_matrix_markdown_extracts_rows\ntests/test_use_case_dashboard.py::test_render_html_includes_coverage_summary\ntests/test_use_case_matrix.py::test_parse_acceptance_test_files_extracts_test_names\ntests/test_use_case_matrix.py::test_build_matrix_marks_missing_tests\ntests/test_use_case_matrix.py::test_build_matrix_marks_covered_use_case\ntests/test_validation.py::TestValidationError::test_create_validation_error\ntests/test_validation.py::TestValidationResult::test_create_validation_result\ntests/test_validation.py::TestValidationResult::test_empty_result\ntests/test_validation.py::TestLSPToolDetection::test_detect_available_tools\ntests/test_validation.py::TestValidationRunner::test_runner_initialization\ntests/test_validation.py::TestValidationRunner::test_validate_file\ntests/test_validation.py::TestValidationRunner::test_timeout_handling\ntests/test_validation.py::TestValidationRunner::test_tool_not_found\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_clear\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_delete_disk_file\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_delete_file\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_file_exists_deleted\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_file_exists_disk\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_file_exists_memory\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_flush_creates_directories\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_flush_deletions\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_flush_to_disk\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_get_memory_size\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_list_files\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_nested_paths\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_read_fallback_to_disk\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_read_nonexistent\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_write_and_read\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_write_overrides_disk\ntests/test_vfs_sandbox.py::VFSSandboxTests::test_vfs_write_overwrite\ntests/test_wasm_runtime.py::test_is_wasm_available\ntests/test_wasm_runtime.py::test_wasm_runtime_init_without_wasmer\ntests/test_wasm_runtime.py::test_wasm_runtime_check_compatibility\ntests/test_wasm_runtime.py::test_wasm_runtime_check_compatibility_async\ntests/test_wasm_runtime.py::test_wasm_runtime_check_compatibility_socket\ntests/test_wasm_runtime.py::test_wasm_execution_result_creation\ntests/test_wasm_runtime.py::test_wasm_execution_result_with_error\ntests/test_wizard.py::test_redact_wizard_payload_hides_secret_keys\ntests/test_wizard.py::test_merge_env_exports_preserves_existing_keys\ntests/test_wizard.py::test_resolve_api_key_prefers_flag_then_env\ntests/test_wizard.py::test_run_first_session_setup_non_interactive\ntests/test_workspace_defaults_toml.py::test_parse_flat_toml_skips_comments_and_blank_lines\ntests/test_workspace_defaults_toml.py::test_parse_flat_toml_reads_strings_and_numbers\ntests/test_workspace_defaults_toml.py::test_load_workspace_defaults_env_overrides\ntests/test_workspace_defaults_toml.py::test_apply_workspace_defaults_require_provider_raises\ntests/test_workspace_defaults_toml.py::test_load_workspace_defaults_reads_toml_on_py310_path\ntests/test_workspace_tools.py::WorkspaceToolTests::test_apply_patch_rejects_missing_old_text\ntests/test_workspace_tools.py::WorkspaceToolTests::test_apply_patch_rejects_oversized_result\ntests/test_workspace_tools.py::WorkspaceToolTests::test_cli_workspace_tools_outputs_metadata\ntests/test_workspace_tools.py::WorkspaceToolTests::test_edit_at_hash_rejects_line_out_of_range\ntests/test_workspace_tools.py::WorkspaceToolTests::test_edit_at_hash_rejects_oversized_result\ntests/test_workspace_tools.py::WorkspaceToolTests::test_hash_anchored_read_and_edit\ntests/test_workspace_tools.py::WorkspaceToolTests::test_hash_edit_rejects_stale_hash\ntests/test_workspace_tools.py::WorkspaceToolTests::test_hybrid_index_and_search\ntests/test_workspace_tools.py::WorkspaceToolTests::test_hybrid_search_supports_custom_backend\ntests/test_workspace_tools.py::WorkspaceToolTests::test_list_files_rejects_non_positive_limit\ntests/test_workspace_tools.py::WorkspaceToolTests::test_list_files_truncates_when_limit_exceeded\ntests/test_workspace_tools.py::WorkspaceToolTests::test_path_escape_is_blocked\ntests/test_workspace_tools.py::WorkspaceToolTests::test_read_file_rejects_negative_max_bytes\ntests/test_workspace_tools.py::WorkspaceToolTests::test_read_list_search_and_patch_workspace_files\ntests/test_workspace_tools.py::WorkspaceToolTests::test_search_text_rejects_non_positive_limit\ntests/test_workspace_tools.py::WorkspaceToolTests::test_search_text_truncates_when_limit_exceeded\ntests/test_workspace_tools.py::WorkspaceToolTests::test_shell_and_git_status_tools\ntests/test_workspace_tools.py::WorkspaceToolTests::test_shell_inspect_rejects_mutating_command\ntests/test_workspace_tools.py::WorkspaceToolTests::test_shell_inspect_rejects_non_positive_timeout\ntests/test_workspace_tools.py::WorkspaceToolTests::test_shell_inspect_rejects_oversized_command\ntests/test_workspace_tools.py::WorkspaceToolTests::test_shell_inspect_rejects_timeout_above_ceiling\ntests/test_workspace_tools.py::WorkspaceToolTests::test_shell_inspect_rejects_unbalanced_quotes\ntests/test_workspace_tools.py::WorkspaceToolTests::test_shell_inspect_rejects_workspace_escape_path\ntests/test_workspace_tools.py::WorkspaceToolTests::test_shell_inspect_uses_quoted_arguments_without_shell_expansion\ntests/test_workspace_tools.py::WorkspaceToolTests::test_shell_mutate_rejects_timeout_above_ceiling\ntests/test_workspace_tools.py::WorkspaceToolTests::test_workspace_code_parse_routes_action\ntests/test_workspace_tools.py::WorkspaceToolTests::test_workspace_code_parse_validates_required_fields_per_action\ntests/test_workspace_tools.py::WorkspaceToolTests::test_workspace_knowledge_search_auto_fallback\ntests/test_workspace_tools.py::WorkspaceToolTests::test_write_file_can_create_directories\ntests/test_workspace_tools.py::WorkspaceToolTests::test_write_file_rejects_oversized_content\ntests/test_workspace_tools.py::GitignoreAndPaginationTests::test_agignore_also_respected\ntests/test_workspace_tools.py::GitignoreAndPaginationTests::test_list_files_offset_pagination\ntests/test_workspace_tools.py::GitignoreAndPaginationTests::test_list_files_respects_gitignore\ntests/test_workspace_tools.py::GitignoreAndPaginationTests::test_search_text_offset_pagination\ntests/test_workspace_tools.py::GitignoreAndPaginationTests::test_search_text_respects_gitignore\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_actual_redirect_operators_trigger_mutate\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_all_inspect_commands_classified_as_inspect\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_all_mutate_commands_classified_as_mutate\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_chained_commands_trigger_mutate\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_command_substitution_trigger_mutate\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_dangerous_git_flags_trigger_mutate\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_dangerous_rg_flags_trigger_mutate\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_quoted_operators_do_not_trigger_mutate\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_safe_inspect_commands_still_allowed\ntests/test_workspace_tools.py::ShellClassifierPropertyTests::test_workspace_escape_paths_trigger_mutate\ntests/test_zero_coverage_modules.py::TestACPRequest::test_custom_values\ntests/test_zero_coverage_modules.py::TestACPRequest::test_default_values\ntests/test_zero_coverage_modules.py::TestACPResponse::test_error_response\ntests/test_zero_coverage_modules.py::TestACPResponse::test_success_response\ntests/test_zero_coverage_modules.py::TestACPToolCall::test_custom_id\ntests/test_zero_coverage_modules.py::TestACPToolCall::test_defaults\ntests/test_zero_coverage_modules.py::TestACPToolResult::test_error\ntests/test_zero_coverage_modules.py::TestACPToolResult::test_success\ntests/test_zero_coverage_modules.py::TestACPServer::test_call_tool_handler_error\ntests/test_zero_coverage_modules.py::TestACPServer::test_call_tool_missing_name\ntests/test_zero_coverage_modules.py::TestACPServer::test_call_tool_not_found\ntests/test_zero_coverage_modules.py::TestACPServer::test_call_tool_not_initialized\ntests/test_zero_coverage_modules.py::TestACPServer::test_call_tool_success\ntests/test_zero_coverage_modules.py::TestACPServer::test_handle_request_initialize\ntests/test_zero_coverage_modules.py::TestACPServer::test_handle_request_internal_error\ntests/test_zero_coverage_modules.py::TestACPServer::test_handle_request_prompt_assemble\ntests/test_zero_coverage_modules.py::TestACPServer::test_handle_request_shutdown\ntests/test_zero_coverage_modules.py::TestACPServer::test_handle_request_tools_call\ntests/test_zero_coverage_modules.py::TestACPServer::test_handle_request_tools_list\ntests/test_zero_coverage_modules.py::TestACPServer::test_handle_request_unknown_method\ntests/test_zero_coverage_modules.py::TestACPServer::test_initialize\ntests/test_zero_coverage_modules.py::TestACPServer::test_initialize_default_version\ntests/test_zero_coverage_modules.py::TestACPServer::test_list_tools\ntests/test_zero_coverage_modules.py::TestACPServer::test_list_tools_not_initialized\ntests/test_zero_coverage_modules.py::TestACPServer::test_progress_audit_sink_emits_session_update\ntests/test_zero_coverage_modules.py::TestACPClient::test_send_request\ntests/test_zero_coverage_modules.py::TestCreateACPServer::test_factory\ntests/test_zero_coverage_modules.py::TestRunACPServer::test_handles_valid_json\ntests/test_zero_coverage_modules.py::TestRunACPServer::test_ignores_exception_lines\ntests/test_zero_coverage_modules.py::TestRunACPServer::test_ignores_invalid_json\ntests/test_zero_coverage_modules.py::TestACPIntegrationConfig::test_custom\ntests/test_zero_coverage_modules.py::TestACPIntegrationConfig::test_defaults\ntests/test_zero_coverage_modules.py::TestCreateACPToolDefinitions::test_handler_returns_status\ntests/test_zero_coverage_modules.py::TestCreateACPToolDefinitions::test_returns_dict\ntests/test_zero_coverage_modules.py::TestPluginType::test_values\ntests/test_zero_coverage_modules.py::TestPluginManifest::test_defaults\ntests/test_zero_coverage_modules.py::TestPluginManifest::test_full\ntests/test_zero_coverage_modules.py::TestPlugin::test_plugin_dataclass\ntests/test_zero_coverage_modules.py::TestCommandPlugin::test_with_aliases\ntests/test_zero_coverage_modules.py::TestAgentPlugin::test_defaults\ntests/test_zero_coverage_modules.py::TestPluginRegistry::test_command_aliases\ntests/test_zero_coverage_modules.py::TestPluginRegistry::test_get_unknown_agent\ntests/test_zero_coverage_modules.py::TestPluginRegistry::test_get_unknown_command\ntests/test_zero_coverage_modules.py::TestPluginRegistry::test_list_agents\ntests/test_zero_coverage_modules.py::TestPluginRegistry::test_list_commands\ntests/test_zero_coverage_modules.py::TestPluginRegistry::test_register_and_get_agent\ntests/test_zero_coverage_modules.py::TestPluginRegistry::test_register_and_get_command\ntests/test_zero_coverage_modules.py::TestDiscoverPlugins::test_duplicate_name_skipped\ntests/test_zero_coverage_modules.py::TestDiscoverPlugins::test_empty_dir\ntests/test_zero_coverage_modules.py::TestDiscoverPlugins::test_invalid_manifest_skipped\ntests/test_zero_coverage_modules.py::TestDiscoverPlugins::test_non_directory_entries_skipped\ntests/test_zero_coverage_modules.py::TestDiscoverPlugins::test_valid_plugin_discovered\ntests/test_zero_coverage_modules.py::TestLoadManifest::test_full_manifest\ntests/test_zero_coverage_modules.py::TestLoadManifest::test_minimal_manifest\ntests/test_zero_coverage_modules.py::TestRegisterBuiltinPlugins::test_agent_has_tools\ntests/test_zero_coverage_modules.py::TestRegisterBuiltinPlugins::test_registers_agents\ntests/test_zero_coverage_modules.py::TestPlanModeState::test_values\ntests/test_zero_coverage_modules.py::TestPlanModeConfig::test_defaults\ntests/test_zero_coverage_modules.py::TestPlanMode::test_cancel_exit\ntests/test_zero_coverage_modules.py::TestPlanMode::test_confirm_exit\ntests/test_zero_coverage_modules.py::TestPlanMode::test_disable_with_notes_enters_confirming\ntests/test_zero_coverage_modules.py::TestPlanMode::test_disable_without_notes\ntests/test_zero_coverage_modules.py::TestPlanMode::test_enable\ntests/test_zero_coverage_modules.py::TestPlanMode::test_enable_clears_notes\ntests/test_zero_coverage_modules.py::TestPlanMode::test_enable_default_reason\ntests/test_zero_coverage_modules.py::TestPlanMode::test_force_disable\ntests/test_zero_coverage_modules.py::TestPlanMode::test_initial_state\ntests/test_zero_coverage_modules.py::TestPlanModeToolBlocking::test_allows_read_when_enabled\ntests/test_zero_coverage_modules.py::TestPlanModeToolBlocking::test_allows_search_when_enabled\ntests/test_zero_coverage_modules.py::TestPlanModeToolBlocking::test_allows_tools_when_disabled\ntests/test_zero_coverage_modules.py::TestPlanModeToolBlocking::test_blocks_process_when_enabled\ntests/test_zero_coverage_modules.py::TestPlanModeToolBlocking::test_blocks_shell_when_enabled\ntests/test_zero_coverage_modules.py::TestPlanModeToolBlocking::test_blocks_terminal_when_enabled\ntests/test_zero_coverage_modules.py::TestPlanModeToolBlocking::test_blocks_write_tools\ntests/test_zero_coverage_modules.py::TestPlanModeToolBlocking::test_blocks_write_when_enabled\ntests/test_zero_coverage_modules.py::TestPlanModeNotes::test_add_note_when_disabled\ntests/test_zero_coverage_modules.py::TestPlanModeNotes::test_add_note_when_enabled\ntests/test_zero_coverage_modules.py::TestPlanModeNotes::test_exploration_summary_empty\ntests/test_zero_coverage_modules.py::TestPlanModeNotes::test_exploration_summary_with_notes\ntests/test_zero_coverage_modules.py::TestCreatePlanModeTools::test_enter_plan_mode_default_reason\ntests/test_zero_coverage_modules.py::TestCreatePlanModeTools::test_enter_plan_mode_handler\ntests/test_zero_coverage_modules.py::TestCreatePlanModeTools::test_exit_plan_mode_handler\ntests/test_zero_coverage_modules.py::TestCreatePlanModeTools::test_returns_definitions\ntests/test_zero_coverage_modules.py::TestCreatePlanModeTools::test_tool_descriptions\n\n=============================== warnings summary ===============================\nteaagent/sandbox/_parallel_experiment.py:19\n /Users/teee/dev/teaagent/teaagent/sandbox/_parallel_experiment.py:19: PytestCollectionWarning: cannot collect test class 'TestExecutionResult' because it has a __init__ constructor (from: tests/test_quality_matrix.py)\n @dataclass(frozen=True)\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n2932 tests collected in 0.57s\n",
"stderr": ""
}
]
},
"commands": [],
"artifacts": [
{
"path": "docs/acceptance.md",
"sha256": "16aff74c5b5d3f71f21b91dd8e4da33d1779e54a2c5c907d5468c00a8af8b3e4",
"bytes": 17384
},
{
"path": "docs/use-case-matrix.md",
"sha256": "618af8e8a18c543a2d4af3f47abdd70bb5e65a5cf6ee5023e7fb548c3733c884",
"bytes": 3791
},
{
"path": "docs/use-case-matrix.html",
"sha256": "42b410e83b575c256e8cb6ed5c6bf501d964aae6b5533e6a6f9750222d1c55b2",
"bytes": 7002
},
{
"path": "docs/ergonomics-kpi.json",
"sha256": "a2e338e397453e2a93e81f15434261d9f21a4eb4f1e68c90be67ea3667e3937e",
"bytes": 120
}
]
}