chore: remove redundant pytest.mark.timeout(30) markers#740
Conversation
pyproject.toml sets timeout = 30 globally for all tests. Remove the 545 redundant per-file pytest.mark.timeout(30) markers that duplicate this default. Keep the 2 intentional timeout(60) overrides for Docker sandbox and real LLM integration tests. Add a pre-commit hook (no-redundant-timeout) to prevent re-introduction. Closes #685 Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Pre-reviewed by 3 agents, 3 findings addressed: - Add no-em-dashes and no-redundant-timeout to pre-commit hooks list - Clarify timeout is global-only in Testing section - Use \s* in hook regex to catch whitespace variants Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
WalkthroughThis pull request removes 299+ redundant Suggested labels
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request streamlines the test suite by eliminating unnecessary explicit timeout markers, relying instead on the globally configured pytest timeout. It also introduces a new pre-commit hook to enforce this standard moving forward, ensuring code quality and consistency. The changes improve the clarity and maintainability of the test codebase and its documentation. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.pre-commit-config.yaml:
- Line 5: Remove "no-redundant-timeout" from the ci skip list in
.pre-commit-config.yaml so pre-commit.ci will run that check; specifically edit
the skip array (the key containing commitizen, gitleaks, hadolint-docker, etc.)
and delete the "no-redundant-timeout" entry while leaving the other entries
unchanged.
In `@scripts/check_no_redundant_timeout.py`:
- Around line 19-27: The loop that opens user-supplied paths (using sys.argv[1:]
and Path(path).open in the for loop) should validate each path before reading to
mitigate CodeQL warnings; update the for-loop to skip any absolute paths or
paths that escape the repo (e.g., if Path(path).is_absolute() or ".." in
Path(path).parts) or alternatively resolve the path and ensure it is inside the
repository root (using Path.resolve() and catching ValueError from
Path.resolve().relative_to(repo_root)); keep the existing UnicodeDecodeError and
OSError handling but perform this lightweight check before attempting to open
the file.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: d6732be5-be51-406f-a75c-17f6fb7d02c9
📒 Files selected for processing (300)
.pre-commit-config.yamlCLAUDE.mdscripts/check_no_redundant_timeout.pytests/e2e/test_single_agent_e2e.pytests/integration/communication/test_delegation_integration.pytests/integration/communication/test_meeting_integration.pytests/integration/engine/test_agent_engine_integration.pytests/integration/engine/test_coordination_wiring.pytests/integration/engine/test_crash_recovery.pytests/integration/engine/test_error_taxonomy_integration.pytests/integration/engine/test_graceful_shutdown.pytests/integration/engine/test_multi_agent_delegation.pytests/integration/engine/test_workspace_integration.pytests/integration/memory/test_mem0_backend.pytests/integration/memory/test_retriever_integration.pytests/integration/observability/test_sink_routing_integration.pytests/integration/persistence/test_sqlite_integration.pytests/integration/providers/test_error_scenarios.pytests/integration/providers/test_ollama_pipeline.pytests/integration/providers/test_openrouter_pipeline.pytests/integration/providers/test_provider_pipeline.pytests/integration/providers/test_retry_integration.pytests/integration/providers/test_tool_calling_pipeline.pytests/integration/tools/test_docker_sandbox_integration.pytests/integration/tools/test_mcp_integration.pytests/integration/tools/test_sandbox_integration.pytests/unit/api/conftest.pytests/unit/api/controllers/test_approvals_helpers.pytests/unit/api/controllers/test_backup.pytests/unit/api/controllers/test_coordination.pytests/unit/api/controllers/test_providers.pytests/unit/api/test_auto_wire_meetings.pytests/unit/api/test_server.pytests/unit/backup/conftest.pytests/unit/backup/test_config.pytests/unit/backup/test_errors.pytests/unit/backup/test_handlers/test_config_handler.pytests/unit/backup/test_handlers/test_memory_handler.pytests/unit/backup/test_handlers/test_persistence_handler.pytests/unit/backup/test_models.pytests/unit/backup/test_retention.pytests/unit/backup/test_scheduler.pytests/unit/backup/test_service.pytests/unit/budget/conftest.pytests/unit/budget/test_billing.pytests/unit/budget/test_call_category.pytests/unit/budget/test_category_analytics.pytests/unit/budget/test_config.pytests/unit/budget/test_coordination_config.pytests/unit/budget/test_coordination_metrics.pytests/unit/budget/test_cost_record.pytests/unit/budget/test_cost_tiers.pytests/unit/budget/test_degradation.pytests/unit/budget/test_enforcer.pytests/unit/budget/test_enforcer_degradation.pytests/unit/budget/test_enforcer_quota.pytests/unit/budget/test_enums.pytests/unit/budget/test_errors.pytests/unit/budget/test_hierarchy.pytests/unit/budget/test_quota.pytests/unit/budget/test_quota_tracker.pytests/unit/budget/test_spending_summary.pytests/unit/budget/test_tracker.pytests/unit/communication/conflict_resolution/test_authority_strategy.pytests/unit/communication/conflict_resolution/test_config.pytests/unit/communication/conflict_resolution/test_debate_strategy.pytests/unit/communication/conflict_resolution/test_helpers.pytests/unit/communication/conflict_resolution/test_human_strategy.pytests/unit/communication/conflict_resolution/test_hybrid_strategy.pytests/unit/communication/conflict_resolution/test_models.pytests/unit/communication/conflict_resolution/test_service.pytests/unit/communication/delegation/test_authority.pytests/unit/communication/delegation/test_hierarchy.pytests/unit/communication/delegation/test_models.pytests/unit/communication/delegation/test_service.pytests/unit/communication/loop_prevention/test_ancestry.pytests/unit/communication/loop_prevention/test_circuit_breaker.pytests/unit/communication/loop_prevention/test_dedup.pytests/unit/communication/loop_prevention/test_depth.pytests/unit/communication/loop_prevention/test_guard.pytests/unit/communication/loop_prevention/test_rate_limit.pytests/unit/communication/meeting/test_config.pytests/unit/communication/meeting/test_enums.pytests/unit/communication/meeting/test_errors.pytests/unit/communication/meeting/test_models.pytests/unit/communication/meeting/test_orchestrator.pytests/unit/communication/meeting/test_parsing.pytests/unit/communication/meeting/test_participant.pytests/unit/communication/meeting/test_position_papers.pytests/unit/communication/meeting/test_prompts.pytests/unit/communication/meeting/test_protocol.pytests/unit/communication/meeting/test_round_robin.pytests/unit/communication/meeting/test_structured_phases.pytests/unit/communication/meeting/test_token_tracker.pytests/unit/communication/test_bus_memory.pytests/unit/communication/test_channel.pytests/unit/communication/test_config.pytests/unit/communication/test_dispatcher.pytests/unit/communication/test_enums.pytests/unit/communication/test_errors.pytests/unit/communication/test_handler.pytests/unit/communication/test_message.pytests/unit/communication/test_messenger.pytests/unit/communication/test_subscription.pytests/unit/config/conftest.pytests/unit/config/test_bootstrap_logging.pytests/unit/config/test_utils_properties.pytests/unit/core/test_agent.pytests/unit/core/test_artifact.pytests/unit/core/test_company.pytests/unit/core/test_enums.pytests/unit/core/test_personality.pytests/unit/core/test_project.pytests/unit/core/test_role.pytests/unit/core/test_role_catalog.pytests/unit/core/test_task.pytests/unit/core/test_task_transitions.pytests/unit/core/test_types.pytests/unit/core/test_validation.pytests/unit/engine/checkpoint/test_callback_factory.pytests/unit/engine/checkpoint/test_models.pytests/unit/engine/checkpoint/test_resume.pytests/unit/engine/checkpoint/test_strategy.pytests/unit/engine/compaction/test_summarizer.pytests/unit/engine/stagnation/test_properties.pytests/unit/engine/task_engine_helpers.pytests/unit/engine/test_agent_engine.pytests/unit/engine/test_agent_engine_auto_loop.pytests/unit/engine/test_agent_engine_budget.pytests/unit/engine/test_agent_engine_degradation.pytests/unit/engine/test_agent_engine_errors.pytests/unit/engine/test_agent_engine_lifecycle.pytests/unit/engine/test_agent_state.pytests/unit/engine/test_approval_gate.pytests/unit/engine/test_approval_gate_models.pytests/unit/engine/test_coordination_factory.pytests/unit/engine/test_coordination_section_config.pytests/unit/engine/test_hybrid_loop.pytests/unit/engine/test_loop_helpers_approval.pytests/unit/engine/test_loop_selector.pytests/unit/engine/test_plan_helpers.pytests/unit/engine/test_plan_parsing.pytests/unit/engine/test_policy_validation.pytests/unit/engine/test_prompt.pytests/unit/engine/test_prompt_template.pytests/unit/engine/test_recovery.pytests/unit/engine/test_recovery_checkpoint_fields.pytests/unit/engine/test_review_gate.pytests/unit/engine/test_sanitization.pytests/unit/engine/test_security_factory.pytests/unit/engine/test_shutdown.pytests/unit/engine/test_task_execution.pytests/unit/engine/test_task_sync.pytests/unit/hr/performance/test_models.pytests/unit/hr/performance/test_tracker.pytests/unit/hr/promotion/test_config.pytests/unit/hr/promotion/test_models.pytests/unit/hr/promotion/test_seniority_approval_strategy.pytests/unit/hr/promotion/test_seniority_model_mapping.pytests/unit/hr/promotion/test_threshold_evaluator.pytests/unit/memory/backends/mem0/test_adapter.pytests/unit/memory/backends/mem0/test_adapter_crud.pytests/unit/memory/backends/mem0/test_adapter_shared.pytests/unit/memory/backends/mem0/test_config.pytests/unit/memory/backends/mem0/test_mappers.pytests/unit/memory/consolidation/test_abstractive.pytests/unit/memory/consolidation/test_archival.pytests/unit/memory/consolidation/test_config.pytests/unit/memory/consolidation/test_density.pytests/unit/memory/consolidation/test_dual_mode_strategy.pytests/unit/memory/consolidation/test_extractive.pytests/unit/memory/consolidation/test_models.pytests/unit/memory/consolidation/test_retention.pytests/unit/memory/consolidation/test_service.pytests/unit/memory/consolidation/test_strategy.pytests/unit/memory/org/test_access_control.pytests/unit/memory/org/test_config.pytests/unit/memory/org/test_errors.pytests/unit/memory/org/test_factory.pytests/unit/memory/org/test_hybrid_backend.pytests/unit/memory/org/test_models.pytests/unit/memory/org/test_prompt_integration.pytests/unit/memory/org/test_protocol.pytests/unit/memory/org/test_store.pytests/unit/memory/test_capabilities.pytests/unit/memory/test_config.pytests/unit/memory/test_errors.pytests/unit/memory/test_factory.pytests/unit/memory/test_filter.pytests/unit/memory/test_formatter.pytests/unit/memory/test_init.pytests/unit/memory/test_injection.pytests/unit/memory/test_models.pytests/unit/memory/test_protocol.pytests/unit/memory/test_ranking.pytests/unit/memory/test_retrieval_config.pytests/unit/memory/test_retriever.pytests/unit/memory/test_shared.pytests/unit/memory/test_store_guard.pytests/unit/observability/test_config.pytests/unit/observability/test_correlation.pytests/unit/observability/test_correlation_async.pytests/unit/observability/test_enums.pytests/unit/observability/test_events.pytests/unit/observability/test_logger.pytests/unit/observability/test_processors.pytests/unit/observability/test_setup.pytests/unit/observability/test_sink_routing.pytests/unit/observability/test_sinks.pytests/unit/persistence/conftest.pytests/unit/persistence/sqlite/test_agent_state_repo.pytests/unit/persistence/sqlite/test_checkpoint_repo.pytests/unit/persistence/sqlite/test_heartbeat_repo.pytests/unit/providers/management/test_service.pytests/unit/providers/management/test_service_allowlist.pytests/unit/providers/management/test_service_discovery.pytests/unit/providers/resilience/test_config.pytests/unit/providers/resilience/test_errors.pytests/unit/providers/resilience/test_rate_limiter.pytests/unit/providers/resilience/test_retry.pytests/unit/providers/routing/test_errors.pytests/unit/providers/routing/test_models.pytests/unit/providers/routing/test_resolver.pytests/unit/providers/routing/test_router.pytests/unit/providers/routing/test_strategies.pytests/unit/providers/test_base_provider.pytests/unit/providers/test_capabilities.pytests/unit/providers/test_discovery.pytests/unit/providers/test_discovery_policy.pytests/unit/providers/test_enums.pytests/unit/providers/test_errors.pytests/unit/providers/test_family.pytests/unit/providers/test_models.pytests/unit/providers/test_protocol.pytests/unit/providers/test_url_utils.pytests/unit/security/rules/test_credential_detector.pytests/unit/security/rules/test_custom_policy_rule.pytests/unit/security/rules/test_data_leak_detector.pytests/unit/security/rules/test_destructive_op_detector.pytests/unit/security/rules/test_engine.pytests/unit/security/rules/test_path_traversal_detector.pytests/unit/security/rules/test_policy_validator.pytests/unit/security/rules/test_risk_classifier.pytests/unit/security/rules/test_utils.pytests/unit/security/test_action_type_mapping.pytests/unit/security/test_action_types.pytests/unit/security/test_audit.pytests/unit/security/test_config.pytests/unit/security/test_llm_evaluator.pytests/unit/security/test_llm_fallback_integration.pytests/unit/security/test_models.pytests/unit/security/test_output_scan_policy.pytests/unit/security/test_output_scan_policy_factory.pytests/unit/security/test_output_scanner.pytests/unit/security/test_service.pytests/unit/security/timeout/test_park_service.pytests/unit/security/timeout/test_parked_context.pytests/unit/security/timeout/test_scheduler.pytests/unit/security/timeout/test_timeout_checker.pytests/unit/security/trust/test_config.pytests/unit/security/trust/test_disabled_strategy.pytests/unit/security/trust/test_enums.pytests/unit/security/trust/test_milestone_strategy.pytests/unit/security/trust/test_models.pytests/unit/security/trust/test_per_category_strategy.pytests/unit/security/trust/test_service.pytests/unit/security/trust/test_weighted_strategy.pytests/unit/settings/test_backup_subscriber.pytests/unit/settings/test_models.pytests/unit/templates/test_errors.pytests/unit/templates/test_inheritance.pytests/unit/templates/test_loader.pytests/unit/templates/test_renderer.pytests/unit/templates/test_schema.pytests/unit/tools/file_system/test_base_fs_tool.pytests/unit/tools/file_system/test_delete_file.pytests/unit/tools/file_system/test_edit_file.pytests/unit/tools/file_system/test_list_directory.pytests/unit/tools/file_system/test_path_validator.pytests/unit/tools/file_system/test_read_file.pytests/unit/tools/file_system/test_write_file.pytests/unit/tools/git/test_git_clone.pytests/unit/tools/git/test_git_sandbox_integration.pytests/unit/tools/git/test_git_tools.pytests/unit/tools/git/test_git_url_validator.pytests/unit/tools/git/test_git_url_validator_toctou.pytests/unit/tools/mcp/test_bridge_tool.pytests/unit/tools/mcp/test_cache.pytests/unit/tools/mcp/test_client.pytests/unit/tools/mcp/test_config.pytests/unit/tools/mcp/test_errors.pytests/unit/tools/mcp/test_factory.pytests/unit/tools/mcp/test_result_mapper.pytests/unit/tools/sandbox/test_allowed_hosts.pytests/unit/tools/sandbox/test_config.pytests/unit/tools/sandbox/test_docker_config.pytests/unit/tools/sandbox/test_docker_sandbox.pytests/unit/tools/sandbox/test_errors.pytests/unit/tools/sandbox/test_protocol.pytests/unit/tools/sandbox/test_result.py
💤 Files with no reviewable changes (239)
- tests/integration/communication/test_meeting_integration.py
- tests/integration/observability/test_sink_routing_integration.py
- tests/unit/api/controllers/test_providers.py
- tests/unit/api/test_auto_wire_meetings.py
- tests/unit/budget/conftest.py
- tests/unit/budget/test_call_category.py
- tests/unit/budget/test_coordination_metrics.py
- tests/unit/budget/test_degradation.py
- tests/unit/budget/test_enforcer_quota.py
- tests/unit/budget/test_enums.py
- tests/unit/budget/test_errors.py
- tests/unit/budget/test_hierarchy.py
- tests/unit/budget/test_spending_summary.py
- tests/unit/budget/test_tracker.py
- tests/unit/communication/conflict_resolution/test_debate_strategy.py
- tests/unit/communication/conflict_resolution/test_helpers.py
- tests/unit/communication/conflict_resolution/test_human_strategy.py
- tests/unit/communication/conflict_resolution/test_hybrid_strategy.py
- tests/unit/communication/conflict_resolution/test_models.py
- tests/unit/communication/delegation/test_authority.py
- tests/unit/communication/delegation/test_hierarchy.py
- tests/unit/communication/delegation/test_service.py
- tests/unit/communication/loop_prevention/test_dedup.py
- tests/unit/communication/loop_prevention/test_guard.py
- tests/unit/communication/loop_prevention/test_rate_limit.py
- tests/unit/communication/meeting/test_config.py
- tests/unit/communication/meeting/test_enums.py
- tests/unit/communication/meeting/test_errors.py
- tests/unit/communication/meeting/test_orchestrator.py
- tests/unit/communication/meeting/test_participant.py
- tests/unit/communication/meeting/test_position_papers.py
- tests/unit/communication/meeting/test_prompts.py
- tests/unit/communication/meeting/test_protocol.py
- tests/unit/communication/meeting/test_round_robin.py
- tests/unit/communication/meeting/test_structured_phases.py
- tests/unit/communication/meeting/test_token_tracker.py
- tests/unit/communication/test_channel.py
- tests/unit/communication/test_dispatcher.py
- tests/unit/communication/test_enums.py
- tests/unit/communication/test_errors.py
- tests/unit/communication/test_handler.py
- tests/unit/communication/test_message.py
- tests/unit/communication/test_messenger.py
- tests/unit/config/conftest.py
- tests/unit/config/test_bootstrap_logging.py
- tests/unit/config/test_utils_properties.py
- tests/unit/core/test_artifact.py
- tests/unit/core/test_agent.py
- tests/unit/core/test_company.py
- tests/unit/core/test_enums.py
- tests/unit/core/test_personality.py
- tests/unit/core/test_project.py
- tests/unit/core/test_role.py
- tests/unit/core/test_task.py
- tests/unit/core/test_task_transitions.py
- tests/unit/core/test_types.py
- tests/unit/engine/checkpoint/test_callback_factory.py
- tests/unit/engine/checkpoint/test_models.py
- tests/unit/engine/checkpoint/test_resume.py
- tests/unit/engine/checkpoint/test_strategy.py
- tests/unit/engine/compaction/test_summarizer.py
- tests/unit/engine/stagnation/test_properties.py
- tests/unit/engine/task_engine_helpers.py
- tests/unit/engine/test_agent_engine.py
- tests/unit/engine/test_agent_engine_budget.py
- tests/unit/engine/test_agent_engine_degradation.py
- tests/unit/engine/test_agent_engine_errors.py
- tests/unit/engine/test_agent_engine_lifecycle.py
- tests/unit/engine/test_agent_state.py
- tests/unit/engine/test_coordination_section_config.py
- tests/unit/engine/test_loop_selector.py
- tests/unit/engine/test_plan_helpers.py
- tests/unit/engine/test_plan_parsing.py
- tests/unit/engine/test_prompt.py
- tests/unit/engine/test_prompt_template.py
- tests/unit/engine/test_recovery.py
- tests/unit/engine/test_recovery_checkpoint_fields.py
- tests/unit/engine/test_review_gate.py
- tests/unit/engine/test_sanitization.py
- tests/unit/engine/test_shutdown.py
- tests/unit/engine/test_task_execution.py
- tests/unit/engine/test_task_sync.py
- tests/unit/hr/performance/test_models.py
- tests/unit/hr/performance/test_tracker.py
- tests/unit/memory/backends/mem0/test_adapter.py
- tests/unit/memory/backends/mem0/test_adapter_crud.py
- tests/unit/memory/backends/mem0/test_adapter_shared.py
- tests/unit/memory/backends/mem0/test_config.py
- tests/unit/memory/backends/mem0/test_mappers.py
- tests/unit/memory/consolidation/test_abstractive.py
- tests/unit/memory/consolidation/test_config.py
- tests/unit/memory/consolidation/test_density.py
- tests/unit/memory/consolidation/test_dual_mode_strategy.py
- tests/unit/memory/consolidation/test_extractive.py
- tests/unit/memory/consolidation/test_archival.py
- tests/unit/memory/consolidation/test_models.py
- tests/unit/memory/consolidation/test_retention.py
- tests/unit/memory/consolidation/test_service.py
- tests/unit/memory/consolidation/test_strategy.py
- tests/unit/memory/org/test_access_control.py
- tests/unit/memory/org/test_errors.py
- tests/unit/memory/org/test_factory.py
- tests/unit/memory/org/test_config.py
- tests/unit/memory/org/test_hybrid_backend.py
- tests/unit/memory/org/test_models.py
- tests/unit/memory/org/test_prompt_integration.py
- tests/unit/memory/org/test_protocol.py
- tests/unit/memory/test_capabilities.py
- tests/unit/memory/test_config.py
- tests/unit/memory/org/test_store.py
- tests/unit/memory/test_errors.py
- tests/unit/memory/test_factory.py
- tests/unit/memory/test_filter.py
- tests/unit/memory/test_formatter.py
- tests/unit/memory/test_init.py
- tests/unit/memory/test_injection.py
- tests/unit/memory/test_protocol.py
- tests/unit/memory/test_models.py
- tests/unit/memory/test_ranking.py
- tests/unit/memory/test_retrieval_config.py
- tests/unit/memory/test_retriever.py
- tests/unit/memory/test_shared.py
- tests/unit/memory/test_store_guard.py
- tests/unit/observability/test_config.py
- tests/unit/observability/test_correlation.py
- tests/unit/observability/test_correlation_async.py
- tests/unit/observability/test_enums.py
- tests/unit/observability/test_logger.py
- tests/unit/observability/test_processors.py
- tests/unit/observability/test_setup.py
- tests/unit/observability/test_sink_routing.py
- tests/unit/observability/test_sinks.py
- tests/unit/persistence/conftest.py
- tests/unit/persistence/sqlite/test_agent_state_repo.py
- tests/unit/persistence/sqlite/test_checkpoint_repo.py
- tests/unit/persistence/sqlite/test_heartbeat_repo.py
- tests/unit/providers/resilience/test_config.py
- tests/integration/communication/test_delegation_integration.py
- tests/integration/engine/test_graceful_shutdown.py
- tests/integration/memory/test_mem0_backend.py
- tests/integration/memory/test_retriever_integration.py
- tests/integration/providers/test_retry_integration.py
- tests/integration/tools/test_docker_sandbox_integration.py
- tests/unit/api/conftest.py
- tests/unit/api/controllers/test_backup.py
- tests/unit/api/controllers/test_coordination.py
- tests/unit/backup/conftest.py
- tests/unit/backup/test_config.py
- tests/unit/backup/test_handlers/test_config_handler.py
- tests/unit/backup/test_handlers/test_persistence_handler.py
- tests/unit/backup/test_models.py
- tests/unit/backup/test_retention.py
- tests/unit/backup/test_scheduler.py
- tests/unit/backup/test_service.py
- tests/unit/budget/test_billing.py
- tests/unit/budget/test_category_analytics.py
- tests/unit/budget/test_config.py
- tests/unit/budget/test_coordination_config.py
- tests/unit/budget/test_cost_record.py
- tests/unit/budget/test_cost_tiers.py
- tests/unit/budget/test_enforcer.py
- tests/unit/budget/test_enforcer_degradation.py
- tests/unit/budget/test_quota_tracker.py
- tests/unit/communication/conflict_resolution/test_authority_strategy.py
- tests/unit/communication/conflict_resolution/test_config.py
- tests/unit/communication/conflict_resolution/test_service.py
- tests/unit/communication/delegation/test_models.py
- tests/unit/communication/loop_prevention/test_circuit_breaker.py
- tests/unit/communication/loop_prevention/test_ancestry.py
- tests/unit/communication/loop_prevention/test_depth.py
- tests/unit/communication/meeting/test_models.py
- tests/unit/communication/meeting/test_parsing.py
- tests/unit/communication/test_bus_memory.py
- tests/unit/communication/test_config.py
- tests/unit/engine/test_agent_engine_auto_loop.py
- tests/unit/engine/test_hybrid_loop.py
- tests/unit/providers/test_enums.py
- tests/unit/providers/resilience/test_errors.py
- tests/unit/providers/management/test_service.py
- tests/unit/providers/test_capabilities.py
- tests/unit/providers/test_base_provider.py
- tests/unit/providers/test_protocol.py
- tests/unit/security/rules/test_credential_detector.py
- tests/unit/security/rules/test_policy_validator.py
- tests/unit/providers/test_errors.py
- tests/unit/security/rules/test_destructive_op_detector.py
- tests/unit/providers/test_family.py
- tests/unit/security/rules/test_data_leak_detector.py
- tests/unit/security/rules/test_engine.py
- tests/unit/security/rules/test_utils.py
- tests/unit/security/rules/test_path_traversal_detector.py
- tests/unit/security/rules/test_risk_classifier.py
- tests/unit/security/test_config.py
- tests/unit/security/test_action_type_mapping.py
- tests/unit/security/test_action_types.py
- tests/unit/providers/resilience/test_retry.py
- tests/unit/security/test_audit.py
- tests/unit/security/test_output_scan_policy_factory.py
- tests/unit/security/test_llm_fallback_integration.py
- tests/unit/security/timeout/test_park_service.py
- tests/unit/security/test_output_scan_policy.py
- tests/unit/security/test_models.py
- tests/unit/security/test_output_scanner.py
- tests/unit/security/timeout/test_timeout_checker.py
- tests/unit/security/timeout/test_scheduler.py
- tests/unit/security/trust/test_disabled_strategy.py
- tests/unit/security/test_llm_evaluator.py
- tests/unit/security/test_service.py
- tests/unit/security/trust/test_enums.py
- tests/unit/security/timeout/test_parked_context.py
- tests/unit/security/trust/test_config.py
- tests/unit/providers/test_models.py
- tests/unit/security/trust/test_models.py
- tests/unit/backup/test_handlers/test_memory_handler.py
- tests/unit/budget/test_quota.py
- tests/unit/core/test_role_catalog.py
- tests/unit/engine/test_coordination_factory.py
- tests/unit/templates/test_inheritance.py
- tests/unit/tools/file_system/test_read_file.py
- tests/unit/security/trust/test_weighted_strategy.py
- tests/unit/security/trust/test_service.py
- tests/unit/templates/test_errors.py
- tests/unit/tools/file_system/test_delete_file.py
- tests/unit/tools/git/test_git_clone.py
- tests/unit/templates/test_schema.py
- tests/unit/templates/test_loader.py
- tests/unit/tools/file_system/test_edit_file.py
- tests/unit/templates/test_renderer.py
- tests/unit/security/trust/test_milestone_strategy.py
- tests/unit/tools/git/test_git_url_validator.py
- tests/unit/backup/test_errors.py
- tests/unit/tools/file_system/test_list_directory.py
- tests/unit/settings/test_backup_subscriber.py
- tests/unit/tools/git/test_git_tools.py
- tests/unit/tools/file_system/test_base_fs_tool.py
- tests/unit/security/trust/test_per_category_strategy.py
- tests/unit/tools/file_system/test_path_validator.py
- tests/unit/tools/file_system/test_write_file.py
- tests/unit/tools/git/test_git_url_validator_toctou.py
| autofix_prs: true | ||
| autofix_commit_msg: "style: auto-fix pre-commit hooks" | ||
| skip: [commitizen, gitleaks, hadolint-docker, no-em-dashes, mypy, pytest-unit, golangci-lint, go-vet, go-test] | ||
| skip: [commitizen, gitleaks, hadolint-docker, no-em-dashes, no-redundant-timeout, mypy, pytest-unit, golangci-lint, go-vet, go-test] |
There was a problem hiding this comment.
Do not skip no-redundant-timeout in pre-commit.ci.
Adding no-redundant-timeout to ci.skip disables the new guard in pre-commit.ci, which undercuts the “prevent re-introduction” objective for PR automation paths.
Suggested fix
-ci:
- autoupdate_schedule: never
- autofix_prs: true
- autofix_commit_msg: "style: auto-fix pre-commit hooks"
- skip: [commitizen, gitleaks, hadolint-docker, no-em-dashes, no-redundant-timeout, mypy, pytest-unit, golangci-lint, go-vet, go-test]
+ci:
+ autoupdate_schedule: never
+ autofix_prs: true
+ autofix_commit_msg: "style: auto-fix pre-commit hooks"
+ skip: [commitizen, gitleaks, hadolint-docker, no-em-dashes, mypy, pytest-unit, golangci-lint, go-vet, go-test]📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| skip: [commitizen, gitleaks, hadolint-docker, no-em-dashes, no-redundant-timeout, mypy, pytest-unit, golangci-lint, go-vet, go-test] | |
| ci: | |
| autoupdate_schedule: never | |
| autofix_prs: true | |
| autofix_commit_msg: "style: auto-fix pre-commit hooks" | |
| skip: [commitizen, gitleaks, hadolint-docker, no-em-dashes, mypy, pytest-unit, golangci-lint, go-vet, go-test] |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.pre-commit-config.yaml at line 5, Remove "no-redundant-timeout" from the ci
skip list in .pre-commit-config.yaml so pre-commit.ci will run that check;
specifically edit the skip array (the key containing commitizen, gitleaks,
hadolint-docker, etc.) and delete the "no-redundant-timeout" entry while leaving
the other entries unchanged.
There was a problem hiding this comment.
Code Review
This pull request is a nice cleanup, removing a large number of redundant pytest.mark.timeout(30) markers and adding a pre-commit hook to prevent them from being re-introduced. The changes to the test files and documentation are all correct and align with the goal of using a global timeout configuration. However, the new pre-commit hook script contains a syntax error that will prevent it from running correctly. I've left a comment with a fix for this critical issue.
| if _PATTERN.search(line): | ||
| print(f"{path}:{lineno}: {line.rstrip()}") | ||
| found = True | ||
| except UnicodeDecodeError, OSError: |
There was a problem hiding this comment.
This except syntax is for Python 2. Since the script is intended for Python 3 (as indicated by the shebang #!/usr/bin/env python3), this will raise a SyntaxError. To catch multiple exceptions in Python 3, you should use a tuple.
| except UnicodeDecodeError, OSError: | |
| except (UnicodeDecodeError, OSError): |
❌ 1 Tests Failed:
View the top 1 failed test(s) by shortest run time
To view more test analytics, go to the Test Analytics Dashboard |
Add path validation (repo-root check) and stderr warnings for skipped files in both check_no_redundant_timeout.py and check_no_em_dashes.py. Replace em-dashes with ASCII double-dashes in LICENSE and .gitattributes. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@scripts/check_no_redundant_timeout.py`:
- Around line 30-31: Replace the parenthesized multi-except syntax with PEP 758
style: change the clause using the exception types UnicodeDecodeError and
OSError (currently written as "except (UnicodeDecodeError, OSError) as exc:") to
the no-parentheses form "except UnicodeDecodeError, OSError as exc:" so the
except line that precedes the print(f\"WARNING: skipping {path}: {exc}\",
file=sys.stderr) uses the new syntax; keep the exc variable and the print call
unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 752e34f5-580a-48d3-9777-563c108188ba
📒 Files selected for processing (4)
.gitattributesLICENSEscripts/check_no_em_dashes.pyscripts/check_no_redundant_timeout.py
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Test (Python 3.14)
- GitHub Check: Analyze (python)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.py
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.py: Nofrom __future__ import annotations-- Python 3.14 has PEP 649 native lazy annotations
Useexcept A, B:(no parentheses) for exception syntax on Python 3.14 per PEP 758
Line length must be 88 characters, enforced by ruff
Python version 3.14+, supports PEP 649 native lazy annotations
Files:
scripts/check_no_em_dashes.pyscripts/check_no_redundant_timeout.py
scripts/**/*.py
📄 CodeRabbit inference engine (CLAUDE.md)
Scripts in
scripts/have relaxed ruff rules:
Files:
scripts/check_no_em_dashes.pyscripts/check_no_redundant_timeout.py
🧠 Learnings (18)
📓 Common learnings
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-22T15:54:54.120Z
Learning: Applies to pyproject.toml : 30-second timeout per test enforced
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-16T07:02:24.531Z
Learning: Applies to tests/**/*.py : Test timeout: 30 seconds per test.
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-17T22:08:13.456Z
Learning: Applies to tests/**/*.py : Test markers: `pytest.mark.unit`, `pytest.mark.integration`, `pytest.mark.e2e`, `pytest.mark.slow`. Coverage: 80% minimum. Async: `asyncio_mode = 'auto'` — no manual `pytest.mark.asyncio` needed. Timeout: 30 seconds per test. Parallelism: `pytest-xdist` via `-n auto` — ALWAYS include `-n auto` when running pytest, never run tests sequentially.
📚 Learning: 2026-03-22T15:54:54.120Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-22T15:54:54.120Z
Learning: Pre-commit hooks enforce: trailing-whitespace, end-of-file-fixer, check-yaml, check-toml, check-json, check-merge-conflict, check-added-large-files, no-commit-to-branch (main), ruff check+format, gitleaks, hadolint (Dockerfile), golangci-lint + go vet (CLI)
Applied to files:
.gitattributes
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Pre-commit hooks: trailing-whitespace, end-of-file-fixer, check-yaml, check-toml, check-json, check-merge-conflict, check-added-large-files, no-commit-to-branch (main), ruff check+format, gitleaks, hadolint (Dockerfile linting).
Applied to files:
.gitattributes
📚 Learning: 2026-03-19T11:19:40.044Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:19:40.044Z
Learning: CLI workflow (`.github/workflows/cli.yml`) runs Go lint (golangci-lint + go vet) + test (race, coverage) + build (cross-compile matrix) + vulnerability check (govulncheck) + fuzz testing. Cross-compiles for linux/darwin/windows × amd64/arm64. GoReleaser release on v* tags with cosign keyless signing and SLSA L3 attestations.
Applied to files:
.gitattributes
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/cli.yml : CLI workflow: Go lint (golangci-lint + go vet) + test (-race -coverprofile) + build (cross-compile: linux/darwin/windows × amd64/arm64) + govulncheck + fuzz testing (main-only, 30s/target, continue-on-error, matrix over 4 packages). cli-pass gate includes fuzz as informational. GoReleaser release on v* tags. Cosign keyless signing of checksums.txt. SLSA L3 provenance attestations. Sigstore bundle (.sigstore.json) attached. Post-release appends checksums/verification/provenance to draft release notes.
Applied to files:
.gitattributes
📚 Learning: 2026-03-16T19:52:03.656Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-16T19:52:03.656Z
Learning: Applies to cli/**/*.go : Lint CLI Go code with golangci-lint and go vet; test with go test -race; check vulnerabilities with govulncheck
Applied to files:
.gitattributes
📚 Learning: 2026-03-22T15:54:54.120Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-22T15:54:54.120Z
Learning: Applies to cli/**/*.go : golangci-lint and go vet required for CLI Go code
Applied to files:
.gitattributes
📚 Learning: 2026-03-19T11:30:29.217Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:30:29.217Z
Learning: Applies to cli/**/*.go : Run Go lint via `golangci-lint run`, vet via `go vet`, tests via `go test ./...`, and fuzz via `go test -fuzz=FuzzTarget -fuzztime=30s`
Applied to files:
.gitattributes
📚 Learning: 2026-03-19T11:19:40.044Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:19:40.044Z
Learning: Applies to cli/**/*.go : Lint Go code with `golangci-lint` and `go vet`. Run tests with `-race` flag to detect race conditions.
Applied to files:
.gitattributes
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/**/*.go : Go CLI (Go 1.26+) uses Cobra for commands, charmbracelet/huh for interactive CLI, charmbracelet/lipgloss for styled output. Cross-platform builds (linux/darwin/windows × amd64/arm64). GoReleaser for releases with cosign keyless signing of checksums.txt. SLSA L3 provenance attestations via actions/attest-build-provenance.
Applied to files:
.gitattributes
📚 Learning: 2026-03-22T15:54:54.120Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-22T15:54:54.120Z
Learning: Applies to pyproject.toml : 30-second timeout per test enforced
Applied to files:
scripts/check_no_redundant_timeout.py
📚 Learning: 2026-03-16T07:02:24.531Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-16T07:02:24.531Z
Learning: Applies to tests/**/*.py : Test timeout: 30 seconds per test.
Applied to files:
scripts/check_no_redundant_timeout.py
📚 Learning: 2026-03-22T15:54:54.120Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-22T15:54:54.120Z
Learning: Applies to **/*.py : Use `except A, B:` (no parentheses) for exception syntax on Python 3.14 per PEP 758
Applied to files:
scripts/check_no_redundant_timeout.py
📚 Learning: 2026-03-14T16:18:57.267Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T16:18:57.267Z
Learning: Applies to **/*.py : Handle errors explicitly—never silently swallow exceptions.
Applied to files:
scripts/check_no_redundant_timeout.py
📚 Learning: 2026-03-14T16:18:57.267Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T16:18:57.267Z
Learning: Applies to **/*.py : Use PEP 758 except syntax with `except A, B:` (no parentheses) for multiple exceptions—ruff enforces this on Python 3.14.
Applied to files:
scripts/check_no_redundant_timeout.py
📚 Learning: 2026-03-14T15:43:05.601Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T15:43:05.601Z
Learning: Applies to **/*.py : Handle errors explicitly, never silently swallow exceptions
Applied to files:
scripts/check_no_redundant_timeout.py
📚 Learning: 2026-03-16T07:22:28.134Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-16T07:22:28.134Z
Learning: Applies to **/*.py : Handle errors explicitly; never silently swallow exceptions
Applied to files:
scripts/check_no_redundant_timeout.py
📚 Learning: 2026-03-16T07:22:28.134Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-16T07:22:28.134Z
Learning: Applies to **/*.py : Use `except A, B:` syntax (no parentheses) for exception handling — PEP 758 exception syntax enforced by ruff on Python 3.14
Applied to files:
scripts/check_no_redundant_timeout.py
🧬 Code graph analysis (1)
scripts/check_no_em_dashes.py (1)
scripts/check_no_redundant_timeout.py (1)
main(17-40)
🔇 Additional comments (6)
.gitattributes (1)
3-3: LGTM! Em dash replacement improves compatibility.The replacement of em dashes (—) with ASCII double hyphens (--) in comments enhances plain-text compatibility and aligns with the pre-commit hook enforcement introduced in this PR. All functional Git attributes remain unchanged.
Also applies to: 8-8, 16-16, 19-19
scripts/check_no_redundant_timeout.py (2)
1-14: LGTM!The module header, imports, and constants are well-structured. The regex correctly matches
pytest.mark.timeout(30)with flexible whitespace, and_REPO_ROOTproperly calculates the repository root for path validation.
43-44: LGTM!Standard entry point pattern with proper exit code propagation.
scripts/check_no_em_dashes.py (2)
10-21: Repo-root boundary check and resolved-path scanning are a solid hardening change.This safely constrains hook scanning to repository files and avoids accidental reads outside the repo.
26-27: Current code is correct per PEP 758; do not make this change.Per PEP 758, parentheses are required when catching multiple exceptions with an
asalias. The current syntaxexcept (UnicodeDecodeError, OSError) as exc:is correct. The unparenthesized formexcept A, B as exc:is only valid without anasclause.> Likely an incorrect or invalid review comment.LICENSE (1)
23-26: Good normalization to ASCII double-dashes in license text.This aligns with the repository punctuation policy and preserves the clause semantics.
| except (UnicodeDecodeError, OSError) as exc: | ||
| print(f"WARNING: skipping {path}: {exc}", file=sys.stderr) |
There was a problem hiding this comment.
Use PEP 758 exception syntax (no parentheses) for Python 3.14.
The exception clause uses the pre-3.14 parenthesized syntax. Per coding guidelines, Python 3.14 enforces PEP 758 syntax without parentheses.
🔧 Proposed fix
- except (UnicodeDecodeError, OSError) as exc:
+ except UnicodeDecodeError, OSError as exc:As per coding guidelines: "Use except A, B: (no parentheses) for exception syntax on Python 3.14 per PEP 758"
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| except (UnicodeDecodeError, OSError) as exc: | |
| print(f"WARNING: skipping {path}: {exc}", file=sys.stderr) | |
| except UnicodeDecodeError, OSError as exc: | |
| print(f"WARNING: skipping {path}: {exc}", file=sys.stderr) |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@scripts/check_no_redundant_timeout.py` around lines 30 - 31, Replace the
parenthesized multi-except syntax with PEP 758 style: change the clause using
the exception types UnicodeDecodeError and OSError (currently written as "except
(UnicodeDecodeError, OSError) as exc:") to the no-parentheses form "except
UnicodeDecodeError, OSError as exc:" so the except line that precedes the
print(f\"WARNING: skipping {path}: {exc}\", file=sys.stderr) uses the new
syntax; keep the exc variable and the print call unchanged.
🤖 I have created a release *beep* *boop* --- ## [0.4.7](v0.4.6...v0.4.7) (2026-03-22) ### Features * add system user for CLI-to-backend authentication ([#710](#710)) ([dc6bd3f](dc6bd3f)) * dev channel builds with incremental pre-releases between stable releases ([#715](#715)) ([0e8a714](0e8a714)) * replace hardcoded name pools with Faker multi-locale name generation ([#714](#714)) ([5edc6ec](5edc6ec)) ### Bug Fixes * dev-release tag creation, dependabot coverage, go -C cli convention ([#730](#730)) ([7634843](7634843)) * improve name generation step UX and fix sentinel expansion bug ([#739](#739)) ([f03fd05](f03fd05)) * settings page UX polish -- toggle bug, source badges, form improvements ([#712](#712)) ([d16a0ac](d16a0ac)) * switch dev tags to semver and use same release pipeline as stable ([#729](#729)) ([4df6b9b](4df6b9b)), closes [#713](#713) * unify CLI image discovery and standardize Go tooling ([#738](#738)) ([712a785](712a785)) * use PAT in dev-release workflow to trigger downstream pipelines ([#716](#716)) ([d767aa3](d767aa3)) ### CI/CD * bump astral-sh/setup-uv from 7.4.0 to 7.6.0 in /.github/actions/setup-python-uv in the minor-and-patch group ([#731](#731)) ([7887257](7887257)) * bump the minor-and-patch group with 3 updates ([#735](#735)) ([7cd253a](7cd253a)) * bump wrangler from 4.75.0 to 4.76.0 in /.github in the minor-and-patch group ([#732](#732)) ([a6cafc7](a6cafc7)) * clean up all dev releases and tags on stable release ([#737](#737)) ([8d90f5c](8d90f5c)) ### Maintenance * bump the minor-and-patch group across 2 directories with 2 updates ([#733](#733)) ([2b60069](2b60069)) * bump the minor-and-patch group with 3 updates ([#734](#734)) ([859bc25](859bc25)) * fix dependabot labels and add scope tags ([#736](#736)) ([677eb15](677eb15)) * remove redundant pytest.mark.timeout(30) markers ([#740](#740)) ([9ec2163](9ec2163)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Summary
pytest.mark.timeout(30)markers across test files -- the globaltimeout = 30inpyproject.tomlalready covers every testtimeout(60)overrides (Docker sandbox + real LLM integration)no-redundant-timeoutpre-commit hook (scripts/check_no_redundant_timeout.py) to prevent re-introductionTest plan
grep -r "pytest.mark.timeout(30)" tests/returns 0 matchesgrep -r "pytest.mark.timeout(60)" tests/returns exactly 2 matches (kept)uv run ruff check src/ tests/-- all checks passeduv run mypy src/ tests/-- no issues in 1185 filesuv run python -m pytest tests/ -m unit -n auto-- 10170 passeduv run pre-commit run no-redundant-timeout --all-files-- passedpytest.mark.timeout(30)additions (tested manually)Review coverage
Pre-reviewed by 3 agents (docs-consistency, infra-reviewer, issue-resolution-verifier). 3 findings addressed:
no-em-dashes+no-redundant-timeout\s*to catch whitespace variantsCloses #685