Skip to content

Address comment

2ef9783
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Open

Allow FlowDecorators, FlowMutators and StepMutators to add_to_package #3082

Address comment
2ef9783
Select commit
Loading
Failed to load commit list.
GitHub Actions / Test Results — All Backends succeeded Apr 28, 2026 in 0s

497 passed, 0 failed and 152 skipped

Tests passed successfully

Report Passed Failed Skipped Time
junit-artifacts/junit-airflow-kubernetes/junit-airflow-kubernetes.xml 29✅ 54⚪ 1905s
junit-artifacts/junit-argo-kubernetes/junit-argo-kubernetes.xml 64✅ 19⚪ 3580s
junit-artifacts/junit-local/junit-local.xml 29✅ 30⚪ 287s
junit-artifacts/junit-sfn-batch/junit-sfn-batch.xml 37✅ 46⚪ 1997s
junit-artifacts/junit-unit/junit-unit.xml 338✅ 3⚪ 44s

✅ junit-artifacts/junit-airflow-kubernetes/junit-airflow-kubernetes.xml

83 tests were completed in 1905s with 29 passed, 0 failed and 54 skipped.

Test suite Passed Failed Skipped Time
pytest 29✅ 54⚪ 1905s

✅ pytest

core.test_airflow_compilation
  ✅ test_linear_flow
  ✅ test_branch_flow
  ✅ test_foreach_flow
  ✅ test_retry_flow
  ✅ test_resources_flow
  ✅ test_schedule_flow
  ✅ test_tags_are_list_not_tuple
core.test_basic
  ✅ test_hello_world[airflow-kubernetes-runner]
  ⚪ test_hello_world[airflow-kubernetes-deployer]
  ✅ test_hello_project[airflow-kubernetes-runner]
  ⚪ test_hello_project[airflow-kubernetes-deployer]
  ⚪ test_from_deployment[airflow-kubernetes-deployer]
  ✅ test_retry[airflow-kubernetes-runner]
  ⚪ test_retry[airflow-kubernetes-deployer]
  ✅ test_resources[airflow-kubernetes-runner]
  ⚪ test_resources[airflow-kubernetes-deployer]
  ✅ test_catch[airflow-kubernetes-runner]
  ⚪ test_catch[airflow-kubernetes-deployer]
  ✅ test_timeout[airflow-kubernetes-runner]
  ⚪ test_timeout[airflow-kubernetes-deployer]
  ✅ test_hello_conda[airflow-kubernetes-runner]
  ⚪ test_hello_conda[airflow-kubernetes-deployer]
  ⚪ test_resources_cpu[airflow-kubernetes-deployer]
  ⚪ test_fail_flow_reports_failed_status[airflow-kubernetes-deployer]
  ⚪ test_split_in_branch_deployer[airflow-kubernetes-deployer]
  ⚪ test_resources_gpu[airflow-kubernetes-deployer]
core.test_compliance
  ⚪ test_run_params_multiple_values[airflow-kubernetes-deployer]
  ⚪ test_branch_propagated_to_steps[airflow-kubernetes-deployer]
  ⚪ test_retry_count_from_scheduler[airflow-kubernetes-deployer]
  ⚪ test_config_value_propagated[airflow-kubernetes-deployer]
  ⚪ test_nested_foreach_or_skip[airflow-kubernetes-deployer]
  ⚪ test_timeout_enforcement[airflow-kubernetes-deployer]
  ⚪ test_timeout_minutes_enforced[airflow-kubernetes-deployer]
  ⚪ test_run_param_not_dropped[airflow-kubernetes-deployer]
core.test_config
  ✅ test_config_simple_default[airflow-kubernetes-runner]
  ⚪ test_config_simple_default[airflow-kubernetes-deployer]
  ✅ test_config_simple_config_value[airflow-kubernetes-runner]
  ⚪ test_config_simple_config_value[airflow-kubernetes-deployer]
  ✅ test_config_simple_config[airflow-kubernetes-runner]
  ⚪ test_config_simple_config[airflow-kubernetes-deployer]
  ✅ test_mutable_flow_default[airflow-kubernetes-runner]
  ⚪ test_mutable_flow_default[airflow-kubernetes-deployer]
  ✅ test_mutable_flow_config_value[airflow-kubernetes-runner]
  ⚪ test_mutable_flow_config_value[airflow-kubernetes-deployer]
  ✅ test_config_corner_cases[airflow-kubernetes-runner]
  ⚪ test_config_corner_cases[airflow-kubernetes-deployer]
  ⚪ test_config_from_deployment[airflow-kubernetes-deployer]
core.test_dag
  ✅ test_branch[airflow-kubernetes-runner]
  ⚪ test_branch[airflow-kubernetes-deployer]
  ✅ test_foreach[airflow-kubernetes-runner]
  ⚪ test_foreach[airflow-kubernetes-deployer]
  ✅ test_multibody_foreach[airflow-kubernetes-runner]
  ⚪ test_multibody_foreach[airflow-kubernetes-deployer]
  ✅ test_retry_foreach[airflow-kubernetes-runner]
  ⚪ test_retry_foreach[airflow-kubernetes-deployer]
  ⚪ test_condition[airflow-kubernetes-runner]
  ⚪ test_condition[airflow-kubernetes-deployer]
  ✅ test_nested_foreach[airflow-kubernetes-runner]
  ⚪ test_nested_foreach[airflow-kubernetes-deployer]
  ✅ test_nested_foreach_2x2[airflow-kubernetes-runner]
  ⚪ test_nested_foreach_2x2[airflow-kubernetes-deployer]
  ⚪ test_nested_foreach_3level[airflow-kubernetes-runner]
  ⚪ test_nested_foreach_3level[airflow-kubernetes-deployer]
core.test_decorators
  ✅ test_environment_vars[airflow-kubernetes-runner]
  ⚪ test_environment_vars[airflow-kubernetes-deployer]
  ✅ test_environment_vars_foreach[airflow-kubernetes-runner]
  ⚪ test_environment_vars_foreach[airflow-kubernetes-deployer]
  ✅ test_card_basic[airflow-kubernetes-runner]
  ⚪ test_card_basic[airflow-kubernetes-deployer]
core.test_lifecycle
  ⚪ test_schedule_deploy[airflow-kubernetes-deployer]
  ⚪ test_deployed_flow_status[airflow-kubernetes-deployer]
core.test_resume
  ⚪ test_resume_hello_world[airflow-kubernetes-deployer]
  ⚪ test_resume_failed_flow[airflow-kubernetes-deployer]
  ⚪ test_resume_foreach[airflow-kubernetes-deployer]
  ⚪ test_resume_step_to_rerun[airflow-kubernetes-deployer]
core.test_sfn_compilation
  ⚪ test_linear_flow
  ⚪ test_branch_flow
  ⚪ test_foreach_flow
  ⚪ test_retry_flow
  ⚪ test_catch_flow
  ⚪ test_resources_flow
  ⚪ test_timeout_flow
  ⚪ test_schedule_flow

✅ junit-artifacts/junit-argo-kubernetes/junit-argo-kubernetes.xml

83 tests were completed in 3580s with 64 passed, 0 failed and 19 skipped.

Test suite Passed Failed Skipped Time
pytest 64✅ 19⚪ 3580s

✅ pytest

core.test_airflow_compilation
  ✅ test_linear_flow
  ✅ test_branch_flow
  ✅ test_foreach_flow
  ✅ test_retry_flow
  ✅ test_resources_flow
  ✅ test_schedule_flow
  ✅ test_tags_are_list_not_tuple
core.test_basic
  ✅ test_hello_project[argo-kubernetes-deployer]
  ✅ test_hello_world[argo-kubernetes-runner]
  ✅ test_hello_world[argo-kubernetes-deployer]
  ✅ test_from_deployment[argo-kubernetes-deployer]
  ✅ test_hello_project[argo-kubernetes-runner]
  ✅ test_retry[argo-kubernetes-runner]
  ✅ test_hello_conda[argo-kubernetes-runner]
  ✅ test_retry[argo-kubernetes-deployer]
  ✅ test_hello_conda[argo-kubernetes-deployer]
  ✅ test_resources[argo-kubernetes-runner]
  ✅ test_resources_cpu[argo-kubernetes-deployer]
  ✅ test_resources[argo-kubernetes-deployer]
  ✅ test_catch[argo-kubernetes-runner]
  ✅ test_fail_flow_reports_failed_status[argo-kubernetes-deployer]
  ✅ test_catch[argo-kubernetes-deployer]
  ✅ test_timeout[argo-kubernetes-runner]
  ✅ test_split_in_branch_deployer[argo-kubernetes-deployer]
  ⚪ test_resources_gpu[argo-kubernetes-deployer]
  ✅ test_timeout[argo-kubernetes-deployer]
core.test_compliance
  ✅ test_run_params_multiple_values[argo-kubernetes-deployer]
  ✅ test_branch_propagated_to_steps[argo-kubernetes-deployer]
  ✅ test_retry_count_from_scheduler[argo-kubernetes-deployer]
  ✅ test_config_value_propagated[argo-kubernetes-deployer]
  ✅ test_nested_foreach_or_skip[argo-kubernetes-deployer]
  ⚪ test_timeout_enforcement[argo-kubernetes-deployer]
  ⚪ test_timeout_minutes_enforced[argo-kubernetes-deployer]
  ✅ test_run_param_not_dropped[argo-kubernetes-deployer]
core.test_config
  ✅ test_config_simple_default[argo-kubernetes-runner]
  ✅ test_config_simple_default[argo-kubernetes-deployer]
  ✅ test_config_simple_config_value[argo-kubernetes-runner]
  ✅ test_config_simple_config_value[argo-kubernetes-deployer]
  ✅ test_config_simple_config[argo-kubernetes-runner]
  ✅ test_config_simple_config[argo-kubernetes-deployer]
  ✅ test_mutable_flow_default[argo-kubernetes-runner]
  ✅ test_mutable_flow_default[argo-kubernetes-deployer]
  ✅ test_mutable_flow_config_value[argo-kubernetes-runner]
  ✅ test_mutable_flow_config_value[argo-kubernetes-deployer]
  ✅ test_config_corner_cases[argo-kubernetes-runner]
  ✅ test_config_corner_cases[argo-kubernetes-deployer]
  ✅ test_config_from_deployment[argo-kubernetes-deployer]
core.test_dag
  ✅ test_retry_foreach[argo-kubernetes-runner]
  ✅ test_branch[argo-kubernetes-runner]
  ✅ test_branch[argo-kubernetes-deployer]
  ✅ test_foreach[argo-kubernetes-runner]
  ✅ test_foreach[argo-kubernetes-deployer]
  ✅ test_retry_foreach[argo-kubernetes-deployer]
  ⚪ test_condition[argo-kubernetes-runner]
  ⚪ test_condition[argo-kubernetes-deployer]
  ✅ test_multibody_foreach[argo-kubernetes-runner]
  ✅ test_nested_foreach[argo-kubernetes-runner]
  ✅ test_multibody_foreach[argo-kubernetes-deployer]
  ⚪ test_nested_foreach_3level[argo-kubernetes-deployer]
  ✅ test_nested_foreach[argo-kubernetes-deployer]
  ✅ test_nested_foreach_2x2[argo-kubernetes-runner]
  ✅ test_nested_foreach_2x2[argo-kubernetes-deployer]
  ⚪ test_nested_foreach_3level[argo-kubernetes-runner]
core.test_decorators
  ✅ test_environment_vars[argo-kubernetes-runner]
  ✅ test_environment_vars[argo-kubernetes-deployer]
  ✅ test_environment_vars_foreach[argo-kubernetes-runner]
  ✅ test_environment_vars_foreach[argo-kubernetes-deployer]
  ✅ test_card_basic[argo-kubernetes-runner]
  ✅ test_card_basic[argo-kubernetes-deployer]
core.test_lifecycle
  ✅ test_schedule_deploy[argo-kubernetes-deployer]
  ✅ test_deployed_flow_status[argo-kubernetes-deployer]
core.test_resume
  ⚪ test_resume_hello_world[argo-kubernetes-deployer]
  ⚪ test_resume_failed_flow[argo-kubernetes-deployer]
  ⚪ test_resume_foreach[argo-kubernetes-deployer]
  ⚪ test_resume_step_to_rerun[argo-kubernetes-deployer]
core.test_sfn_compilation
  ⚪ test_linear_flow
  ⚪ test_foreach_flow
  ⚪ test_retry_flow
  ⚪ test_catch_flow
  ⚪ test_resources_flow
  ⚪ test_timeout_flow
  ⚪ test_schedule_flow
  ⚪ test_branch_flow

✅ junit-artifacts/junit-local/junit-local.xml

59 tests were completed in 287s with 29 passed, 0 failed and 30 skipped.

Test suite Passed Failed Skipped Time
pytest 29✅ 30⚪ 287s

✅ pytest

core.test_basic
  ⚪ test_from_deployment[NOTSET]
  ⚪ test_fail_flow_reports_failed_status[NOTSET]
  ⚪ test_split_in_branch_deployer[NOTSET]
  ⚪ test_resources_gpu[NOTSET]
  ✅ test_hello_world[local-runner]
  ✅ test_catch[local-runner]
  ✅ test_hello_project[local-runner]
  ✅ test_timeout[local-runner]
  ✅ test_retry[local-runner]
  ✅ test_resources[local-runner]
  ✅ test_hello_conda[local-runner]
  ⚪ test_resources_cpu[NOTSET]
core.test_airflow_compilation
  ✅ test_linear_flow
  ✅ test_tags_are_list_not_tuple
  ✅ test_retry_flow
  ✅ test_branch_flow
  ✅ test_resources_flow
  ✅ test_foreach_flow
  ✅ test_schedule_flow
core.test_compliance
  ⚪ test_run_params_multiple_values[NOTSET]
  ⚪ test_branch_propagated_to_steps[NOTSET]
  ⚪ test_retry_count_from_scheduler[NOTSET]
  ⚪ test_config_value_propagated[NOTSET]
  ⚪ test_nested_foreach_or_skip[NOTSET]
  ⚪ test_timeout_enforcement[NOTSET]
  ⚪ test_timeout_minutes_enforced[NOTSET]
  ⚪ test_run_param_not_dropped[NOTSET]
core.test_config
  ✅ test_config_simple_default[local-runner]
  ✅ test_config_simple_config_value[local-runner]
  ✅ test_config_simple_config[local-runner]
  ✅ test_mutable_flow_config_value[local-runner]
  ✅ test_mutable_flow_default[local-runner]
  ⚪ test_config_from_deployment[NOTSET]
  ✅ test_config_corner_cases[local-runner]
core.test_dag
  ✅ test_branch[local-runner]
  ⚪ test_condition[local-runner]
  ✅ test_foreach[local-runner]
  ✅ test_nested_foreach[local-runner]
  ✅ test_retry_foreach[local-runner]
  ⚪ test_nested_foreach_3level[local-runner]
  ✅ test_multibody_foreach[local-runner]
  ✅ test_nested_foreach_2x2[local-runner]
core.test_lifecycle
  ⚪ test_deployed_flow_status[NOTSET]
  ⚪ test_schedule_deploy[NOTSET]
core.test_resume
  ⚪ test_resume_hello_world[NOTSET]
  ⚪ test_resume_failed_flow[NOTSET]
  ⚪ test_resume_foreach[NOTSET]
  ⚪ test_resume_step_to_rerun[NOTSET]
core.test_decorators
  ✅ test_card_basic[local-runner]
  ✅ test_environment_vars[local-runner]
  ✅ test_environment_vars_foreach[local-runner]
core.test_sfn_compilation
  ⚪ test_linear_flow
  ⚪ test_branch_flow
  ⚪ test_foreach_flow
  ⚪ test_catch_flow
  ⚪ test_retry_flow
  ⚪ test_timeout_flow
  ⚪ test_resources_flow
  ⚪ test_schedule_flow

✅ junit-artifacts/junit-sfn-batch/junit-sfn-batch.xml

83 tests were completed in 1997s with 37 passed, 0 failed and 46 skipped.

Test suite Passed Failed Skipped Time
pytest 37✅ 46⚪ 1997s

✅ pytest

core.test_airflow_compilation
  ✅ test_linear_flow
  ✅ test_branch_flow
  ✅ test_foreach_flow
  ✅ test_retry_flow
  ✅ test_resources_flow
  ✅ test_schedule_flow
  ✅ test_tags_are_list_not_tuple
core.test_basic
  ⚪ test_hello_project[sfn-batch-deployer]
  ⚪ test_from_deployment[sfn-batch-deployer]
  ✅ test_hello_world[sfn-batch-runner]
  ⚪ test_hello_world[sfn-batch-deployer]
  ✅ test_hello_project[sfn-batch-runner]
  ✅ test_retry[sfn-batch-runner]
  ⚪ test_retry[sfn-batch-deployer]
  ✅ test_resources[sfn-batch-runner]
  ⚪ test_resources[sfn-batch-deployer]
  ✅ test_catch[sfn-batch-runner]
  ⚪ test_catch[sfn-batch-deployer]
  ✅ test_hello_conda[sfn-batch-runner]
  ⚪ test_hello_conda[sfn-batch-deployer]
  ⚪ test_resources_cpu[sfn-batch-deployer]
  ⚪ test_fail_flow_reports_failed_status[sfn-batch-deployer]
  ⚪ test_split_in_branch_deployer[sfn-batch-deployer]
  ⚪ test_resources_gpu[sfn-batch-deployer]
  ✅ test_timeout[sfn-batch-runner]
  ⚪ test_timeout[sfn-batch-deployer]
core.test_compliance
  ⚪ test_run_params_multiple_values[sfn-batch-deployer]
  ⚪ test_branch_propagated_to_steps[sfn-batch-deployer]
  ⚪ test_retry_count_from_scheduler[sfn-batch-deployer]
  ⚪ test_config_value_propagated[sfn-batch-deployer]
  ⚪ test_nested_foreach_or_skip[sfn-batch-deployer]
  ⚪ test_timeout_enforcement[sfn-batch-deployer]
  ⚪ test_timeout_minutes_enforced[sfn-batch-deployer]
  ⚪ test_run_param_not_dropped[sfn-batch-deployer]
core.test_config
  ⚪ test_config_corner_cases[sfn-batch-deployer]
  ⚪ test_config_from_deployment[sfn-batch-deployer]
  ✅ test_config_simple_default[sfn-batch-runner]
  ⚪ test_config_simple_default[sfn-batch-deployer]
  ✅ test_config_simple_config_value[sfn-batch-runner]
  ⚪ test_config_simple_config_value[sfn-batch-deployer]
  ✅ test_config_simple_config[sfn-batch-runner]
  ⚪ test_config_simple_config[sfn-batch-deployer]
  ✅ test_mutable_flow_default[sfn-batch-runner]
  ⚪ test_mutable_flow_default[sfn-batch-deployer]
  ✅ test_mutable_flow_config_value[sfn-batch-runner]
  ⚪ test_mutable_flow_config_value[sfn-batch-deployer]
  ✅ test_config_corner_cases[sfn-batch-runner]
core.test_dag
  ✅ test_branch[sfn-batch-runner]
  ⚪ test_branch[sfn-batch-deployer]
  ✅ test_foreach[sfn-batch-runner]
  ⚪ test_foreach[sfn-batch-deployer]
  ⚪ test_nested_foreach[sfn-batch-deployer]
  ✅ test_multibody_foreach[sfn-batch-runner]
  ⚪ test_multibody_foreach[sfn-batch-deployer]
  ✅ test_nested_foreach_2x2[sfn-batch-runner]
  ⚪ test_nested_foreach_2x2[sfn-batch-deployer]
  ⚪ test_nested_foreach_3level[sfn-batch-runner]
  ⚪ test_nested_foreach_3level[sfn-batch-deployer]
  ✅ test_retry_foreach[sfn-batch-runner]
  ⚪ test_retry_foreach[sfn-batch-deployer]
  ⚪ test_condition[sfn-batch-runner]
  ⚪ test_condition[sfn-batch-deployer]
  ✅ test_nested_foreach[sfn-batch-runner]
core.test_decorators
  ✅ test_environment_vars[sfn-batch-runner]
  ⚪ test_environment_vars[sfn-batch-deployer]
  ✅ test_environment_vars_foreach[sfn-batch-runner]
  ⚪ test_environment_vars_foreach[sfn-batch-deployer]
  ✅ test_card_basic[sfn-batch-runner]
  ⚪ test_card_basic[sfn-batch-deployer]
core.test_lifecycle
  ⚪ test_deployed_flow_status[sfn-batch-deployer]
  ✅ test_schedule_deploy[sfn-batch-deployer]
core.test_resume
  ⚪ test_resume_hello_world[sfn-batch-deployer]
  ⚪ test_resume_failed_flow[sfn-batch-deployer]
  ⚪ test_resume_foreach[sfn-batch-deployer]
  ⚪ test_resume_step_to_rerun[sfn-batch-deployer]
core.test_sfn_compilation
  ✅ test_linear_flow
  ⚪ test_branch_flow
  ✅ test_foreach_flow
  ✅ test_retry_flow
  ✅ test_catch_flow
  ✅ test_resources_flow
  ✅ test_timeout_flow
  ✅ test_schedule_flow

✅ junit-artifacts/junit-unit/junit-unit.xml

341 tests were completed in 44s with 338 passed, 0 failed and 3 skipped.

Test suite Passed Failed Skipped Time
pytest 338✅ 3⚪ 44s

✅ pytest

test.unit.configs.test_config_naming.TestConfigNaming
  ✅ test_flow_completes
  ✅ test_config_with_underscore
  ✅ test_config_with_dash
  ✅ test_config_with_mixed_naming
test.unit.configs.test_config_plain.TestConfigPlain
  ✅ test_flow_completes
  ✅ test_plain_string_without_parser
  ✅ test_plain_list_with_parser
  ✅ test_plain_tuple_with_parser
test.unit.inheritance.test_inheritance.TestComprehensiveLinear
  ✅ test_flow_completes
  ✅ test_all_parameters_accessible
  ✅ test_all_configs_accessible
  ✅ test_computation_with_configs
test.unit.inheritance.test_inheritance.TestMutatorWithBaseConfig
  ✅ test_flow_completes
  ✅ test_base_parameters_accessible
  ✅ test_base_config_accessible
  ✅ test_mutator_injects_from_base_config
  ✅ test_computation_with_injected_params
test.unit.inheritance.test_inheritance.TestMutatorWithDerivedConfig
  ✅ test_flow_completes
  ✅ test_all_parameters_accessible
  ✅ test_all_configs_accessible
  ✅ test_base_mutator_uses_derived_config
  ✅ test_computation_with_forward_injected_params
test.unit.inheritance.test_inheritance.TestComprehensiveDiamond
  ✅ test_flow_completes
  ✅ test_parameters_from_all_branches
  ✅ test_configs_from_all_branches
  ✅ test_mro_resolution
  ✅ test_computation_across_branches
test.unit.inheritance.test_inheritance.TestComprehensiveMultiHierarchy
  ✅ test_flow_completes
  ✅ test_parameters_from_first_hierarchy
  ✅ test_parameters_from_second_hierarchy
  ✅ test_merge_point_parameters
  ✅ test_configs_from_both_hierarchies
  ✅ test_step_override_from_merge_point
  ✅ test_cross_hierarchy_computation
  ✅ test_mutator_from_first_hierarchy_executes
  ✅ test_decorated_step_from_first_hierarchy
test.unit.inheritance.test_inheritance.TestInheritanceIntegration
  ✅ test_all_flows_complete_successfully[comprehensive_linear_run]
  ✅ test_all_flows_complete_successfully[mutator_with_base_config_run]
  ✅ test_all_flows_complete_successfully[mutator_with_derived_config_run]
  ✅ test_all_flows_complete_successfully[comprehensive_diamond_run]
  ✅ test_all_flows_complete_successfully[comprehensive_multi_hierarchy_run]
  ✅ test_expected_steps_present[comprehensive_linear_run-expected_steps0]
  ✅ test_expected_steps_present[mutator_with_base_config_run-expected_steps1]
  ✅ test_expected_steps_present[mutator_with_derived_config_run-expected_steps2]
  ✅ test_expected_steps_present[comprehensive_diamond_run-expected_steps3]
  ✅ test_expected_steps_present[comprehensive_multi_hierarchy_run-expected_steps4]
test.unit.localbatch.test_localbatch.TestBatchAPI
  ✅ test_health
  ✅ test_describe_queues_returns_default
  ✅ test_default_queue_is_healthy
  ✅ test_describe_compute_environments
  ✅ test_register_job_definition
  ✅ test_revision_increments_on_re_register
  ✅ test_describe_job_definitions_by_name
  ✅ test_submit_job_returns_id_and_name
  ✅ test_job_reaches_terminal_state
  ✅ test_describe_jobs_returns_correct_shape
  ✅ test_terminate_job_transitions_to_failed
  ✅ test_list_jobs_returns_summary_list
  ✅ test_ecs_metadata_endpoint
test.unit.localbatch.test_localbatch.TestDockerExecution
  ✅ test_successful_container
  ✅ test_failed_container_reports_exit_code
  ✅ test_inject_env_is_visible_inside_container
test.unit.localbatch.test_localbatch.TestMetaflowE2E
  ⚪ test_batch_step_artifacts_are_persisted
  ⚪ test_run_succeeds
  ⚪ test_all_steps_have_tasks
test.unit.mutators.test_add_decorator_returns.TestAddDecoratorReturns
  ✅ test_flow_completes
  ✅ test_returned_decorator_is_not_none
  ✅ test_returned_decorator_has_name
  ✅ test_decorator_was_applied
  ✅ test_duplicate_ignore_returns_none
  ✅ test_duplicate_was_not_applied
test.unit.mutators.test_dual_inheritance.TestDualInheritance
  ✅ test_flow_completes
  ✅ test_pre_mutate_ran
  ✅ test_mutate_ran
  ✅ test_pre_step_ran
  ✅ test_post_step_ran
test.unit.mutators.test_flow_mutator_addition.TestDynamicFlowMutatorAddition
  ✅ test_flow_completes
  ✅ test_inner_pre_mutate_ran
  ✅ test_inner_mutate_ran
test.unit.mutators.test_flow_mutator_addition.TestStringFlowMutatorAddition
  ✅ test_flow_completes
  ✅ test_string_mutator_pre_mutate_ran
  ✅ test_string_mutator_mutate_ran
test.unit.mutators.test_post_step_none_false.TestPostStepNoneFalse
  ✅ test_flow_completes
  ✅ test_pre_step_ran
  ✅ test_post_step_ran
test.unit.mutators.test_remove_decorator_guard.TestRemoveDecoratorGuard
  ✅ test_do_all_from_mutate_raises
  ✅ test_specific_match_from_mutate_raises
  ✅ test_do_all_from_pre_mutate_succeeds
test.unit.mutators.test_string_step_mutator.TestStringStepMutatorAddition
  ✅ test_flow_completes
  ✅ test_string_step_mutator_ran
test.unit.test_add_to_package
  ✅ test_flow_decorator_add_to_package
  ✅ test_flow_mutator_add_to_package_module
  ✅ test_step_mutator_deduplicated_across_steps
  ✅ test_step_mutator_distinct_instances
  ✅ test_legacy_two_tuple_defaults_to_code_content
  ✅ test_non_unique_filename_raises
  ✅ test_module_content_deduplicated
  ✅ test_other_content_type
  ✅ test_ordering_flow_decorators_before_step_decorators
  ✅ test_user_content_recorded
  ✅ test_user_content_duplicate_same_path_dedup
  ✅ test_user_content_duplicate_different_path_raises
  ✅ test_user_code_tuples_emits_addl_user_content_not_in_walker
  ✅ test_user_code_tuples_skips_addl_when_walker_already_has_it
  ✅ test_user_code_tuples_respects_user_code_filter
  ✅ test_integration_add_addl_then_user_code_tuples_dedupes_by_arcname
  ✅ test_integration_add_addl_contributes_file_outside_flow_dir
test.unit.test_argo_workflows_cli
  ✅ test_sanitize_for_argo[a-valid-name-a-valid-name]
  ✅ test_sanitize_for_argo[removing---@+_characters@_+-removing---characters]
  ✅ test_sanitize_for_argo[numb3rs-4r3-0k-123-numb3rs-4r3-0k-123]
  ✅ test_sanitize_for_argo[proj3ct.br4nch.flow_name-proj3ct.br4nch.flowname]
  ✅ test_sanitize_for_argo[---1breaking1---.--2subdomain2--.-3rules3-----1breaking1.2subdomain2.3rules3----]
  ✅ test_sanitize_for_argo[1brea---king1.2sub---domain2.-3ru-les3---1brea---king1.2sub---domain2.3ru-les3--]
  ✅ test_sanitize_for_argo[project.branch-cut-short-.flowname-project.branch-cut-short.flowname]
  ✅ test_sanitize_for_argo[test...name-test.name]
  ✅ test_get_schedule_no_decorator_returns_none
  ✅ test_get_schedule[schedule_none]
  ✅ test_get_schedule[schedule_none_with_timezone]
  ✅ test_get_schedule[cron_expression]
  ✅ test_get_schedule[cron_expression_with_timezone]
  ✅ test_trigger_explanation_no_schedule_does_not_claim_cronworkflow
  ✅ test_trigger_explanation_schedule_none_does_not_claim_cronworkflow
  ✅ test_trigger_explanation_active_schedule_claims_cronworkflow
test.unit.test_aws_util
  ✅ test_validate_aws_tag[test-value-False]
  ✅ test_validate_aws_tag[test-with@chars+ - = ._/-value@with.chars-+ - = ._/-False]
  ✅ test_validate_aws_tag[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-ok-False]
  ✅ test_validate_aws_tag[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-ok-True]
  ✅ test_validate_aws_tag[ok-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-False]
  ✅ test_validate_aws_tag[ok-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-True]
  ✅ test_validate_aws_tag[aWs:not-allowed-ok-True]
  ✅ test_validate_aws_tag[ok-AWS:not-allowed-True]
  ✅ test_validate_aws_tag[ok-aws:-middleaWs:not-allowed-False]
test.unit.test_compute_resource_attributes
  ✅ test_compute_resource_attributes
  ✅ test_compute_resource_attributes_string
test.unit.test_conda_decorator
  ✅ test_decorator_custom_attributes
  ✅ test_decorator_custom_attributes_with_backward_compatibility
test.unit.test_config_value
  ✅ test_isinstance
  ✅ test_todict
  ✅ test_container_has_config_value
  ✅ test_non_modifiable
  ✅ test_json_dumpable
  ✅ test_dict_like_behavior
test.unit.test_content_addressed_store
  ✅ test_load_blobs_error_message_uses_current_path_key[missing_version]
  ✅ test_load_blobs_error_message_uses_current_path_key[unknown_version]
  ✅ test_load_blobs_error_message_uses_current_path_key[unpack_failure]
test.unit.test_kubernetes
  ✅ test_kubernetes_decorator_validate_kube_labels[None]
  ✅ test_kubernetes_decorator_validate_kube_labels[labels1]
  ✅ test_kubernetes_decorator_validate_kube_labels[labels2]
  ✅ test_kubernetes_decorator_validate_kube_labels[labels3]
  ✅ test_kubernetes_decorator_validate_kube_labels[labels4]
  ✅ test_kubernetes_decorator_validate_kube_labels[labels5]
  ✅ test_kubernetes_decorator_validate_kube_labels[labels6]
  ✅ test_kubernetes_decorator_validate_kube_labels[labels7]
  ✅ test_kubernetes_decorator_validate_kube_labels_fail[labels0]
  ✅ test_kubernetes_decorator_validate_kube_labels_fail[labels1]
  ✅ test_kubernetes_decorator_validate_kube_labels_fail[labels2]
  ✅ test_kubernetes_decorator_validate_kube_labels_fail[labels3]
  ✅ test_kubernetes_decorator_validate_kube_labels_fail[labels4]
  ✅ test_kubernetes_decorator_validate_kube_labels_fail[labels5]
  ✅ test_kubernetes_parse_keyvalue_list[items0-True]
  ✅ test_kubernetes_parse_keyvalue_list[items1-True]
test.unit.test_local_metadata_provider
  ✅ test_deduce_run_id_from_meta_dir
test.unit.test_metaflow_version
  ✅ test_format_git_describe_parses_known_shapes[2.19.22-0-g4ff334e-False-2.19.22]
  ✅ test_format_git_describe_parses_known_shapes[2.19.22-0-g4ff334e-True-2.19.22]
  ✅ test_format_git_describe_parses_known_shapes[2.19.22-5-g4ff334e-False-2.19.22.post5-git4ff334e]
  ✅ test_format_git_describe_parses_known_shapes[2.19.22-5-g4ff334e-True-2.19.22.post5]
  ✅ test_format_git_describe_parses_known_shapes[2.19.22-5-g4ff334e-dirty-False-2.19.22.post5-git4ff334e-dirty]
  ✅ test_format_git_describe_parses_known_shapes[2.19.22-0-g4ff334e-dirty-False-2.19.22-dirty]
  ✅ test_format_git_describe_parses_known_shapes[v1.0-rc.1-0-gabcdef0-False-v1.0-rc.1]
  ✅ test_format_git_describe_parses_known_shapes[v1.0-rc.1-12-gabcdef0-False-v1.0-rc.1.post12-gitabcdef0]
  ✅ test_format_git_describe_parses_known_shapes[v1.0-rc.1-12-gabcdef0-True-v1.0-rc.1.post12]
  ✅ test_format_git_describe_parses_known_shapes[v1.0-rc.1-12-gabcdef0-dirty-False-v1.0-rc.1.post12-gitabcdef0-dirty]
  ✅ test_format_git_describe_parses_known_shapes[v9.2.97-rc.15-100-g3a13f86-dirty-False-v9.2.97-rc.15.post100-git3a13f86-dirty]
  ✅ test_format_git_describe_returns_none_for_unparseable[None]
  ✅ test_format_git_describe_returns_none_for_unparseable[short]
  ✅ test_format_git_describe_returns_none_for_unparseable[a-b]
  ✅ test_format_git_describe_returns_none_for_unparseable[a-b-dirty]
  ✅ test_make_public_version_strips_only_private_suffixes[2.19.22-2.19.22]
  ✅ test_make_public_version_strips_only_private_suffixes[2.19.22.post5-git4ff334e-2.19.22.post5]
  ✅ test_make_public_version_strips_only_private_suffixes[2.19.22.post5-git4ff334e-dirty-2.19.22.post5]
  ✅ test_make_public_version_strips_only_private_suffixes[v1.0-rc.1-v1.0-rc.1]
  ✅ test_make_public_version_strips_only_private_suffixes[v1.0-rc.1.post12-gitabcdef0-v1.0-rc.1.post12]
  ✅ test_make_public_version_strips_only_private_suffixes[v1.0-rc.1.post12-gitabcdef0-dirty-v1.0-rc.1.post12]
  ✅ test_make_public_version_strips_only_private_suffixes[v1.0-rc.1.post12-gitabcdef0+ext(foo)-v1.0-rc.1.post12]
  ✅ test_get_version_public_from_info_preserves_dashed_tags
test.unit.test_multicore_utils
  ✅ test_parallel_map
test.unit.test_package_suffixes_mutator
  ✅ test_init_list_form
  ✅ test_init_string_form
  ✅ test_add_to_package_yields_matching_files
  ✅ test_add_to_package_empty_suffixes_yields_nothing
test.unit.test_packaging_utils
  ✅ test_walk_includes_files_when_hidden_dir_is_ancestor_of_root
  ✅ test_walk_excludes_hidden_dirs_under_root
test.unit.test_pypi_decorator
  ✅ test_decorator_custom_attributes
test.unit.test_pypi_parsers
  ✅ test_yml_parser
  ✅ test_requirements_parser
  ✅ test_toml_parser
test.unit.test_remove_decorator
  ✅ test_remove_decorator
test.unit.test_s3_storage
  ✅ test_save_bytes_put_many_preserves_metadata_slot
  ✅ test_save_bytes_sequential_preserves_metadata
test.unit.test_secrets_decorator
  ✅ test_missing_default_secrets_backend_type
  ✅ test_secret_spec_from_str_explicit_type
  ✅ test_secret_spec_from_str_implicit_type
  ✅ test_secret_spec_from_dict_explicit_type_no_options
  ✅ test_secret_spec_from_dict_implicit_type_with_options
  ✅ test_role_resolution_source_level_wins
  ✅ test_role_resolution_falls_back_to_decorator_level
  ✅ test_secret_spec_from_dict_rejects_invalid[bad_type]
  ✅ test_secret_spec_from_dict_rejects_invalid[bad_id]
  ✅ test_secret_spec_from_dict_rejects_invalid[bad_options]
  ✅ test_secret_spec_from_dict_rejects_invalid[bad_role]
  ✅ test_secrets_provider_resolution_unknown_backend
  ✅ test_validate_env_vars_across_secrets_rejects_overlap
  ✅ test_validate_env_vars_vs_existing_env_rejects_collision
  ✅ test_validate_env_vars_accepts_typical_keys
  ✅ test_validate_env_vars_rejects_mistyped_keys[1]
  ✅ test_validate_env_vars_rejects_mistyped_keys[bad_key1]
  ✅ test_validate_env_vars_rejects_mistyped_keys[old_school]
  ✅ test_validate_env_vars_rejects_mistyped_values[1]
  ✅ test_validate_env_vars_rejects_mistyped_values[bad_value1]
  ✅ test_validate_env_vars_rejects_mistyped_values[old_school]
  ✅ test_validate_env_vars_rejects_weird_keys[1_]
  ✅ test_validate_env_vars_rejects_weird_keys[hello world]
  ✅ test_validate_env_vars_rejects_weird_keys[hey_arnold!]
  ✅ test_validate_env_vars_rejects_weird_keys[I_\u2665_NY]
  ✅ test_validate_env_vars_rejects_weird_keys[door-]
  ✅ test_validate_env_vars_rejects_weird_keys[METAFLOW_SOMETHING_OR_OTHER]
test.unit.test_system_context
  ✅ test_execution_phase_enum_values
  ✅ test_phase_from_cli_args_none
  ✅ test_phase_from_cli_args_empty
  ✅ test_phase_from_cli_args_run_is_launch
  ✅ test_phase_from_cli_args_resume_is_launch
  ✅ test_phase_from_cli_args_step_is_task
  ✅ test_phase_from_cli_args_init_is_task
  ✅ test_phase_from_cli_args_spin_step_is_task
  ✅ test_phase_from_cli_args_batch_is_trampoline
  ✅ test_phase_from_cli_args_kubernetes_is_trampoline
  ✅ test_phase_from_cli_args_deployment_is_launch
  ✅ test_phase_from_cli_args_unknown_is_launch
  ✅ test_system_context_launch_phase_queries
  ✅ test_system_context_trampoline_phase_queries
  ✅ test_system_context_task_phase_queries
  ✅ test_system_context_initial_values_are_none
  ✅ test_system_context_progressive_update
  ✅ test_system_context_update_overwrites
  ✅ test_system_context_update_invalid_key_raises
  ✅ test_system_context_reset
  ✅ test_system_context_input_paths_initial_none
  ✅ test_system_context_input_paths_update
  ✅ test_decorator_system_ctx_property
  ✅ test_step_decorator_system_ctx_property
  ✅ test_flow_decorator_system_ctx_property
  ✅ test_step_decorator_ctx_variants_are_none
  ✅ test_flow_decorator_ctx_variant_is_none
  ✅ test_step_init_ctx_override
  ✅ test_task_step_completed_ctx_override_success
  ✅ test_task_step_completed_ctx_handles_exception
  ✅ test_task_decorate_ctx_override
  ✅ test_flow_init_ctx_override
  ✅ test_legacy_hook_still_works
  ✅ test_shared_state_publish_and_get
  ✅ test_shared_state_get_missing_namespace
  ✅ test_shared_state_get_missing_key
  ✅ test_shared_state_get_default
  ✅ test_shared_state_has_published_namespace
  ✅ test_shared_state_has_published_key
  ✅ test_shared_state_get_all_published
  ✅ test_shared_state_get_all_published_missing
  ✅ test_shared_state_overwrite_published
  ✅ test_shared_state_multiple_namespaces
  ✅ test_step_isolation_shared_state
  ✅ test_registration_register_and_get_step_decorators
  ✅ test_registration_get_step_decorators_missing_step
  ✅ test_registration_reset_clears_shared_and_decorators
test.unit.test_tutorial_01_02_csv_parsing
  ✅ test_playlist_csv_parsing
  ✅ test_stats_csv_parsing
test.cmd.develop.test_stub_generator.TestStubGenerator
  ✅ test_get_element_name_basic_types
  ✅ test_get_element_name_class_objects
  ✅ test_get_element_name_generic_alias_with_class_objects
  ✅ test_get_element_name_nested_generics
  ✅ test_get_element_name_callable_with_class_args
  ✅ test_get_element_name_forward_references
  ✅ test_get_element_name_string_annotations
  ✅ test_get_element_name_self_reference
  ✅ test_function_stub_generation
  ✅ test_class_stub_generation
  ✅ test_exploit_annotation_method
  ✅ test_imports_and_typing_imports
  ✅ test_safe_module_aliasing
  ✅ test_get_element_name_union_types
  ✅ test_get_element_name_tuple_types
  ✅ test_get_element_name_tuple_with_ellipsis
  ✅ test_get_element_name_callable_with_ellipsis
  ✅ test_get_element_name_newtype
  ✅ test_get_element_name_classvar
  ✅ test_get_element_name_final
  ✅ test_get_element_name_literal
  ✅ test_get_element_name_deeply_nested
  ✅ test_get_element_name_error_handling_none_module
  ✅ test_get_element_name_error_handling_eval_failure
  ✅ test_get_element_name_generic_origin_without_name
  ✅ test_get_element_name_builtin_collections
  ✅ test_get_element_name_type_with_special_chars
  ✅ test_get_element_name_nested_classes
  ✅ test_generator_state_isolation
  ✅ test_get_element_name_nonetype_handling
test.cmd.develop.test_stub_generator
  ✅ test_class_objects_in_generic_types_no_leakage
test.cmd.diff.test_metaflow_diff.TestMetaflowDiff
  ✅ test_extract_code_package
  ✅ test_perform_diff_output_false[True]
  ✅ test_perform_diff_output_false[False]
  ✅ test_perform_diff_output_true
  ✅ test_run_op
  ✅ test_op_patch
test.plugins.conda.test_conda_decorator_unit.TestCondaStepDecorator
  ✅ test_default_attributes
  ✅ test_user_defined_python
  ✅ test_user_defined_packages
  ✅ test_libraries_backward_compat
  ✅ test_disabled_flag
  ✅ test_packages_and_libraries_merged
test.plugins.conda.test_conda_environment_unit.TestManifestConcurrentWrites
  ✅ test_concurrent_writes_no_corruption
test.plugins.conda.test_conda_environment_unit.TestCleanupCondaFile
  ✅ test_cleanup_temp_file
  ✅ test_cleanup_nonexistent_file_no_error
test.plugins.conda.test_parsers.TestRequirementsTxtParser
  ✅ test_simple_package
  ✅ test_multiple_packages
  ✅ test_python_version
  ✅ test_comments_and_blank_lines
  ✅ test_inline_comments
  ✅ test_extras
  ✅ test_direct_reference
  ✅ test_environment_markers_rejected
  ✅ test_invalid_requirement
  ✅ test_multiple_python_specs_rejected
  ✅ test_empty_content
  ✅ test_rye_lockfile_skip
test.plugins.conda.test_parsers.TestCondaEnvironmentYmlParser
  ✅ test_simple_deps
  ✅ test_python_version
  ✅ test_no_version
  ✅ test_comments_skipped
  ✅ test_subsection_rejected
  ✅ test_inline_comments
  ✅ test_empty_deps
  ✅ test_double_equals