From 866a5be1263d4be5bd433fe13d92348a616f8574 Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Wed, 1 Jul 2026 13:18:27 +0200 Subject: [PATCH] Refactor subuser permissions and enhance artifact management --- .../nginx/app/.phpunit.cache/test-results | 2 +- .../edge_gateway_agent_artifact_locator.php | 47 ++++- .../classes/edge_gateway_install_service.php | 42 +++- .../classes/edge_gateway_manager.php | 51 +++++ .../edgegateway/routes/edgeGatewaysRoute.php | 1 + .../nginx/app/objects/subuser_grants_o.php | 4 +- services/nginx/app/objects/subusers_o.php | 22 +- .../resources/edge-gateway-agent/agent.php | 8 +- services/nginx/app/routes/authRoute.php | 153 +++++++++++--- services/nginx/app/routes/passkeysRoute.php | 90 +++++---- services/nginx/app/routes/subusersRoute.php | 188 ++++++++++-------- services/nginx/app/tests/Api/AuthApiTest.php | 61 ++++++ .../app/tests/Api/EdgeGatewayAgentApiTest.php | 9 + .../nginx/app/tests/Api/SubusersApiTest.php | 116 ++++++++++- .../app/tests/Support/Api/ApiFixtures.php | 42 +++- .../EdgeGatewayArtifactLocatorTest.php | 73 ++++++- .../Selfserve/EdgeGatewayManagerUrlTest.php | 4 + .../Selfserve/EdgeGatewayRouteWiringTest.php | 1 + .../EdgeGatewayUpdateLifecycleTest.php | 9 + 19 files changed, 756 insertions(+), 167 deletions(-) diff --git a/services/nginx/app/.phpunit.cache/test-results b/services/nginx/app/.phpunit.cache/test-results index 50afdd1d..6805a7a4 100644 --- a/services/nginx/app/.phpunit.cache/test-results +++ b/services/nginx/app/.phpunit.cache/test-results @@ -1 +1 @@ -{"version":"pest_3.8.6","defects":{"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_self_serve_machine_type__eligibility__summary__and_webhook_endpoints":7,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_defines_reusable_self_serve_wash_and_machine_type_schemas":7,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_redistributes_booked_department_75_net_amounts_using_fixed_pricing_and_wash_subscription_weights":7,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_keeps_classified_booked_department_75_amounts_undistributed_when_no_monthly_basis_exists":8,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_keeps_unclassified_booked_department_75_lines_undistributed_with_warnings":8,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_documents_v2_historical_distribution_and_pricing_history_paths_in_openapi":1,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_defines_new_reusable_v2_schemas_for_normalization_comparison_versioning_and_distribution":1,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_supports_bulk_booked_invoice_line_payloads_with_top_level_department_numbers":7,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_claims_a_slot_atomically_with_nx_and_expiration":8,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_returns_false_when_the_slot_is_already_claimed_and_clamps_ttl_to_one_second":8,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_documents_economic_v2_invoice_paths_in_openapi":1,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_aligns_legacy_compare_schema_with_runtime_payload_by_removing_stale_required_order__ids":1,"P\\Tests\\Unit\\Search\\SystemSearchEntityTypeCoverageTest::__pest_evaluable_it_documents_every_supported_search_entity_type_in_openapi_enum":1,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_system_wide_search_endpoints_in_openapi":1,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_debug__intent_and_parser_metadata_schema_in_openapi":1,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_e_conomic_indexed_customer_matching_and_synonym_behavior":1,"P\\Tests\\Integration\\Database\\DbConnectionTest::__pest_evaluable_it_can_connect_to_a_configured_MySQL_instance_in_integration_mode":1,"P\\Tests\\Integration\\Invoicing\\EconomicV2BackfillAndDistributionIntegrationTest::__pest_evaluable_it_runs_best_effort_backfill_repeatedly_without_introducing_duplicate_same_start_rows":1,"P\\Tests\\Integration\\Invoicing\\EconomicV2BackfillAndDistributionIntegrationTest::__pest_evaluable_it_resolves_version_aware_distribution_payload_shapes_over_a_real_date_range":1,"P\\Tests\\Integration\\Invoicing\\EconomicV2VersioningServiceIntegrationTest::__pest_evaluable_it_creates_closes_and_rotates_fixed_pricing_versions_without_overlap":1,"P\\Tests\\Integration\\Invoicing\\EconomicV2VersioningServiceIntegrationTest::__pest_evaluable_it_tracks_vehicle_and_discount_version_lifecycles_with_closure_semantics":1,"P\\Tests\\Integration\\Permissions\\LegacyPermissionRedisCacheScriptTest::__pest_evaluable_it_keeps_legacy_route_permission_redis_cache_script_green":1,"P\\Tests\\Unit\\Goals\\GoalsOpenApiSpecTest::__pest_evaluable_it_documents_advanced_goals_target_duration_fields_in_openapi":1,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineSchemaConformanceTest::__pest_evaluable_it_documents_the_date_key_in_the_openapi_department_weather_timeline_schema":1,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_builds_timeline_entries_with_mostly__clear_weather_when_forecast_payload_is_empty":8,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_wires_departments_weather_route_through_the_forecast_fallback_path":7,"P\\Tests\\Unit\\Orders\\AttachmentsListManyTest::__pest_evaluable_it_groups_attachments_by_object_id_and_preserves_empty_object_groups":8,"P\\Tests\\Unit\\Orders\\AttachmentsListManyTest::__pest_evaluable_it_keeps_listMany_payload_parity_with_list_for_one_object_id":8,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsOpenApiSpecTest::__pest_evaluable_it_documents_department_weather_target_endpoints_and_reusable_schemas_in_openapi":1,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsOpenApiSpecTest::__pest_evaluable_it_documents_unknown_weather_status_behavior_when_targets_are_missing":1,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_respects_the_1_request_per_second_Shelly_gate_for_back_to_back_requests":8,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_in_progress_self_serve_wash_start_and_machine_relay_fields":1,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_stores_config_json_with_apostrophes_without_violating_json_constraints":8,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_program_selector_is_on__then_turns_off_cleaner_machine_and_selector_relays":7,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_skips_vehicle_type_product_add_when_program_selector_is_off_and_only_disables_configured_relays":7,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_self_serve_machine_wash_included_minutes_in_config_schemas":1,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_workspace_id_is_missing_for_gate_calls":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_channel_id_is_missing_for_gate_calls":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_with_terminal_status_details_when_call_never_reaches_accepted_state":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_hangs_up_when_call_reaches_accepted_state":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_hangs_up_immediately_when_status_transitions_to_accepted":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_maps_legacy_timeout_option_to_documented_ringTimeout_payload_field":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_clamps_derived_ringTimeout_to_Bird_documented_max_when_gate_timeout_is_high":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_passes_documented_hangup_cause_when_provided":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_drops_unsupported_hangup_cause_values_from_request_payload":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_workspace_id_is_missing_for_gate_flash_calls":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_creates_gate_flash_call_with_documented_ringTimeout_payload":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_polls_flash_call_and_succeeds_once_accepted":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_flash_gate_flow_when_terminal_failure_status_is_returned":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_does_not_fallback_to_regular_gate_call_when_flash_succeeds":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_falls_back_to_regular_gate_call_when_flash_fails":8,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_property_gate_lane_commands_and_sanitized_gate_failure_responses":1,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_returns_raw_payload_for_malformed_JSON_responses_and_null_for_empty_responses":8,"P\\Tests\\Unit\\Bird\\BirdRouteWiringTest::__pest_evaluable_it_keeps_Bird_number_and_webhook_routes_intact":7,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_handles_malformed_and_empty_response_bodies_without_throwing_transport_errors":8,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_aggregates_multi_department_slot_statuses_using_worst_severity_and_unknown_fallback_rules":7,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_program_selector_relay_is_online__then_turns_off_cleaner_and_machine_relays":7,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_bills_primary_product_when_selector_relay_is_online_even_if_relay_output_is_off":7,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_documents_all_Bird_voice_call_parity_endpoints_including_gather_recordings_insights_and_log":1,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_documents_flash_hangup_endpoint_and_marks_end_alias_as_deprecated":1,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_defines_request_and_response_schemas_for_Bird_call_command_recording_insight_log_and_flash_payloads":1,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueRouteRegistrationTest::__pest_evaluable_it_registers_collected_invoice_queue_endpoints_in_orderInvoicesRoute":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_uses_a_consistent_unavailable_service_contract_for_missing_queue_dependencies":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_wires_zero_cost_and_zero_quantity_skip_guard_into_transfer_line_builder":7,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_processes_queued_transfer_jobs_to_completion":1,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_deduplicates_active_jobs_per_transfer_target":1,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_rejects_invalid_payloads_without_inserting_queue_rows":1,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_supports_fail_retry_and_reprocess_lifecycle_transitions":1,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_supports_synchronous_fallback_branches_before_queue_enqueue_on_economic_invoice_export_routes":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_keeps_queue_status_endpoints_guarded_while_collected_invoice_export_routes_support_synchronous_fallback":7,"P\\Tests\\Unit\\Invoicing\\UserCollectedInvoiceUpdateRouteValidationTest::__pest_evaluable_it_supports_independent_po__number_and_closed__at_updates_for_PUT__collected_invoices_in_user_route":7,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_returns_pagination_metadata_and_strict_status_handling_for_collected_invoice_queue_list":7,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_enforces_retry_constraints_for_collected_invoice_queue_jobs_before_retry_execution":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_collected_queue_list_metadata_and_strict_status_filter_enum_in_openapi":7,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_builds_a_completed_collected_invoice_queue_summary_from_payload_and_result":8,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_prefers_queue_error_messages_for_failed_jobs_and_keeps_null_safe_outcome_fields":8,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_uses_deterministic_status_message_fallback_when_no_explicit_message_exists":8,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_handles_object_payload_result_values_and_malformed_fields_without_throwing":8,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_ticks_collected_invoice_transfer_queue_from_queue_list_and_status_routes":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_ticks_order_transfer_queue_from_draft_and_invoice_status_routes":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_builds_the_installer_around_the_PHP_agent_artifacts_and_management_polling_config":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_exposes_update_payload__credential_rotation__and_operation_endpoints_without_shell_transport_wiring":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_relay_fallback_and_transport_health_details_without_shell_or_update_runtime_state":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_resolves_edge_agent_artifacts_from_the_source_tree_layout":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_mounted_and_baked_in_artifact_directories_before_repo_fallbacks":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_router_resources_before_mounted_and_baked_in_artifact_directories":7,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_lists_orders_for_an_admin_scoped_user_and_limits_the_results_to_the_permitted_departments":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_lists_only_the_targeted_customer_orders_for_subuser_sessions":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_returns_the_current_auth_and_permission_failures_when_order_listing_is_not_allowed":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_creates_orders_through_the_real_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_order_creation_requests":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_updates_orders_through_the_primary_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_reassigns_invoice_collections_when_changing_an_order_across_the_draft_customer_boundary":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_supports_legacy_field_value_metadata_updates_through_the_primary_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_updates_through_the_primary_order_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_updates_orders_through_the_legacy_alias_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_supports_legacy_field_value_metadata_updates_through_the_alias_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_updates_through_the_legacy_alias_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_unsupported_legacy_field_value_updates_on_both_update_endpoints":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_deletes_orders_through_the_real_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_order_delete_requests":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_regenerates_attached_wash_certificates_when_certificate_metadata_changes_through_the_primary_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_regenerates_attached_wash_certificates_for_legacy_field_value_updates_through_the_alias_endpoint":8,"P\\Tests\\Api\\ApiCoverageManifestTest::__pest_evaluable_it_keeps_every_selected_API_operation_covered_by_happy_path_and_failure_tests":8,"P\\Tests\\Api\\ApiCoverageManifestTest::__pest_evaluable_it_keeps_the_OpenAPI_manifest_entries_aligned_with_the_API_spec":8,"P\\Tests\\Api\\ApiFixturesCleanupTest::__pest_evaluable_it_removes_generated_customer_traces_during_fixture_cleanup":8,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_in_with_valid_customer_credentials":8,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_login_payloads_and_credentials":8,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_returns_the_cached_auth_session_payload_for_a_valid_token":8,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_includes_economic_runtime_config_for_uncached_auth_sessions":8,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_auth_session_tokens":8,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_out_and_invalidates_the_token_for_future_session_calls":8,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_out_and_invalidates_cached_subuser_sessions":8,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_logout_tokens":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_the_raw_202_gather_webhook_contract_over_HTTP":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_still_prompts_for_department_selection_when_only_one_department_is_eligible":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_accepts_the_legacy_initial_webhook_body_with_top_level_call_identifiers":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_native_flow_gather_data_after_a_top_level_department_selection_when_distinct_gate_choices_exist":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_opens_the_gate_immediately_after_a_top_level_department_selection_when_entrance_and_exit_share_the_same_gate":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_uses_a_multi_digit_gather_contract_when_10_departments_are_eligible":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_a_raw_400_transport_error_for_malformed_webhook_payloads":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_lists_only_visible_departments_and_can_return_a_single_department_with_the_slack_webhook":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_department_listing_when_the_permission_is_missing":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_creates_departments_through_the_real_endpoint":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_create_requests":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_updates_departments_through_the_real_endpoint":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_update_requests":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_lists_department_categories_for_a_department":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_category_requests":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_lists_the_draft_customer_config_entry_in_economic_config_responses":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_round_trips_the_draft_customer_config_value_through_economic_config_updates":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_order_draft_exports_for_the_configured_draft_customer":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_booked_invoice_exports_for_the_configured_draft_customer":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_collected_invoice_exports_for_the_configured_draft_customer":8,"P\\Tests\\Api\\PingApiTest::__pest_evaluable_it_returns_the_ping_contract":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_setup_required_error_when_department_terminal_readers_are_requested_without_terminal_setup":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_sends_a_Stripe_invoice_by_email_and_persists_the_hosted_invoice_association":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_conflict_when_a_Stripe_hosted_invoice_is_already_active_for_the_order":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_allows_sending_a_new_Stripe_hosted_invoice_when_the_existing_association_is_already_terminal":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_voids_an_unpaid_Stripe_hosted_invoice_and_clears_the_local_order_association":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_refuses_to_cancel_a_paid_Stripe_hosted_invoice":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_setup_required_error_when_creating_a_payment_intent_for_a_department_without_terminal_setup":8,"P\\Tests\\Api\\VehiclesApiTest::__pest_evaluable_it_returns_the_newest_vehicle_last__order__id_that_still_has_order_items":8,"P\\Tests\\Api\\VehiclesApiTest::__pest_evaluable_it_returns_a_null_vehicle_last__order__id_when_no_order_with_items_exists":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_syncs_gateway_snapshots_into_cached_list_payloads_and_refreshes_fleet_usage":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_keeps_only_the_module_facade_in_the_global_classes_directory_and_conditionally_loads_module_routes":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_install_script_urls_with_the_compose_edge_gateway_artifacts_and_forwarded_https_scheme":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_builds_the_installer_around_the_compose_stack_artifacts_and_management_polling_config":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_exposes_update_payload__credential_rotation__cancel_endpoints__and_operation_endpoints_without_shell_transport_wiring":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_the_v2_operator_facing_edge_gateway_routes":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewaySchemaBootstrapTest::__pest_evaluable_it_defines_the_v2_edge_gateway_schema_bootstrap_tables":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewaySchemaBootstrapTest::__pest_evaluable_it_stores_operation_metadata_and_event_timelines_for_management_workflows":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_prefers_EDGE__PUBLIC__API__URL_when_explicitly_configured":8,"P\\Tests\\Api\\PlateScannersApiTest::__pest_evaluable_it_returns_the_updated_lane_id_after_editing_a_scanner_whose_null_lane_was_already_cached":8,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_serves_installer_artifacts_and_recovers_gateway_runtime_status_after_fresh_heartbeats":8,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_polls_operations_and_commands__submits_results__and_records_broker_presence_for_task_pages":8,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_builds_broker_backlog_and_completes_gateway_operations_through_broker_endpoints":8,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_creates_install_tokens__tracks_installer_status__and_exposes_claimed_gateway_detail_to_authorized_operators":8,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_manages_edge_gateway_metadata__bindings__operations__sessions__rotation__cutover__and_deletion":8,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_assembles_tasks__logs__statistics__operations__commands__and_shell_lifecycle_state_from_persisted_records":1,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_rejects_invalid_edge_broker_shared_secrets":8,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_rejects_operator_edge_routes_when_module_permission_or_department_access_is_missing":8,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_rejects_missing_and_invalid_edge_agent_tokens":8,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_persists_gateway_cutover_relay_bindings_used_by_self_serve_Shelly_dispatch":1,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_validates_broker_sessions_and_ingests_presence__telemetry__logs__and_shell_lifecycle_data":8,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_rejects_shell_session_creation_while_broker_presence_is_unavailable":8,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_ignores_and_soft_deletes_edge_gateways_whose_department_no_longer_exists":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_appends_forwarded_ports_when_the_forwarded_host_omits_them":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_websocket_broker_urls_on_the_traefik_broker_path":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_localhost_websocket_broker_urls_on_the_local_traefik_api_prefix":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_keeps_root_host_api_urls_unprefixed_when_the_request_is_not_under_the_local_api_alias":8,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_resolves_simulator_gateway_service_bindings_from_lane_relay_slots":7,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_overtime_minutes_when_a_saved_shift_end_extends_past_the_approved_original_end":7,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_unapproved_overtime_from_a_bounded_shift_updateTime_fallback":7,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_caps_current_slot_hours_to_elapsed_minutes_and_zeroes_future_slots":7,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_round_trips_the_default_distribution_department_config_value_through_economic_config_updates":8,"P\\Tests\\Unit\\Replication\\ReplicationSecretBoxTest::__pest_evaluable_it_encrypts_replication_secrets_without_storing_plaintext":8,"P\\Tests\\Unit\\Replication\\ReplicationSecretBoxTest::__pest_evaluable_it_builds_active_database_and_redis_config_from_encrypted_bootstrap_snapshots":8,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_does_not_require_replica_SQL_threads_before_database_provisioning_configures_them":7,"P\\Tests\\Unit\\Invoicing\\EconomicDraftCustomerOpenApiSpecTest::__pest_evaluable_it_documents_transaction_draft_customer_config_and_auth_runtime_fields_in_all_tracked_openapi_copies":1,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_MinIO_free_space_and_catch_up_math_safely":7,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_counts_complaint_rows_by_department_and_created__at_reporting_range":1,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_updates_and_deletes_complaint_rows":1,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_parses_created__by__name_from_the_users_table":1,"P\\Tests\\Integration\\DailyReports\\DepartmentOutsideHoursStatisticsServiceIntegrationTest::__pest_evaluable_it_integrates_orders__xlvask__and_self_serve_into_one_outside_hours_summary_with_missing_hours_diagnostics":1,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_persists_install_session_updates_and_derives_gateway_runtime_status_from_heartbeats":1,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_processes_only_collected_invoice_jobs_and_respects_the_manual_batch_limit":1,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_the_configured_database_in_integration_mode":1,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_redis_in_integration_mode_when_configured":1,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_minio_in_integration_mode_when_configured":1,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_Coolify_service_payloads_from_raw_compose_without_a_service_type":7,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_selected_Coolify_project_and_resolves_server_UUID_from_the_instance_default":8,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_Coolify_GitHub_App_application_payloads_so_pulls_use_the_app_token":7,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_self_contained_Coolify_API_Dockerfile_for_API_applications":7,"P\\Tests\\Unit\\Tooling\\ComposerEntrypointTest::__pest_evaluable_it_checks_PSR_HTTP_message_interfaces_before_trusting_a_Composer_vendor_tree":1,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_defines_release_manager_schema__routes__permissions__and_system_status_integration_hooks":7,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_requires_non_default_release_channel_runtime_URLs_and_preserves_load_balancer_paths":7,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_wires_MinIO_replication_through_routes_and_bootstrap_snapshots":7,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_defines_Coolify_schema__route_permissions__and_replication_integration_hooks":7,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_chooses_a_requested_runtime_channel_only_when_it_is_available_to_the_principal":8,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_rejects_standalone_order_booking_completion_outside_POS":8,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_allows_linked_POS_order_booking_completion_for_mobile_POS_compatibility":8,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_accepts_numeric_safety_seal_strings_when_completing_a_linked_POS_order_booking":8,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_disables_the_legacy_complete_wash_without_certificate_route":8,"P\\Tests\\Api\\OrderBookingsUpdateApiTest::__pest_evaluable_it_detaches_an_order_booking_and_clears_the_matching_order_link":8,"P\\Tests\\Api\\OrderBookingsUpdateApiTest::__pest_evaluable_it_keeps_the_linked_order_when_order__id_is_omitted_from_an_order_booking_update":8,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_allows_explicit_runtime_selection_of_any_enabled_release_channel":7,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_authentication_before_checking_in_progress_wash_permissions":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_reports_both_elevated_and_customer_self_serve_permissions_when_lane_polling_is_not_allowed":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_allows_customer_self_serve_permission_to_view_their_own_in_progress_wash_details":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_redacts_another_customers_in_progress_wash_from_customer_self_serve_lane_polling":8,"P\\Tests\\Api\\SelfserveFixtureApiTest::__pest_evaluable_it_creates_a_comprehensive_self_serve_API_scenario_with_demo_relays":1,"P\\Tests\\Api\\SelfserveZZZShellyGuardApiTest::__pest_evaluable_it_did_not_record_any_real_Shelly_request_attempts_during_self_serve_API_tests":8,"P\\Tests\\Api\\ApiFixturesCleanupTest::__pest_evaluable_it_restores_preserved_module_config_rows_during_fixture_cleanup":8,"P\\Tests\\Api\\BrandingApiTest::__pest_evaluable_it_creates_lists_and_updates_complete_branding_values":8,"P\\Tests\\Api\\BrandingApiTest::__pest_evaluable_it_rejects_branding_requests_without_permissions_or_valid_input":8,"P\\Tests\\Api\\BrandingApiTest::__pest_evaluable_it_assigns_and_clears_department_branding_for_superusers":8,"P\\Tests\\Api\\BrandingApiTest::__pest_evaluable_it_rejects_invalid_department_branding_assignments":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_previews_monthly_split_changes_without_moving_orders_or_creating_collections":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_splits_a_selected_March_and_April_collected_invoice_into_monthly_collections":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_sets_closed__at_to_month_end_when_split_month_has_ended":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_splits_the_whole_affected_collection_even_when_only_one_month_is_selected":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_does_not_affect_booked_collected_invoices":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_skips_draft_linked__Stripe__and_single_month_collections":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_rejects_invalid_monthly_split_date_ranges":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_allows_superusers_to_filter_archived_departments":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_does_not_allow_regular_department_listings_to_reveal_archived_departments_through_filters":8,"P\\Tests\\Api\\EdgeGatewayConfigApiTest::__pest_evaluable_it_stores_broker_settings_in_edge_gateway_module_config_and_uses_them_for_shell_sessions":8,"P\\Tests\\Api\\EdgeGatewayConfigApiTest::__pest_evaluable_it_returns_broker_diagnostics_for_the_current_edge_gateway_module_config_values":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_defaults_order_PO_from_a_linked_booking_when_creating_without_an_order_PO":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_keeps_an_explicit_order_PO_when_creating_a_linked_order":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_defaults_blank_order_PO_from_a_linked_booking_on_order_updates":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_requires_explicit_confirmation_before_deleting_protected_orders":8,"P\\Tests\\Api\\PlateScannersApiTest::__pest_evaluable_it_rejects_plate_scanner_edits_when_the_permission_is_missing":8,"P\\Tests\\Api\\ReferenceSuggestionsApiTest::__pest_evaluable_it_returns_ranked_POS_reference_suggestions_from_bookings__orders__and_customer_vehicles":8,"P\\Tests\\Api\\ReferenceSuggestionsApiTest::__pest_evaluable_it_orders_reference_suggestions_by_match_relevance_before_context_and_frequency":8,"P\\Tests\\Api\\ReferenceSuggestionsApiTest::__pest_evaluable_it_enforces_authentication__list_permission__and_department_access_for_reference_suggestions":8,"P\\Tests\\Api\\SelfserveFixtureApiTest::__pest_evaluable_it_creates_self_serve_invoice_orders_for_the_lane_customer_with_draft_customer_and_driver_metadata_attached":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_allows_customer_self_serve_permission_to_execute_START_without_department_access_when_department_and_lane_are_enabled":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_customer_START_when_department_self_serve_is_disabled":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_customer_START_when_lane_self_serve_is_disabled":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_a_customer_STOP_for_another_customers_active_lane":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_still_allows_elevated_operators_with_department_access_to_execute_lane_commands":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_keeps_operator_only_commands_elevated_only_for_customers_and_reports_command_permissions":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_authentication_before_checking_the_current_customers_active_self_serve_wash":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_customer_self_serve_permission_before_checking_my_active_wash":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_returns_the_authenticated_customers_active_self_serve_wash_without_requiring_a_lane_id":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_returns_404_when_the_authenticated_customer_has_no_active_self_serve_wash":8,"P\\Tests\\Unit\\Selfserve\\SelfserveEligibilityLaneAccessTest::__pest_evaluable_it_authorizes_customer_eligibility_preview_lanes_before_returning_task_attachments":8,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_allows_the_customer_self_serve_start_sequence_without_department_access":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_derives_allowed_services_from_v2_session_task_snapshots_when_task_rows_are_not_legacy_records":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_keeps_long_generated_task_descriptions_when_refreshing_vehicle_eligibility_snapshots":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_marks_the_active_customer_session_relay_enabled_after_machine_relay_enable":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_does_not_create_an_active_wash_preview_session_from_read_only_eligibility_checks":1,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_the_all_in_one_self_serve_studio_replacement_API":7,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_derives_allowed_services_from_published_v2_config_task_snapshots_when_no_session_exists_yet":1,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_persists_superuser_new_customer_notification_preferences_and_includes_them_in_session_payloads":1,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_requires_superuser_permission_before_saving_superuser_new_customer_notification_preferences":1,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_sends_new_customer_registration_notifications_only_to_opted_in_superusers":1,"P\\Tests\\Unit\\Bird\\DepartmentGatesPhoneCallOpenTest::__pest_evaluable_it_forwards_phone_number_and_call_duration_threshold_to_the_Bird_gate_helper":8,"P\\Tests\\Unit\\Bird\\DepartmentGatesPhoneCallOpenTest::__pest_evaluable_it_wraps_Bird_helper_failures_and_reports_them_to_Slack":8,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_invalidates_cached_session_payloads_after_notification_preferences_change":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_creates_a_durable_wash_session_from_customer_start_after_read_only_eligibility":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_refreshes_an_active_wash_summary_with_vehicle_type_without_a_namespace_error":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_does_not_create_a_replacement_session_when_refreshing_a_completed_summary_with_vehicle_type":1,"P\\Tests\\Api\\CollectedInvoiceMoveCustomerApiTest::__pest_evaluable_it_moves_a_collected_invoice_collection_and_all_attached_orders_to_another_customer":1,"P\\Tests\\Api\\CollectedInvoiceMoveCustomerApiTest::__pest_evaluable_it_rejects_moving_a_collection_that_already_has_an_external_invoice_reference":1,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_turns_off_the_program_picker_on_deferred_start_when_the_frontend_selected_manual_wash":7,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_does_not_let_backend_machine_eligibility_override_a_frontend_manual_wash_selection":7,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_normal_STOP_completion_skips_duplicate_completion_relay_cleanup_after_STOP_already_disabled_relays":7,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_does_not_store_scanner_images_before_LPR_recognition":7,"P\\Tests\\Api\\ModuleScannerLprApiTest::__pest_evaluable_it_accepts_multipart_scanner_images_and_forwards_them_to_Plate_Recognizer_as_a_temp_file_upload":1,"P\\Tests\\Api\\ModuleScannerLprApiTest::__pest_evaluable_it_rejects_scanner_LPR_requests_without_an_image_before_contacting_Plate_Recognizer":1,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_a_streamed_file_hash_for_multipart_upload_file_result_cache_keys":7},"times":{"P\\Tests\\Unit\\Auth\\CreateTokenTest::__pest_evaluable_it_creates_a_64_char_auth_token_for_an_existing_user":0.11,"P\\Tests\\Unit\\Auth\\CreateTokenTest::__pest_evaluable_it_throws_a_clear_exception_when_customer_user_is_missing":0.017,"P\\Tests\\Unit\\Auth\\LegacyAuthScriptParityTest::__pest_evaluable_it_keeps_passkey_challenge_legacy_script_green_during_migration":0.017,"P\\Tests\\Unit\\Auth\\LegacyAuthScriptParityTest::__pest_evaluable_it_keeps_register_CVR_legacy_script_green_during_migration":0.018,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_deterministic_department_digit_map_and_caps_to_9_options":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_resolves_department_ids_by_selected_digit":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_resolves_gate_type_digit_to_entrance_or_exit":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_stores__loads_and_clears_ivr_state_with_ttl":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_validates_state_caller_fingerprint_matching":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_department_and_gate_prompts":0,"P\\Tests\\Unit\\Permissions\\PermissionNodeDefinitionTest::__pest_evaluable_it_creates_permission_nodes_linked_to_subuser_permission_keys":0,"P\\Tests\\Unit\\Permissions\\PermissionNodeDefinitionTest::__pest_evaluable_it_rejects_empty_permission_definitions":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_normalizes_button_arrays__json_and_csv_inputs":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_rejects_invalid_button_inputs":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_normalizes_vehicle_type_values_and_null_semantics":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_rejects_invalid_vehicle_type_values":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_rejects_non_numeric_vehicle_type_strings":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_keeps_lane_service_enum_contract_for_MACHINE":0,"P\\Tests\\Unit\\Subusers\\SubuserGrantInitializationTest::__pest_evaluable_it_initializes_booking_node_grants_without_DB_dependency":0,"P\\Tests\\Unit\\Subusers\\SubuserGrantInitializationTest::__pest_evaluable_it_initializes_selfserve_node_grants_without_DB_dependency":0,"P\\Tests\\Unit\\Subusers\\SubusersRoutePermissionLinkTest::__pest_evaluable_it_keeps_subusers_route_list_permission_linked_to_SUBUSERS__LIST_node":0,"P\\Tests\\Unit\\Search\\SystemSearchEntityTypeCoverageTest::__pest_evaluable_it_keeps_route_and_service_entity_type_registries_in_sync_with_expanded_coverage":0.001,"P\\Tests\\Unit\\Search\\SystemSearchEntityTypeCoverageTest::__pest_evaluable_it_documents_every_supported_search_entity_type_in_openapi_enum":0.006,"P\\Tests\\Unit\\Search\\SystemSearchEconomicCustomerIndexWiringTest::__pest_evaluable_it_wires_local_e_conomic_customer_index_into_customer_related_search_entities":0.001,"P\\Tests\\Unit\\Search\\SystemSearchEconomicCustomerIndexWiringTest::__pest_evaluable_it_registers_cron_tasks_that_keep_the_e_conomic_search_index_refreshed":0,"P\\Tests\\Unit\\Search\\SystemSearchInvalidationHooksTest::__pest_evaluable_it_marks_system_search_cache_dirty_from_generic_db_object_mutation_flows":0.001,"P\\Tests\\Unit\\Search\\SystemSearchInvalidationHooksTest::__pest_evaluable_it_marks_system_search_cache_dirty_from_object_property_mutations":0,"P\\Tests\\Unit\\Search\\SystemSearchInvalidationHooksTest::__pest_evaluable_it_marks_system_search_cache_dirty_when_module_config_values_change":0,"P\\Tests\\Unit\\Search\\SystemSearchInvalidationHooksTest::__pest_evaluable_it_registers_cron_maintenance_task_for_system_search_cache":0.001,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_redacts_obvious_sensitive_fragments_before_sending_query_to_intent_parser":0.001,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_builds_payload_with_redacted_query_and_parses_strict_JSON_output":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_falls_back_safely_when_OpenAI_is_disabled":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_handles_malformed_OpenAI_response_payloads_without_throwing":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_uses_parser_cache_for_identical_query_and_allowed_type_combinations":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_caps_alias_and_hint_payloads_from_OpenAI_and_filters_hints_to_allowed_types":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_system_wide_search_endpoints_in_openapi":0.001,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_debug__intent_and_parser_metadata_schema_in_openapi":0.001,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_e_conomic_indexed_customer_matching_and_synonym_behavior":0,"P\\Tests\\Unit\\Search\\SystemSearchRouteBehaviorTest::__pest_evaluable_it_normalizes_type_lists_from_csv_json_and_arrays":0.001,"P\\Tests\\Unit\\Search\\SystemSearchRouteBehaviorTest::__pest_evaluable_it_parses_booleans_and_clamps_integers_using_route_defaults":0.001,"P\\Tests\\Unit\\Search\\SystemSearchRouteBehaviorTest::__pest_evaluable_it_exposes_expected_searchable_entity_types":0,"P\\Tests\\Unit\\Search\\SystemSearchRouteWiringTest::__pest_evaluable_it_registers_system_wide_search_GET_and_POST_endpoints_with_intent_debug_support":0.001,"P\\Tests\\Unit\\Search\\SystemSearchRouteWiringTest::__pest_evaluable_it_registers_superuser_cache_clear_and_rebuild_endpoints_for_system_search":0,"P\\Tests\\Unit\\Search\\SystemSearchRouteWiringTest::__pest_evaluable_it_passes_permission_and_own_scope_context_into_system_search_service":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_does_not_invoke_intent_parser_when_lexical_confidence_is_already_high":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_invokes_parser_on_low_confidence_lexical_results_and_applies_hints_only_boosts":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_never_lets_parser_entity_hints_override_explicit_include_filters":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_returns_fallback_parser_metadata_when_parser_fails_gracefully":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_scopes_query_cache_by_permission_context_to_avoid_cross_user_cache_leakage":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_caps_AI_driven_expanded_terms_to_prevent_query_amplification":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_expands_danish_discount_wording_into_lexical_discount_synonyms":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_invokes_parser_for_intent_driven_natural_language_queries_even_when_lexical_score_is_high":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_uses_association_hints_to_pull_related_customer_records_from_non_customer_matches":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_prefers_newer_records_when_relevance_scores_are_comparable":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_keeps_explicit_identifier_matches_ahead_of_newer_but_weaker_records":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_promotes_invoices_orders_order_bookings_and_customers_in_ranking":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_never_prioritizes_cancelled_bookings_over_active_bookings":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_heavily_demotes_configured_low_priority_entity_types_in_ranking":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_tokenizes_unicode_names_without_stripping_non_ascii_letters":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_does_not_treat_explicit_identifier_queries_as_intent_driven":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_requires_broader_term_coverage_for_multi_word_scoring":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_enriches_object_attachment_results_with_associated_customer_context":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_includes_the_economic_customer_index_in_cache_dependencies_for_customer_scoped_results":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_falls_back_to_invoice_date_ranges_when_invoice_names_are_missing":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_derives_xlvask_customer_numbers_only_from_digits_only_extern_ids":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_replaces_unnamed_user_titles_with_the_customer_context_name":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_uses_the_goal_criteria_label_for_department_goal_titles":0,"P\\Tests\\Integration\\Search\\SystemSearchCacheIntegrationTest::__pest_evaluable_it_reuses_parser_cache_entries_for_repeated_natural_language_intent_requests":0.129,"P\\Tests\\Integration\\Search\\SystemSearchCacheIntegrationTest::__pest_evaluable_it_clears_parser_cache_namespace_via_clearAll_to_force_a_fresh_parse":0,"P\\Tests\\Integration\\Search\\SystemSearchCacheIntegrationTest::__pest_evaluable_it_bumps_per_table_cache_versions_when_a_dirty_table_marker_is_registered":0.05,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_falls_back_to_system_orders_for_fixed_pricing_when_regular_orders_yield_no_customers":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_falls_back_to_system_orders_for_wash_subscriptions_when_regular_orders_yield_no_customers":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CliBackfillCommandTest::__pest_evaluable_it_registers_economic_v2_backfill_command_in_cli_dispatcher":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2CliBackfillCommandTest::__pest_evaluable_it_provides_a_backfill_cron_script_entrypoint":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_returns_exact__match_when_totals_lines_and_departments_are_identical":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_returns_total__mismatch_when_only_totals_differ":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_detects_line_level_mismatches_for_quantity_and_price":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_detects_departmental_distribution_mismatches":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_returns_missing__target_when_draft_or_booked_target_is_unavailable":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2LineNormalizerTest::__pest_evaluable_it_normalizes_draft_invoice_lines_including_departmental_distributions":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2LineNormalizerTest::__pest_evaluable_it_marks_text_only_zero_value_lines_as_non_billable_and_keeps_deterministic_key":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2LineNormalizerTest::__pest_evaluable_it_normalizes_booked_invoices_and_computes_net_total_delta_from_lines":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2LineNormalizerTest::__pest_evaluable_it_contains_internal_normalization_path_with_departmental_metadata_support":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_documents_economic_v2_invoice_paths_in_openapi":0.003,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_documents_v2_historical_distribution_and_pricing_history_paths_in_openapi":0.002,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_aligns_legacy_compare_schema_with_runtime_payload_by_removing_stale_required_order__ids":0.003,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_defines_new_reusable_v2_schemas_for_normalization_comparison_versioning_and_distribution":0.003,"P\\Tests\\Unit\\Invoicing\\EconomicV2RevenueAndBarredSupportTest::__pest_evaluable_it_supports_barred_filtering_when_listing_e_conomic_customers":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RevenueAndBarredSupportTest::__pest_evaluable_it_implements_a_dedicated_v2_e_conomic_revenue_statistics_service_and_route":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_registers_all_collected_invoice_economic_v2_routes_with_explicit_permissions":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_registers_version_aware_distribution_and_pricing_history_v2_routes":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_caches_v2_distribution_responses_with_a_configurable_redis_ttl":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_writes_fixed_pricing_versions_from_create_and_delete_flows":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_writes_vehicle_subscription_versions_for_create_update_delete_flows":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_writes_discount_override_versions_from_superuser_discounts_route":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_keeps_legacy_compare_endpoint_path_for_backward_compatibility":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2VersioningServiceStructureTest::__pest_evaluable_it_implements_effective_range_lifecycle_methods_for_all_versioned_entities":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2VersioningServiceStructureTest::__pest_evaluable_it_closes_previous_active_interval_before_inserting_a_new_version":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2VersioningServiceStructureTest::__pest_evaluable_it_includes_best_effort_backfill_with_provenance_and_confidence_metadata":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2VersioningServiceStructureTest::__pest_evaluable_it_anchors_historical_resolution_on_order_created__at_timestamps_in_distribution_service":0,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_guards_against_empty_order_ids_in_net_amount_calculation":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_guards_against_empty_customer_arrays_in_date_range_transaction_fetches":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_uses_centralized_duplicate_filtering_for_possible_duplicate_detection":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteCacheHelpersTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_clamps_negative_ttl_to_zero":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteCacheHelpersTest::__pest_evaluable_it_builds_deterministic_cache_keys_per_scope_and_date_range":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteCacheHelpersTest::__pest_evaluable_it_falls_back_to_resolver_directly_when_cache_ttl_is_disabled":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_requires_superuser_permission_for_invoicing_period_distribution_all_endpoint":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_uses_shared_date_range_normalization_across_invoicing_period_endpoints":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodUtilsTest::__pest_evaluable_it_normalizes_a_valid_invoicing_date_range_to_full_day_timestamps":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodUtilsTest::__pest_evaluable_it_rejects_invalid_date_formats":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodUtilsTest::__pest_evaluable_it_rejects_descending_date_ranges":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodUtilsTest::__pest_evaluable_it_finds_duplicate_orders_regardless_of_original_input_order":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_runs_best_effort_backfill_when_fixed_pricing_version_history_is_empty":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_self_serve_conditions_with_combined_AND_and_OR_semantics":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_prefers_condition_results_over_question_answers_when_evaluating_task_gates":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_self_serve_machine_type__eligibility__summary__and_webhook_endpoints":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_defines_reusable_self_serve_wash_and_machine_type_schemas":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_machine_types__eligibility__summaries__and_machine_start_webhook_routes":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_keeps_machine_type_support_wired_into_lanes__tasks__and_conditions_routes":0.001,"P\\Tests\\Unit\\N8n\\N8nRouteHelpersTest::__pest_evaluable_it_normalizes_webhook_methods_and_falls_back_to_POST_for_unsupported_verbs":0.001,"P\\Tests\\Unit\\N8n\\N8nRouteHelpersTest::__pest_evaluable_it_filters_request_parameters_down_to_the_allowed_n8n_query_keys":0,"P\\Tests\\Unit\\N8n\\N8nRouteWiringTest::__pest_evaluable_it_registers_workflow_lifecycle_endpoints_for_the_n8n_module":0.001,"P\\Tests\\Unit\\N8n\\N8nRouteWiringTest::__pest_evaluable_it_registers_execution_and_webhook_trigger_endpoints_for_the_n8n_module":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_redistributes_booked_department_75_net_amounts_using_fixed_pricing_and_wash_subscription_weights":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_keeps_classified_booked_department_75_amounts_undistributed_when_no_monthly_basis_exists":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_keeps_unclassified_booked_department_75_lines_undistributed_with_warnings":0,"P\\Tests\\Unit\\Invoicing\\EconomicEndpointUrlEncodingTest::__pest_evaluable_it_encodes_raw_filter_query_values_that_include_timestamps":0,"P\\Tests\\Unit\\Invoicing\\EconomicEndpointUrlEncodingTest::__pest_evaluable_it_avoids_double_encoding_query_values_that_are_already_escaped":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_supports_bulk_booked_invoice_line_payloads_with_top_level_department_numbers":0,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_claims_a_slot_atomically_with_nx_and_expiration":0,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_returns_false_when_the_slot_is_already_claimed_and_clamps_ttl_to_one_second":0,"P\\Tests\\Unit\\Bookings\\OrderBookingRouteIdempotencyGuardTest::__pest_evaluable_it_guards_order_booking_creation_with_redis_backed_idempotency":0.001,"P\\Tests\\Unit\\DynamicImages\\DynamicImagePreRenderCronWiringTest::__pest_evaluable_it_registers_dynamic_image_pre_render_cron_task_and_related_helpers":0.001,"P\\Tests\\Integration\\Database\\DbConnectionTest::__pest_evaluable_it_can_connect_to_a_configured_MySQL_instance_in_integration_mode":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicV2BackfillAndDistributionIntegrationTest::__pest_evaluable_it_runs_best_effort_backfill_repeatedly_without_introducing_duplicate_same_start_rows":0.013,"P\\Tests\\Integration\\Invoicing\\EconomicV2BackfillAndDistributionIntegrationTest::__pest_evaluable_it_resolves_version_aware_distribution_payload_shapes_over_a_real_date_range":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicV2VersioningServiceIntegrationTest::__pest_evaluable_it_creates_closes_and_rotates_fixed_pricing_versions_without_overlap":0.015,"P\\Tests\\Integration\\Invoicing\\EconomicV2VersioningServiceIntegrationTest::__pest_evaluable_it_tracks_vehicle_and_discount_version_lifecycles_with_closure_semantics":0.014,"P\\Tests\\Integration\\Permissions\\LegacyPermissionRedisCacheScriptTest::__pest_evaluable_it_keeps_legacy_route_permission_redis_cache_script_green":0.01,"P\\Tests\\Unit\\Permissions\\AllowOwnOrDepartmentAccessForbiddenTest::__pest_evaluable_it_returns_both_own_and_elevated_permissions_when_both_are_missing":0,"P\\Tests\\Unit\\Permissions\\AllowOwnOrDepartmentAccessForbiddenTest::__pest_evaluable_it_returns_only_elevated_permission_when_own_permission_exists_but_own_context_fails":0,"P\\Tests\\Unit\\Permissions\\AllowOwnOrDepartmentAccessForbiddenTest::__pest_evaluable_it_allows_elevated_permission_path_without_forbidden_and_validates_department_access":0,"P\\Tests\\Unit\\Permissions\\ForbiddenResponseWiringTest::__pest_evaluable_it_routes_and_trait_use_forbidden_responses_for_permission_and_ownership_denials":0.001,"P\\Tests\\Unit\\Permissions\\GroupPermissionSessionInvalidationWiringTest::__pest_evaluable_it_invalidates_related_user_permission_and_auth_session_caches_when_group_permissions_change":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_parses_advanced_target_duration_from_snake__case_fields":0.001,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_parses_advanced_target_duration_from_camelCase_aliases":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_normalizes_ENTIRE__DURATION_to_ignore_target__duration__every":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_defaults_recurring_target__duration__every_to_1_when_omitted":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_keeps_strict_legacy_mode_when_target__duration_is_invalid":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_computes_weekly_target_using_touched_ISO_weeks_for_March_2026":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_applies_target__duration__every_for_weekly_cadence":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_prorates_ENTIRE__DURATION_target_by_overlap_days":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_splits_advanced_target_by_override_weights_per_department":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_preserves_legacy_target_behavior_when_target__duration_is_missing":0,"P\\Tests\\Unit\\Goals\\GoalsLegacyRendererScriptsTest::__pest_evaluable_it_keeps_legacy_monthly_renderer_script_green":0.019,"P\\Tests\\Unit\\Goals\\GoalsLegacyRendererScriptsTest::__pest_evaluable_it_keeps_legacy_department_daily_renderer_script_green":0.021,"P\\Tests\\Unit\\Goals\\GoalsOpenApiSpecTest::__pest_evaluable_it_documents_advanced_goals_target_duration_fields_in_openapi":0.001,"P\\Tests\\Unit\\Workfeed\\WorkfeedClientConformanceTest::__pest_evaluable_it_uses_company_scoped_workfeed_endpoints_and_raw_Authorization_header":0.001,"P\\Tests\\Unit\\Workfeed\\WorkfeedClientConformanceTest::__pest_evaluable_it_normalizes_documented_shift_query_parameters":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedConfigRouteWiringTest::__pest_evaluable_it_registers_module_config_endpoints_for_workfeed":0.001,"P\\Tests\\Unit\\Workfeed\\WorkfeedRouteHelpersTest::__pest_evaluable_it_filters_request_parameters_down_to_the_allowed_workfeed_query_keys":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedRouteWiringTest::__pest_evaluable_it_registers_employee_and_department_endpoints_for_the_workfeed_module":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedRouteWiringTest::__pest_evaluable_it_registers_shift_endpoints_for_the_workfeed_module":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_calculates_workfeed_employee_hours_for_the_hour_slot_based_on_overlap":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_extracts_department_id_from_supported_workfeed_shift_shapes":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_normalizes_wrapped_workfeed_collections_from_common_response_keys":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineSchemaConformanceTest::__pest_evaluable_it_includes_a_date_key_in_department_weather_timeline_entries":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineSchemaConformanceTest::__pest_evaluable_it_documents_the_date_key_in_the_openapi_department_weather_timeline_schema":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_builds_a_timeline_range_from_start_of_yesterday_to_end_of_today":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_builds_a_timeline_range_relative_to_an_explicit_selected_date_override":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_calculates_workfeed_employee_hours_across_multiple_departments_for_one_hour_slot":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_normalizes_department_id_input_from_scalar_csv_and_nested_array_values":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_builds_a_timeline_range_relative_to_explicit_date__from_and_date__to_override":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_resolves_forecast_day_count_for_a_given_timeline_range_with_sane_limits":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_resolves_weather_coordinates_from_valid_coordinates_only":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_returns_null_weather_coordinates_when_all_department_locations_are_invalid":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_classifies_weatherapi_no_matching_location_errors_as_location_lookup_failures":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_does_not_classify_non_location_weatherapi_errors_as_location_lookup_failures":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_returns_an_empty_forecast_fallback_when_coordinates_are_unavailable":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_builds_timeline_entries_with_mostly__clear_weather_when_forecast_payload_is_empty":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_wires_departments_weather_route_through_the_forecast_fallback_path":0.002,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_clamps_negative_ttl_to_zero":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_builds_deterministic_cache_keys_for_department_sets_and_timeline_ranges":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_builds_order_insensitive_cache_keys_for_equivalent_department_id_sets":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_falls_back_to_resolver_directly_when_cache_ttl_is_disabled":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_marks_non_started_slots_as_unknown_regardless_of_wash_hour_ratio":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherPreloadCronWiringTest::__pest_evaluable_it_registers_and_implements_cron_preloading_for_department_weather_cache":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_uses_sane_stale_ttl_defaults_and_clamps_stale_ttl_below_fresh_ttl":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_uses_sane_hot_activity_ttl_defaults_and_clamps_to_a_positive_value":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_serves_fresh_cached_payloads_without_invoking_the_resolver":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_serves_stale_cached_payloads_and_enqueues_a_refresh_signal":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_recomputes_and_rewrites_cache_payloads_when_stale_window_is_exceeded":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_records_hot_keys_order_insensitively_and_applies_preload_target_caps":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_normalizes_batched_wash_count_rows_into_hourly_slot_totals":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_wires_department_weather_route_to_use_batched_wash_aggregation":0,"P\\Tests\\Unit\\Orders\\AttachmentsListManyTest::__pest_evaluable_it_groups_attachments_by_object_id_and_preserves_empty_object_groups":0,"P\\Tests\\Unit\\Orders\\AttachmentsListManyTest::__pest_evaluable_it_keeps_listMany_payload_parity_with_list_for_one_object_id":0,"P\\Tests\\Unit\\Orders\\EconomicModuleOrdersBatchHelpersTest::__pest_evaluable_it_ensures_economic_module_rows_in_one_sanitized_batch":0,"P\\Tests\\Unit\\Orders\\EconomicModuleOrdersBatchHelpersTest::__pest_evaluable_it_returns_id_keyed_economic_module_payload_with_null_defaults":0,"P\\Tests\\Unit\\Orders\\OrdersRouteListBatchingWiringTest::__pest_evaluable_it_wires_GET__orders_through_batched_enrichment_and_stripe_snapshot_caching":0.001,"P\\Tests\\Unit\\Orders\\UsersCashierNamesBatchTest::__pest_evaluable_it_returns_cashier_names_from_cache_and_fetches_missing_ones_in_batch":0,"P\\Tests\\Unit\\Orders\\UsersCashierNamesBatchTest::__pest_evaluable_it_returns_deterministic_map_for_duplicate_and_unsorted_cashier_ids":0,"P\\Tests\\Unit\\Orders\\UsersCashierNamesBatchWiringTest::__pest_evaluable_it_implements_batched_cashier_name_lookup_with_cache_first_fallback_behavior":0.001,"P\\Tests\\Unit\\Orders\\UsersCashierNamesBatchWiringTest::__pest_evaluable_it_sanitizes_and_deduplicates_cashier_ids_before_batch_lookup":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_overtime_minutes_when_a_shift_carries_an_extended_approval_end_timestamp":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_unapproved_overtime_from_a_bounded_shift_updateTime_fallback":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_does_not_treat_late_unapproved_administrative_edits_as_overtime":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_changes_weather_timeline_cache_key_when_department_weather_targets_change":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_evaluates_healthy_degraded_and_unhealthy_statuses_from_configured_department_targets":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_returns_unknown_when_configured_targets_are_missing_for_department_status_evaluation":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_aggregates_multi_department_slot_statuses_using_worst_severity_and_unknown_fallback_rules":0.046,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsOpenApiSpecTest::__pest_evaluable_it_documents_department_weather_target_endpoints_and_reusable_schemas_in_openapi":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsOpenApiSpecTest::__pest_evaluable_it_documents_unknown_weather_status_behavior_when_targets_are_missing":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsRouteWiringTest::__pest_evaluable_it_registers_department_weather_target_routes_with_explicit_read_and_manage_permissions":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsRouteWiringTest::__pest_evaluable_it_persists_department_weather_targets_using_canonical_department_variable_keys":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_machine_relay_status_get_and_set_endpoints":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_batches_sequential_machine_relay_status_requests_into_a_single_Shelly_get_call":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_respects_the_1_request_per_second_Shelly_gate_for_back_to_back_requests":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_retries_missing_Shelly_status_payloads_until_relay_status_becomes_ready":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_times_out_with_a_clear_Shelly_readiness_error_when_payload_remains_missing":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_uses_direct_set_switch_and_seeds_cache_so_immediate_status_read_does_not_call_Shelly_get":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_lane_gate_open_endpoint":0.004,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_in_progress_self_serve_wash_details_endpoint":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_program_selector_is_on__then_turns_off_cleaner_machine_and_selector_relays":0.132,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_skips_vehicle_type_product_add_when_program_selector_is_off_and_only_disables_configured_relays":0.001,"P\\Tests\\Unit\\Selfserve\\DepartmentSelfServeEnabledRelaySyncWiringTest::__pest_evaluable_it_syncs_lane_relay_states_when_department_self_serve_enabled_flag_changes":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_supports_hard_relay_set_even_when_lane_status_is_CLOSED":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStartCleanerRelayWiringTest::__pest_evaluable_it_enables_cleaner_relay_on_wash_start_command_and_webhook_flow":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_forces_machine_relay_off_when_a_self_serve_wash_session_is_completed":0.003,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_opens_exit_port_by_switching_relay__in__id_on":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_opens_entrance_port_by_switching_relay__out__id_on":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_in_progress_self_serve_wash_start_and_machine_relay_fields":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_typed_task_gates_with_strict_semantics":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_validates_typed_task_gates_for_known_references":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_fails_validation_when_typed_task_gates_reference_unknown_entities":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_config_draft_publish_rollback_lifecycle_endpoints":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_keeps_legacy_self_serve_CRUD_routes_syncing_canonical_drafts":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStartCleanerRelayWiringTest::__pest_evaluable_it_keeps_cleaner_relay_enable_wired_into_machine_relay_start_paths":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_stores_config_json_with_apostrophes_without_violating_json_constraints":0.277,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_encodes_config_json_payloads_with_apostrophes_before_persistence":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_forces_machine_and_cleaner_relays_off_when_a_self_serve_wash_session_is_completed":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_vehicle_type_override_into_self_serve_preview_and_synchronization_routes":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_uses_local_demo_responses_and_skips_Shelly_cloud_calls_for_demo_relay_ids":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_returns_default_OFF_status_for_demo_relay_ids_without_Shelly_lookups":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_excludes_demo_relay_ids_from_Shelly_status_batch_payloads":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_keeps_demo_relay_gate_open_queued_but_skips_Shelly_switch_calls":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_allowed_services_route_through_machine_relay_visibility_sync":0.003,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_enables_MACHINE_relay_when_MACHINE_is_visible_in_allowed_services":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_turns_MACHINE_relay_off_immediately_when_MACHINE_is_not_visible":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_does_not_enable_MACHINE_relay_when_allowEnable_is_false_even_if_MACHINE_is_visible":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_is_a_safe_no_op_when_MACHINE_relay_is_not_configured":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRelayVisibilitySyncWiringTest::__pest_evaluable_it_synchronizes_machine_relay_from_visible_services_during_session_synchronization":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRelayVisibilitySyncWiringTest::__pest_evaluable_it_adds_explicit_relay_disable_session_helper_for_visibility_driven_OFF_transitions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_property_gate_command_permissions":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneCommandEnumTest::__pest_evaluable_it_parses_property_gate_lane_commands":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_opens_entrance_gate_for_OPEN__PROPERTY__ACCESS__GATE_command":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_opens_exit_gate_for_OPEN__PROPERTY__EXIT__GATE_command":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_blocks_property_gate_commands_when_department_self_serve_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_throws_a_clear_error_when_entrance_gate_is_missing_for_property_access_command":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_wraps_low_level_gate_errors_for_property_access_command_failures":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashFlowMachineAllowedWiringTest::__pest_evaluable_it_reads_machine_allowed_state_from_session_summary_payload_safely":0.001,"P\\Tests\\Unit\\Selfserve\\DbObjectPaginationLegacyColumnCompatibilityTest::__pest_evaluable_it_guards_pagination_against_searchable_fields_missing_from_legacy_schemas":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_adds_dynamic__images__vehicle__type_column_for_legacy_selfserve_wash_session_task_schemas":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceIncludedMinutesTest::__pest_evaluable_it_computes_billable_minutes_when_elapsed_minutes_exceed_included_minutes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceIncludedMinutesTest::__pest_evaluable_it_computes_zero_billable_minutes_when_elapsed_minutes_equal_included_minutes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceIncludedMinutesTest::__pest_evaluable_it_computes_zero_billable_minutes_when_included_minutes_exceed_elapsed_minutes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceIncludedMinutesTest::__pest_evaluable_it_handles_zero_and_low_elapsed_wash_time_edge_cases":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_self_serve_machine_wash_included_minutes_in_config_schemas":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_machine_wash_included_minutes_into_self_serve_module_config":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_blocks_explicit_relay_writes_when_department_self_serve_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_returns_disabled_no_op_from_machine_relay_visibility_sync_when_department_self_serve_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_property_gate_lane_commands_and_sanitized_gate_failure_responses":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_workspace_id_is_missing_for_gate_calls":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_channel_id_is_missing_for_gate_calls":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_with_terminal_status_details_when_call_never_reaches_accepted_state":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_hangs_up_when_call_reaches_accepted_state":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_hangs_up_immediately_when_status_transitions_to_accepted":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_maps_legacy_timeout_option_to_documented_ringTimeout_payload_field":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_clamps_derived_ringTimeout_to_Bird_documented_max_when_gate_timeout_is_high":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_passes_documented_hangup_cause_when_provided":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_drops_unsupported_hangup_cause_values_from_request_payload":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_workspace_id_is_missing_for_gate_flash_calls":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_creates_gate_flash_call_with_documented_ringTimeout_payload":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_polls_flash_call_and_succeeds_once_accepted":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_flash_gate_flow_when_terminal_failure_status_is_returned":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_does_not_fallback_to_regular_gate_call_when_flash_succeeds":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_falls_back_to_regular_gate_call_when_flash_fails":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_wraps_low_level_gate_errors_for_property_exit_command_failures":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_falls_back_to_regular_gate_call_when_flash_caller_id_is_not_confirmed":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_maps_voice_call_facade_methods_to_documented_endpoints_and_methods":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_maps_recordings_insights_log_and_flash_methods_to_documented_resources":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_encodes_path_segments_before_building_outbound_endpoints":0,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_serializes_query_parameters_for_GET_transport_requests":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_maps_4xx_and_5xx_transport_failures_into_informative_exceptions":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_returns_raw_payload_for_malformed_JSON_responses_and_null_for_empty_responses":0.007,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_documents_all_Bird_voice_call_parity_endpoints_including_gather_recordings_insights_and_log":0.001,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_documents_flash_hangup_endpoint_and_marks_end_alias_as_deprecated":0.001,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_defines_request_and_response_schemas_for_Bird_call_command_recording_insight_log_and_flash_payloads":0.002,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_accepts_valid_payloads_for_create_and_nested_call_flow_commands":0,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_rejects_unknown_fields_and_invalid_enum_values_in_strict_schemas":0.001,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_supports_CSV_normalization_in_schema_validation_for_log_filters":0,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_validates_flash_hangup_payloads_for_both_supported_request_shapes":0,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_fails_before_forward_step_when_strict_validation_fails_and_forwards_when_valid":0,"P\\Tests\\Unit\\Bird\\BirdRouteWiringTest::__pest_evaluable_it_registers_full_Bird_voice_call_route_surface_with_strict_validation_and_permissions":0.001,"P\\Tests\\Unit\\Bird\\BirdRouteWiringTest::__pest_evaluable_it_registers_flash_hangup_endpoint_and_keeps_end_alias_wired_as_compatibility_path":0,"P\\Tests\\Unit\\Bird\\BirdRouteWiringTest::__pest_evaluable_it_keeps_Bird_number_and_webhook_routes_intact":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_handles_malformed_and_empty_response_bodies_without_throwing_transport_errors":0.005,"P\\Tests\\Unit\\Selfserve\\DepartmentGatesRelaysRouteWiringTest::__pest_evaluable_it_validates_department_gate_config_on_both_create_and_update_routes":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_adds_wash__started__at_column_for_legacy_selfserve_wash_session_schemas":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashStartedAtWiringTest::__pest_evaluable_it_stores_wash__started__at_in_self_serve_wash_sessions_when_machine_start_is_triggered":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashStartedAtWiringTest::__pest_evaluable_it_passes_lane_wash_start_time_into_the_session_machine_start_marker":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashStartedAtWiringTest::__pest_evaluable_it_resolves_in_progress_wash__started__at_from_session_with_compatibility_fallbacks":0.001,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_normalizes_say_payload_and_applies_hangup_default":0.001,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_normalizes_log_query_csv_and_integer_fields":0,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_normalizes_nested_create_call_payload_sections_and_drops_unknown_keys":0.001,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_keeps_gather_nested_say_payload_unchanged_when_hangup_is_omitted":0,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_supports_no_body_and_flash_hangup_payload_normalization":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_respects_the_2_second_Shelly_gate_for_back_to_back_requests":0.023,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_enforces_a_2_second_gap_between_sequential_switch_requests_used_by_wash_start_and_stop_flows":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_keeps_back_to_back_get_switch_requests_ordered_through_the_relay_controller":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_executes_sequential_switch_requests_used_by_wash_start_and_stop_flows":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_does_not_print_Shelly_switch_responses_to_output":0,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitWiringTest::__pest_evaluable_it_enforces_a_global_2_second_Shelly_gate_in_sendPostRequest":0.001,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitWiringTest::__pest_evaluable_it_uses_Redis_NX_PX_semantics_for_cross_request_Shelly_rate_limiting":0,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitBehaviorTest::__pest_evaluable_it_enforces_the_2_second_Shelly_gate_across_separate_request_contexts":0,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitBehaviorTest::__pest_evaluable_it_does_not_delay_when_the_Shelly_gate_is_already_expired":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_program_selector_relay_is_online__then_turns_off_cleaner_and_machine_relays":0.62,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_skips_vehicle_type_product_add_when_program_selector_relay_is_offline_and_only_disables_configured_relays":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_bills_primary_product_when_selector_relay_is_online_even_if_relay_output_is_off":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceModeBillingTest::__pest_evaluable_it_bills_manual_self_serve_stop_using_full_elapsed_minutes_without_included_minute_reduction":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceModeBillingTest::__pest_evaluable_it_keeps_included_minute_reduction_for_automatic_mode":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_on_first_dtmf_input_captured_within_the_300_second_window":0.005,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_does_not_send_Slack_when_dtmf_input_repeats_without_change":0.008,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_again_when_dtmf_input_changes_within_the_window":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_keeps_gathering_and_does_not_hang_up_before_300_seconds_have_elapsed":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_announces_timeout_waits_10_seconds_and_sends_hangup_once_at_or_after_300_seconds":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_keeps_polling_until_terminal_status_and_only_then_finalizes":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_finalizes_immediately_when_webhook_payload_is_already_terminal_before_timeout_logic":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_does_not_duplicate_timeout_or_hangup_actions_across_retries_and_lock_contention":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_keeps_state_when_polling_fails_so_completion_is_not_falsely_reported":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_when_dtmf_input_repeats_without_change":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_answers_immediately_once_and_does_not_re_answer_on_subsequent_webhook_retries":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_configures_gather_with_retry_loop_semantics_until_input_is_entered":0.004,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_when_gather_result_provides_keys_field_instead_of_dtmf":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_when_gather_conditions_variable_keys_carries_the_entered_value":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_configures_gather_to_check_every_2_seconds_with_retry_loop_semantics_until_input_is_entered":0,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_ignores_non_numeric_customer__number_values_from_request":0.042,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_casts_numeric_customer__number_strings_to_int_before_lookup":0,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_prefers_user__id_when_both_user__id_and_customer__number_are_valid":0,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_falls_back_to_customer__number_when_user__id_is_invalid":0,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_normalizes_request_identifiers_before_user_lookups":0.001,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_rejects_non_positive_and_non_digit_request_values":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_uses_pagination_results_when_present":0.006,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_falls_back_to_collection_count_when_pagination_metadata_is_missing":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_returns_zero_when_neither_pagination_nor_collection_is_available":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_counts_object_based_collections_when_pagination_metadata_is_missing":0,"P\\Tests\\Unit\\Invoicing\\EconomicPaymentTermsRouteCollectionExtractionTest::__pest_evaluable_it_uses_collection_when_present":0,"P\\Tests\\Unit\\Invoicing\\EconomicPaymentTermsRouteCollectionExtractionTest::__pest_evaluable_it_falls_back_to_paymentTerms_when_collection_is_missing":0,"P\\Tests\\Unit\\Invoicing\\EconomicPaymentTermsRouteCollectionExtractionTest::__pest_evaluable_it_supports_top_level_array_payloads":0,"P\\Tests\\Unit\\Invoicing\\EconomicPaymentTermsRouteCollectionExtractionTest::__pest_evaluable_it_returns_an_empty_array_when_no_known_collection_shape_exists":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_uses_grant__2_in_economic__endpoint__t_when_explicitly_requested_and_configured":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_falls_back_to_grant__1_in_economic__endpoint__t_when_grant__2_is_missing":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_for_missing_required_primary_grant_in_economic__endpoint__t":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_for_missing_app_secret_in_economic__endpoint__t":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_uses_grant__2_in_legacy_economic__m_when_available":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_falls_back_to_grant__1_in_legacy_economic__m_when_grant__2_is_missing":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_for_missing_required_primary_grant_in_legacy_economic__m":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_for_missing_app_secret_in_legacy_economic__m":0.001,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_uses_unfiltered_total_when_no_customer_filters_are_active":0.004,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_uses_filtered_total_when_search_is_active":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_uses_filtered_total_when_barred_filter_is_active":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_treats__null__search_and_barred_values_as_no_filter":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_falls_back_to_filtered_total_when_unfiltered_total_is_missing":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRouteEconomicFailureHandlingTest::__pest_evaluable_it_maps_e_conomic_integration_failures_in_customer_listing_to_explicit_502_responses":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRouteEconomicFailureHandlingTest::__pest_evaluable_it_logs_LIST__CUSTOMERS_success_only_after_pagination_and_customer_mapping_are_completed":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRouteEconomicFailureHandlingTest::__pest_evaluable_it_guards_against_malformed_customer_list_payloads_before_calling_paginate":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_deterministic_upstream_exceptions_for_non_2xx_endpoint_trait_responses":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_deterministic_upstream_exceptions_for_non_2xx_legacy_economic__m_responses":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_returns_raw_payload_unchanged_on_successful_HTTP_statuses":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersListResponseValidationTest::__pest_evaluable_it_accepts_valid_list_payloads_that_include_collection_and_pagination_results":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersListResponseValidationTest::__pest_evaluable_it_throws_when_pagination_is_missing_from_the_response_payload":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersListResponseValidationTest::__pest_evaluable_it_throws_when_upstream_responds_with_an_error_shaped_payload":0,"P\\Tests\\Unit\\Router\\RouterThrowableHandlingTest::__pest_evaluable_it_catches_throwables_during_auto_route_loading_and_maps_them_to_internal_server_errors":0,"P\\Tests\\Unit\\Users\\EconomicCustomerZeroHandlingTest::__pest_evaluable_it_does_not_request_e_conomic_customer_data_when_customer_number_is_zero":0.001,"P\\Tests\\Unit\\Users\\EconomicCustomerZeroHandlingTest::__pest_evaluable_it_short_circuits_e_conomic_customer_lookup_for_non_positive_customer_numbers":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueRouteRegistrationTest::__pest_evaluable_it_registers_queued_economic_invoice_endpoints_in_economicInvoiceRoute":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueRouteRegistrationTest::__pest_evaluable_it_registers_collected_invoice_queue_endpoints_in_orderInvoicesRoute":0.002,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueSchemaBootstrapTest::__pest_evaluable_it_defines_economic_transfer_queue_jobs_schema_bootstrap_table_and_tracking_columns":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueSchemaBootstrapTest::__pest_evaluable_it_provides_queue_processor_class_constants_and_processing_entrypoint":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueCronIntegrationTest::__pest_evaluable_it_registers_economic_transfer_queue_cron_task_and_handler":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_economic_transfer_queue_paths_in_openapi":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_economic_transfer_queue_schemas_in_openapi":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_skips_order_items_with_zero_quantity_for_e_conomic_export":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_skips_order_items_with_zero_price_for_e_conomic_export":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_keeps_positive_quantity_and_price_items_billable_for_e_conomic_export":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_wires_zero_cost_and_zero_quantity_skip_guard_into_transfer_line_builder":0,"P\\Tests\\Unit\\Invoicing\\EconomicInvoiceDraftZeroItemSkipWiringTest::__pest_evaluable_it_skips_zero_cost_and_zero_quantity_items_in_legacy_economic_draft_helper":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_skips_malformed_order_item_payloads_for_e_conomic_export_safety":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueHardeningTest::__pest_evaluable_it_hardens_transfer_queue_with_type_validation_retry_caps_and_stale_lock_recovery":0.001,"P\\Tests\\Unit\\Router\\AutoloadRedisCacheValidationTest::__pest_evaluable_it_validates_cached_autoload_paths_before_returning_and_clears_stale_cache_entries":0,"P\\Tests\\Unit\\Orders\\OrdersRegistrationDateRangeQueryTest::__pest_evaluable_it_applies_created__at_bounds_directly_in_SQL_when_filtering_orders_by_registration_number":0,"P\\Tests\\Unit\\Orders\\OrdersRegistrationDateRangeQueryTest::__pest_evaluable_it_rejects_an_inverted_date_range_for_registration_lookups":0,"P\\Tests\\Unit\\Orders\\OrdersRegistrationDateRangeQueryTest::__pest_evaluable_it_returns_early_when_registration_number_is_blank":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueCronIntegrationTest::__pest_evaluable_it_wires_queue_worker_class_loading_for_CLI_queue_action":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_guards_all_economic_invoice_queue_endpoints_before_constructing_queue_service":0.012,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_guards_all_collected_invoice_queue_endpoints_before_constructing_queue_service":0.011,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_uses_a_consistent_unavailable_service_contract_for_missing_queue_dependencies":0.009,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_gracefully_handles_unavailable_queue_dependencies_on_collected_invoice_queue_endpoints":0.005,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceEconomicQueueResponseContractTest::__pest_evaluable_it_returns_the_queue_job_id_in_POST__collected_invoices_economic_enqueue_response":0.204,"P\\Tests\\Unit\\Invoicing\\UserCollectedInvoiceUpdateRouteValidationTest::__pest_evaluable_it_requires_id_and_at_least_one_mutable_field_for_PUT__collected_invoices_in_user_route":0.001,"P\\Tests\\Unit\\Invoicing\\UserCollectedInvoiceUpdateRouteValidationTest::__pest_evaluable_it_supports_independent_po__number_and_closed__at_updates_for_PUT__collected_invoices_in_user_route":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceEconomicQueueResponseContractTest::__pest_evaluable_it_returns_queued_contract_for_POST__collected_invoices_stripe_book":0.002,"P\\Tests\\Unit\\Invoicing\\EconomicDraftQueueOnlyRouteBehaviorTest::__pest_evaluable_it_keeps_order_draft_export_route_queue_only":0.006,"P\\Tests\\Unit\\Invoicing\\EconomicDraftQueueOnlyRouteBehaviorTest::__pest_evaluable_it_keeps_collected_invoice_draft_producing_routes_queue_only_in_orderInvoicesRoute":0.004,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_guards_collected_invoice_and_stripe_draft_producing_endpoints_before_constructing_queue_service":0.004,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_unavailable_queue_dependency_responses_for_async_economic_transfer_endpoints":0.007,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueuePayloadValidationTest::__pest_evaluable_it_normalizes_order_payloads_to_strict_positive_integer_ids":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueuePayloadValidationTest::__pest_evaluable_it_normalizes_collected_invoice_payload_booleans_to_strict_bool_values":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueuePayloadValidationTest::__pest_evaluable_it_rejects_invalid_transfer_payloads_before_enqueue_write_attempts":0.001,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_processes_queued_transfer_jobs_to_completion":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_deduplicates_active_jobs_per_transfer_target":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_rejects_invalid_payloads_without_inserting_queue_rows":0.013,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_supports_fail_retry_and_reprocess_lifecycle_transitions":0.014,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_keeps_queue_guards_on_economic_invoice_queue_status_and_retry_routes":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_supports_synchronous_fallback_branches_before_queue_enqueue_on_economic_invoice_export_routes":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_keeps_queue_status_endpoints_guarded_while_collected_invoice_export_routes_support_synchronous_fallback":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_uses_a_consistent_unavailable_service_contract_for_queue_status_lifecycle_endpoints":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicDraftQueueOnlyRouteBehaviorTest::__pest_evaluable_it_supports_synchronous_fallback_and_queued_processing_for_order_draft_export_route":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicDraftQueueOnlyRouteBehaviorTest::__pest_evaluable_it_supports_synchronous_fallback_and_queued_processing_for_collected_invoice_draft_producing_routes":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceEconomicQueueResponseContractTest::__pest_evaluable_it_documents_both_synchronous_fallback_and_queued_response_contracts_for_POST__collected_invoices_economic":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceEconomicQueueResponseContractTest::__pest_evaluable_it_documents_both_synchronous_fallback_and_queued_response_contracts_for_POST__collected_invoices_stripe_book":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_200_fallback_plus_202_queue_contracts_for_export_endpoints_and_keeps_503_on_queue_lifecycle_endpoints":0.003,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_returns_pagination_metadata_and_strict_status_handling_for_collected_invoice_queue_list":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_enforces_retry_constraints_for_collected_invoice_queue_jobs_before_retry_execution":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_collected_queue_list_metadata_and_strict_status_filter_enum_in_openapi":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_builds_a_completed_collected_invoice_queue_summary_from_payload_and_result":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_prefers_queue_error_messages_for_failed_jobs_and_keeps_null_safe_outcome_fields":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_uses_deterministic_status_message_fallback_when_no_explicit_message_exists":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_handles_object_payload_result_values_and_malformed_fields_without_throwing":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_ticks_collected_invoice_transfer_queue_from_queue_list_and_status_routes":0.008,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_ticks_order_transfer_queue_from_draft_and_invoice_status_routes":0.009,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_marks_queued_transactions_and_clears_requires__action_when_all_actionable_work_is_already_queued":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_keeps_requires__action_true_when_a_customer_still_has_unqueued_actionable_transactions":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_blocks_fixed_pricing_or_subscription_customers_with_no_transactions_when_a_relevant_queue_job_exists":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerCommandQueueTest::__pest_evaluable_it_queues_admin_commands__exposes_agent_poll_result_handlers__and_keeps_heartbeats_from_mutating_discovery_state":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerCommandQueueTest::__pest_evaluable_it_defines_the_dispatchable_gateway_guard_on_the_loaded_manager_class":0.009,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"recent heartbeat stays online\"\"":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"late heartbeat degrades after one minute\"\"":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"stale heartbeat goes offline after five minutes\"\"":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"explicit offline reports stay offline even when heartbeat is fresh\"\"":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"missing heartbeat is treated as offline\"\"":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_marks_ready_discovery_as_stale_when_the_gateway_heartbeat_has_expired":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_the_edge_gateway_management_REST_endpoints":0.021,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_public_installer__claim__heartbeat__command_polling__and_internal_broker_auth_endpoints":0.004,"P\\Tests\\Unit\\Selfserve\\EdgeBrokerClientConfigTest::__pest_evaluable_it_uses_the_same_default_broker_url_and_shared_secret_fallback_as_the_docker_stack":0.267,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_install_script_urls_with_forwarded_https_scheme_when_proxied":0.336,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_appends_forwarded_ports_when_the_forwarded_host_omits_them":0.022,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_infers_https_for_the_staging_api_host_when_only_the_https_port_is_present":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_prefers_EDGE__PUBLIC__API__URL_when_explicitly_configured":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_normalizes_public_broker_overrides_to_https_and_browser_shell_urls_to_wss":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_keeps_localhost_broker_overrides_on_plain_http_and_ws_for_local_development":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_includes_node_pty_build_prerequisites_in_the_generated_install_script":0.007,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_prefers_EDGE__PUBLIC__API__URL_when_explicitly_configured_and_derives_the_broker_from_the_api_origin":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_normalizes_public_broker_overrides_to_https__strips_paths__and_browser_shell_urls_to_wss":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_merges_incoming_heartbeat_metadata_with_existing_gateway_metadata":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_the_v2_operator_facing_edge_gateway_routes":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_PHP_edge_agent_routes_for_operations_and_legacy_relay_command_polling":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewaySchemaBootstrapTest::__pest_evaluable_it_defines_the_v2_edge_gateway_schema_bootstrap_tables":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewaySchemaBootstrapTest::__pest_evaluable_it_stores_operation_metadata_and_event_timelines_for_management_workflows":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_builds_the_installer_around_the_PHP_agent_artifacts_and_management_polling_config":0.011,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_exposes_update_payload__credential_rotation__and_operation_endpoints_without_shell_transport_wiring":0.013,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerCommandQueueTest::__pest_evaluable_it_keeps_relay_dispatch_and_discovery_queueing_on_the_edge_gateway_manager":0.004,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerCommandQueueTest::__pest_evaluable_it_loads_relay_command_helpers_on_the_manager_and_gateway_operations_on_the_dedicated_service":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_relay_fallback_and_transport_health_details_without_shell_or_update_runtime_state":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_resolves_edge_agent_artifacts_from_the_source_tree_layout":0.445,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_includes_the_container_mounted_artifact_directory_as_a_candidate":0.021,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_reads_install_artifacts_through_the_shared_locator":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_builds_update_payloads_with_checksums_from_resolved_artifact_paths":0.006,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_resolves_edge_agent_artifacts_from_a_supported_runtime_layout":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_install_script_urls_with_the_PHP_agent_artifacts_and_forwarded_https_scheme":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_explains_the_legacy_dist_mount_mismatch_when_php_artifacts_are_unavailable":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_mounted_and_baked_in_artifact_directories_before_repo_fallbacks":0.022,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_falls_back_to_baked_in_artifacts_when_the_mount_path_is_absent":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_router_resources_before_mounted_and_baked_in_artifact_directories":0.001,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_lists_orders_for_an_admin_scoped_user_and_limits_the_results_to_the_permitted_departments":1.109,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_lists_only_the_targeted_customer_orders_for_subuser_sessions":2.935,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_returns_the_current_auth_and_permission_failures_when_order_listing_is_not_allowed":1.375,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_creates_orders_through_the_real_endpoint":0.982,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_order_creation_requests":3.423,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_updates_orders_through_the_primary_endpoint":1.13,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_reassigns_invoice_collections_when_changing_an_order_across_the_draft_customer_boundary":1.615,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_supports_legacy_field_value_metadata_updates_through_the_primary_endpoint":5.592,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_updates_through_the_primary_order_endpoint":1.29,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_updates_orders_through_the_legacy_alias_endpoint":1.517,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_supports_legacy_field_value_metadata_updates_through_the_alias_endpoint":4.136,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_updates_through_the_legacy_alias_endpoint":0.512,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_unsupported_legacy_field_value_updates_on_both_update_endpoints":0.965,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_deletes_orders_through_the_real_endpoint":1.045,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_order_delete_requests":1.64,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_regenerates_attached_wash_certificates_when_certificate_metadata_changes_through_the_primary_endpoint":3.683,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_regenerates_attached_wash_certificates_for_legacy_field_value_updates_through_the_alias_endpoint":3.194,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayOperationLegacySchemaCompatibilityTest::__pest_evaluable_it_keeps_the_legacy_operation__type_column_compatible_with_v2_operation_queueing":0.001,"P\\Tests\\Unit\\Bookings\\OrderBookingsListCacheTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_clamps_negative_ttl_to_zero":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsListCacheTest::__pest_evaluable_it_builds_deterministic_keys_for_equivalent_contexts":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsListCacheTest::__pest_evaluable_it_stores_and_retrieves_full_order_bookings_payloads":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsListCacheTest::__pest_evaluable_it_ignores_malformed_cached_payloads_and_clears_order_bookings_list_caches":0.001,"P\\Tests\\Unit\\Bookings\\OrderBookingsRouteCacheWiringTest::__pest_evaluable_it_caches_the_paginated_order_bookings_list_response_and_invalidates_it_on_booking_changes":0.001,"P\\Tests\\Unit\\Bookings\\VehicleSearchBookedMetadataRouteContractTest::__pest_evaluable_it_keeps_booked_vehicle_search_metadata_aligned_with_filtered_pending_order_bookings":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsCacheTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_clamps_negative_ttl_to_zero":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsCacheTest::__pest_evaluable_it_builds_deterministic_keys_for_equivalent_count_contexts":0.001,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsCacheTest::__pest_evaluable_it_stores_and_retrieves_normalized_booking_counts":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsCacheTest::__pest_evaluable_it_ignores_malformed_payloads_and_clears_order_bookings_count_caches":0.001,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsRouteWiringTest::__pest_evaluable_it_adds_a_cached_order_bookings_counts_endpoint_and_invalidates_it_on_booking_changes":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayFleetUsageStatisticsTest::__pest_evaluable_it_summarizes_fleet_usage_statistics_for_the_dashboard_landing_view":0,"P\\Tests\\Api\\ApiCoverageManifestTest::__pest_evaluable_it_keeps_every_selected_API_operation_covered_by_happy_path_and_failure_tests":0.001,"P\\Tests\\Api\\ApiCoverageManifestTest::__pest_evaluable_it_keeps_the_OpenAPI_manifest_entries_aligned_with_the_API_spec":0.051,"P\\Tests\\Api\\ApiFixturesCleanupTest::__pest_evaluable_it_removes_generated_customer_traces_during_fixture_cleanup":8.099,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_in_with_valid_customer_credentials":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_login_payloads_and_credentials":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_returns_the_cached_auth_session_payload_for_a_valid_token":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_includes_economic_runtime_config_for_uncached_auth_sessions":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_auth_session_tokens":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_out_and_invalidates_the_token_for_future_session_calls":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_out_and_invalidates_cached_subuser_sessions":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_logout_tokens":0,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_the_raw_202_gather_webhook_contract_over_HTTP":0.788,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_still_prompts_for_department_selection_when_only_one_department_is_eligible":0.732,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_accepts_the_legacy_initial_webhook_body_with_top_level_call_identifiers":0.692,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_native_flow_gather_data_after_a_top_level_department_selection_when_distinct_gate_choices_exist":1.515,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_opens_the_gate_immediately_after_a_top_level_department_selection_when_entrance_and_exit_share_the_same_gate":1.719,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_uses_a_multi_digit_gather_contract_when_10_departments_are_eligible":0.587,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_a_raw_400_transport_error_for_malformed_webhook_payloads":0.419,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_lists_only_visible_departments_and_can_return_a_single_department_with_the_slack_webhook":1.048,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_department_listing_when_the_permission_is_missing":0.378,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_creates_departments_through_the_real_endpoint":0.59,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_create_requests":1.554,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_updates_departments_through_the_real_endpoint":0.788,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_update_requests":1.552,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_lists_department_categories_for_a_department":1.006,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_category_requests":1.191,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_lists_the_draft_customer_config_entry_in_economic_config_responses":0,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_round_trips_the_draft_customer_config_value_through_economic_config_updates":0,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_order_draft_exports_for_the_configured_draft_customer":0,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_booked_invoice_exports_for_the_configured_draft_customer":0,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_collected_invoice_exports_for_the_configured_draft_customer":0,"P\\Tests\\Api\\PingApiTest::__pest_evaluable_it_returns_the_ping_contract":0.877,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_setup_required_error_when_department_terminal_readers_are_requested_without_terminal_setup":1.281,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_sends_a_Stripe_invoice_by_email_and_persists_the_hosted_invoice_association":5.434,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_conflict_when_a_Stripe_hosted_invoice_is_already_active_for_the_order":4.756,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_allows_sending_a_new_Stripe_hosted_invoice_when_the_existing_association_is_already_terminal":3.943,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_voids_an_unpaid_Stripe_hosted_invoice_and_clears_the_local_order_association":3.746,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_refuses_to_cancel_a_paid_Stripe_hosted_invoice":4.131,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_setup_required_error_when_creating_a_payment_intent_for_a_department_without_terminal_setup":0.726,"P\\Tests\\Api\\VehiclesApiTest::__pest_evaluable_it_returns_the_newest_vehicle_last__order__id_that_still_has_order_items":1.326,"P\\Tests\\Api\\VehiclesApiTest::__pest_evaluable_it_returns_a_null_vehicle_last__order__id_when_no_order_with_items_exists":1.159,"P\\Tests\\Unit\\Users\\EconomicCustomerModelParsingTest::__pest_evaluable_it_parses_cached_economic_customer_payloads_that_use_snake__case_customer__number":0,"P\\Tests\\Unit\\Users\\EconomicCustomerModelParsingTest::__pest_evaluable_it_leaves_the_economic_customer_model_empty_when_no_valid_customer_number_is_present":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayFleetUsageStatisticsTest::__pest_evaluable_it_derives_fleet_usage_directly_from_cached_gateway_row_summaries":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_install_script_urls_with_the_compose_edge_gateway_artifacts_and_forwarded_https_scheme":0.012,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayMetadataUpdateContractTest::__pest_evaluable_it_adds_a_gateway_metadata_update_endpoint_with_label_and_primary_assignment_fields":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayMetadataUpdateContractTest::__pest_evaluable_it_reassigns_department_primary_gateways_through_dedicated_manager_helpers":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayShellPollingTransportTest::__pest_evaluable_it_removes_shell_access_from_the_edge_gateway_HTTP_contracts":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_builds_the_installer_around_the_compose_stack_artifacts_and_management_polling_config":0.037,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_deterministic_cache_keys":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_stores_and_retrieves_cached_list_and_detail_payloads":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_syncs_gateway_snapshots_into_cached_list_payloads_and_refreshes_fleet_usage":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_removes_deleted_gateways_from_cached_list_and_detail_payloads":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_exposes_update_payload__credential_rotation__cancel_endpoints__and_operation_endpoints_without_shell_transport_wiring":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_registers_module_scoped_edge_gateway_operator_routes":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_registers_edge_gateway_module_config_endpoints":0.006,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_registers_edge_gateway_config_endpoints_from_the_module_route_directory":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_keeps_only_the_module_facade_in_the_global_classes_directory_and_conditionally_loads_module_routes":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayInstallSessionLifecycleTest::__pest_evaluable_it_caps_install_session_diagnostics_and_events_while_preserving_the_first_start_timestamp":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayInstallSessionLifecycleTest::__pest_evaluable_it_clears_terminal_failure_details_after_a_successful_claim_update":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayInstallSessionLifecycleTest::__pest_evaluable_it_marks_expired_non_terminal_install_sessions_as_terminal_when_read_back":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_websocket_broker_urls_on_the_traefik_broker_path":0.124,"P\\Tests\\Unit\\Selfserve\\DepartmentGateConfigRelayTest::__pest_evaluable_it_validates_relay_gate_configs_and_keeps_relay_specific_fields_in_the_payload":0,"P\\Tests\\Unit\\Selfserve\\DepartmentGateConfigRelayTest::__pest_evaluable_it_rejects_relay_gate_configs_without_a_logical_relay_id":0,"P\\Tests\\Unit\\Bird\\DepartmentGatesRelayOpenTest::__pest_evaluable_it_dispatches_relay_backed_gates_through_the_edge_gateway_relay_manager":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayDepartmentWorkspaceContractTest::__pest_evaluable_it_defines_the_department_hardware_workspace_service_payload_surface":0.001,"P\\Tests\\Unit\\Selfserve\\PlateScannerWorkspaceContractTest::__pest_evaluable_it_adds_lane_aware_scanner_management_and_a_dedicated_rotate_key_action":0.001,"P\\Tests\\Unit\\Selfserve\\PlateScannerWorkspaceContractTest::__pest_evaluable_it_uses_the_scanner_default_lane_before_requiring_an_explicit_lane__id_in_machine_button_webhooks":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_maps_gateway_relay_status_responses_into_the_Shelly_cloud_payload_shape":0.01,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_maps_gateway_relay_switch_responses_into_the_Shelly_cloud_payload_shape":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_requires_a_valid_department_id_for_gateway_transport_requests":0.002,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_rejects_unsupported_gateway_transport_endpoints":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_surfaces_binding_lookup_failures_while_resolving_relay_state_through_the_gateway_transport":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_surfaces_offline_gateway_failures_while_dispatching_relay_switch_commands":0,"P\\Tests\\Api\\PlateScannersApiTest::__pest_evaluable_it_returns_the_updated_lane_id_after_editing_a_scanner_whose_null_lane_was_already_cached":21.835,"P\\Tests\\Api\\PlateScannersApiTest::__pest_evaluable_it_rejects_plate_scanner_edits_when_the_permission_is_missing":7.837,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_normalizes_owned_Shelly_devices_into_relay_select_options":0,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_fails_fast_when_Shelly_inventory_does_not_include_owned_devices_status":0,"P\\Tests\\Unit\\Selfserve\\DepartmentLaneRelayOptionsRouteWiringTest::__pest_evaluable_it_registers_a_department_lane_relay_options_endpoint_backed_by_Shelly_inventory":0.001,"P\\Tests\\Unit\\Selfserve\\DepartmentLaneRelayNullificationRouteWiringTest::__pest_evaluable_it_nullifies_department_lane_relay_fields_when_blank_select_values_are_submitted":0.001,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_serves_installer_artifacts_and_recovers_gateway_runtime_status_after_fresh_heartbeats":109.487,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_polls_operations_and_commands__submits_results__and_records_broker_presence_for_task_pages":229.768,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_rejects_missing_and_invalid_edge_agent_tokens":12.815,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_validates_broker_sessions_and_ingests_presence__telemetry__logs__and_shell_lifecycle_data":180.867,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_builds_broker_backlog_and_completes_gateway_operations_through_broker_endpoints":147.749,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_rejects_invalid_edge_broker_shared_secrets":6.832,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_creates_install_tokens__tracks_installer_status__and_exposes_claimed_gateway_detail_to_authorized_operators":134.744,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_manages_edge_gateway_metadata__bindings__operations__sessions__rotation__cutover__and_deletion":272.219,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_rejects_operator_edge_routes_when_module_permission_or_department_access_is_missing":46.681,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_persists_install_session_updates_and_derives_gateway_runtime_status_from_heartbeats":0.015,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_assembles_tasks__logs__statistics__operations__commands__and_shell_lifecycle_state_from_persisted_records":0.019,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_localhost_websocket_broker_urls_on_the_local_traefik_api_prefix":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_keeps_root_host_api_urls_unprefixed_when_the_request_is_not_under_the_local_api_alias":0.001,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_imports_a_matching_e_conomic_customer_into_the_local_system_when_no_local_record_exists":0.001,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_reports_when_the_local_customer_already_has_a_login_account":0,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_creates_a_new_e_conomic_customer_and_returns_a_created_result_for_new_rows":0,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_creates_the_economic_record_for_an_existing_local_account_when_no_matching_upstream_customer_exists":0,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_rejects_CVR_conflicts_when_the_upstream_customer_number_does_not_match_the_submitted_phone_number":0,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_registers_the_customer_import_route_and_wires_it_through_the_mass_import_service":0,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_builds_customer_name_cache_payloads_from_economic_data_or_display_name_fallbacks":0,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_guards_bulk_customer_name_cache_writes_behind_a_resolved_payload_check":0.001,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_ignores_and_soft_deletes_edge_gateways_whose_department_no_longer_exists":35.946,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_only_trusts_broker_presence_while_the_broker_heartbeat_is_fresh":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_refreshes_broker_presence_from_broker_telemetry_heartbeats":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_resolves_the_injected_gateway_transport_when_a_department_is_in_gateway_mode":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_resolves_the_injected_cloud_transport_when_a_department_is_in_cloud_mode":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_lets_relay_tests_override_the_department_transport_without_changing_department_mode":0,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_falls_back_to_local_device_and_control_names_when_Shelly_cloud_list_metadata_is_unavailable":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_uses_local_only_gateway_dispatch_for_explicit_local_transport_overrides":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_marks_non_injected_local_overrides_as_local_only_gateway_transport":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_opens_exit_port_by_switching_relay__out__id_on":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_opens_entrance_port_by_switching_relay__in__id_on":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_forwards_Shelly_toggle__after_timers_to_gateway_relay_switches":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_marks_non_injected_local_and_gateway_overrides_as_local_only_gateway_transport":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_preserves_local_gateway_diagnostic_metadata_on_relay_status_snapshots":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_includes_positive_relay_timers_in_Shelly_switch_payloads":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_applies_Shelly_transport_overrides_across_self_serve_relay_side_effect_routes":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayLegacyRouteShimTest::__pest_evaluable_it_keeps_guarded_legacy_root_shims_for_moved_edge_gateway_routes":0.001,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_persists_gateway_cutover_relay_bindings_used_by_self_serve_Shelly_dispatch":0.015,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_passes_explicit_timer_values_when_opening_lane_gates":0,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_keeps_Shelly_1_Mini_Gen3_type__model__and_generation_aligned_with_Shelly_metadata":0,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_rejects_shell_session_creation_while_broker_presence_is_unavailable":23.503,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_registers_broker_settings_as_editable_edge_gateway_module_config":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_session_management_endpoints_and_OpenAPI_coverage":0.012,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_keeps_self_serve_force_stop_distinct_from_normal_STOP_relay_and_gate_behavior":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_keeps_read_only_self_serve_preview_and_summary_refreshes_from_touching_relay_hardware":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashFlowMachineAllowedWiringTest::__pest_evaluable_it_separates_session_synchronization_from_relay_hardware_synchronization":0.001,"P\\Tests\\Unit\\Selfserve\\ShellyRealRequestGuardTest::__pest_evaluable_it_blocks_and_records_test_mode_Shelly_POST_requests_before_cURL_can_run":0.001,"P\\Tests\\Unit\\Selfserve\\ShellyRealRequestGuardTest::__pest_evaluable_it_blocks_and_records_test_mode_Shelly_GET_requests_before_cURL_can_run":0,"P\\Tests\\Unit\\Selfserve\\ZZZShellyGuardSafetyMetaTest::__pest_evaluable_it_did_not_record_any_real_Shelly_request_attempts_during_self_serve_tests":0,"P\\Tests\\Api\\SelfserveFixtureApiTest::__pest_evaluable_it_creates_a_comprehensive_self_serve_API_scenario_with_demo_relays":0.171,"P\\Tests\\Api\\SelfserveZZZShellyGuardApiTest::__pest_evaluable_it_did_not_record_any_real_Shelly_request_attempts_during_self_serve_API_tests":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_serializes_questions__conditions__tasks__scopes__and_gateways_into_one_graph":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_derives_studio_vehicle_type_lookup_rows_from_selectable_wash_products":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_applies_saved_layout_without_changing_graph_semantics":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_keeps_layout_loading_compatible_with_native_PDO_named_placeholders":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_builds_guided_simulator_debug_payload_with_blockers_and_canvas_annotations":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_resolves_simulator_gateway_service_bindings_from_lane_relay_slots":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_persists_allowed_services_without_relay_writes_for_pre_start_wash_setup":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_the_all_in_one_self_serve_studio_replacement_endpoints":0.003,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_continues_start_when_entrance_relay_dispatch_times_out_ambiguously":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_still_fails_start_for_non_timeout_entrance_relay_errors":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_parses_deferred_relay_side_effects_on_start_command_arguments":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_skips_cleaner_and_machine_relay_side_effects_when_start_asks_to_defer_them":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_keeps_cleaner_and_machine_relay_side_effects_for_normal_start_commands":0,"P\\Tests\\Unit\\Selfserve\\SelfservePropertyGatePermissionBypassTest::__pest_evaluable_it_allows_property_gate_commands_for_customers_with_an_active_wash_in_the_target_department":0,"P\\Tests\\Unit\\Selfserve\\SelfservePropertyGatePermissionBypassTest::__pest_evaluable_it_does_not_bypass_property_gate_permissions_without_a_positive_customer_number":0,"P\\Tests\\Unit\\Selfserve\\SelfservePropertyGatePermissionBypassTest::__pest_evaluable_it_does_not_bypass_property_gate_permissions_when_the_customer_has_no_active_wash_in_the_target_department":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_the_all_in_one_self_serve_studio_replacement_API":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_allows_own_permission_customers_to_preview_borrowed_registration_plates_without_ownership_checks":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_allows_customer_scoped_answers_to_be_stored_for_borrowed_registration_plates":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_does_not_apply_saved_answers_from_another_customer_for_the_same_registration_plate":0.027,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_scopes_saved_self_serve_answers_by_customer_number_and_registration_plate":0,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_loads_saved_answers_from_the_authenticated_customer_context_instead_of_the_plate_owner":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_does_not_count_shifts_without_punches_when_checkIn_checkOut_are_null":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_overtime_minutes_when_a_saved_shift_end_extends_past_the_approved_original_end":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_does_not_count_removed_approved_time_when_a_saved_shift_end_is_shortened":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_caps_current_slot_hours_to_elapsed_minutes_and_zeroes_future_slots":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_checked_in_shifts_without_checkOut_up_to_occurredUntil":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_keeps_the_main_period_response_local_only_for_booked_state_and_customer_names":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_streams_the_main_period_response_instead_of_encoding_the_full_payload_at_once":0.002,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_maps_batched_period_transaction_rows_to_the_legacy_transaction_response_shape":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_uses_batched_period_transactions_and_keyed_customer_maps_in_the_main_period_route":0.002,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_falls_back_to_configured_e_conomic_default_department_for_missing_customer_default_department_in_distributions":0.001,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_round_trips_the_default_distribution_department_config_value_through_economic_config_updates":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_MySQL_GTID_interval_counts_and_coverage_percentages":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_reports_empty_source_GTID_sets_as_caught_up":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_Redis_offset_percentages_safely":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_MariaDB_GTID_coverage_by_domain_sequence":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_normalizes_public_replication_kind_aliases":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_supports_MariaDB_prerequisites_without_requiring_Oracle_MySQL_variables":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_reports_MariaDB_specific_blockers_when_GTID_or_binary_logging_prerequisites_are_missing":0,"P\\Tests\\Unit\\Replication\\ReplicationSecretBoxTest::__pest_evaluable_it_encrypts_replication_secrets_without_storing_plaintext":0.001,"P\\Tests\\Unit\\Replication\\ReplicationSecretBoxTest::__pest_evaluable_it_builds_active_database_and_redis_config_from_encrypted_bootstrap_snapshots":0,"P\\Tests\\Unit\\Replication\\SuperuserReplicationRouteWiringTest::__pest_evaluable_it_registers_superuser_replication_endpoints_and_permissions":0,"P\\Tests\\Unit\\Replication\\SuperuserReplicationRouteWiringTest::__pest_evaluable_it_documents_replication_management_in_openapi":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_generates_replication_ready_MariaDB_compose_templates_without_embedding_secrets":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_generates_Redis_replica_compose_templates_with_primary_connection_placeholders":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_does_not_require_replica_SQL_threads_before_database_provisioning_configures_them":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_creates_the_generated_replication_user_on_the_primary_during_provisioning":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_detects_missing_database_tables_before_provisioning_a_preseeded_replica":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_allows_failed_replicas_to_be_removed_without_allowing_primary_or_healthy_replica_removal":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_seeds_MariaDB_replicas_in_place_instead_of_requiring_container_recreation":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_replication_operation_progress_schema_idempotent_for_existing_installs":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_limits_MariaDB_log_table_seeding_to_the_last_month":0.002,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_skips_log_table_data_during_MariaDB_seeding_and_replication":0.003,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_operational_log_tables_schema_only_during_MariaDB_seeding_and_replication":0.005,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_provisions_Redis_replicas_after_a_connectivity_only_preflight_and_reports_sync_progress":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_Redis_promotion_caught_up__durable__and_metadata_safe":0,"P\\Tests\\Unit\\Auth\\CreateTokenTest::__pest_evaluable_it_creates_auth_tokens_and_reports_missing_customer_users_clearly":0.018,"P\\Tests\\Unit\\Auth\\EconomicCreateCustomerResponseTest::__pest_evaluable_it_returns_the_raw_upstream_create_response_and_preserves_the_requested_payload":0,"P\\Tests\\Unit\\Auth\\RegisterCvrLegacyScriptTest::__pest_evaluable_it_keeps_the_legacy_register_cvr_route_harness_passing":0.021,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_raw_202_gather_response_for_initial_department_selection":0.002,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_accepts_legacy_initial_webhook_payloads_with_top_level_call_identifiers":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_flow_data_gather_payload_after_department_selection_in_native_flow_mode_when_distinct_gate_choices_exist":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_opens_the_gate_immediately_after_department_selection_when_entrance_and_exit_resolve_to_the_same_gate_in_native_flow_mode":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_flow_data_completion_payload_after_gate_confirmation_in_native_flow_mode":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_second_stage_raw_202_gather_response_after_department_selection_when_distinct_gate_choices_exist":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_opens_the_shared_gate_immediately_after_department_selection_in_raw_command_mode":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_opens_the_selected_gate_and_clears_redis_state_on_final_selection":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_reprompts_with_invalid_selection_while_keeping_webhook_state":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_uses_fallback_dtmf_extraction_when_event_gather_keys_are_missing":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_prompts_for_department_selection_even_when_only_one_eligible_department_exists":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_prompts_for_a_single_available_gate_type_and_opens_only_after_explicit_confirmation":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_supports_multi_digit_department_selections_before_gate_confirmation":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_direct_raw_200_completion_when_no_departments_are_eligible":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_continues_with_the_first_gather_prompt_when_backend_call_acceptance_fails":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_business_failure_raw_200_response_when_gate_opening_fails":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_deterministic_department_digit_map_without_capping_options":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_compact_gate_option_maps_and_resolves_selected_gate_type_by_digit":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_department_prompts_with_multi_digit_guidance_and_compact_gate_prompts":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_normalizes_menu_digit_input_from_Bird_dtmf_payload_values":0,"P\\Tests\\Unit\\Bird\\DepartmentGatesPhoneCallOpenTest::__pest_evaluable_it_forwards_phone_number_and_call_duration_threshold_to_the_Bird_gate_helper":0,"P\\Tests\\Unit\\Bird\\DepartmentGatesPhoneCallOpenTest::__pest_evaluable_it_wraps_Bird_helper_failures_and_reports_them_to_Slack":0.001,"P\\Tests\\Unit\\Bookings\\NonPosBookingCompletionRemovalTest::__pest_evaluable_it_unregisters_legacy_booking_completion_forms":0.001,"P\\Tests\\Unit\\Bookings\\NonPosBookingCompletionRemovalTest::__pest_evaluable_it_keeps_legacy_wash_certificate_downloads_but_disables_generation_and_completion":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsComplaintsOpenApiSpecTest::__pest_evaluable_it_documents_the_daily_report_complaints_CRUD_and_customer_lookup_endpoints_in_openapi":0.002,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsComplaintsRouteContractTest::__pest_evaluable_it_wires_complaint_create__lookup__list__edit__and_delete_routes_with_validation_and_parsing":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOutsideHoursOpenApiSpecTest::__pest_evaluable_it_documents_outside_hours_summary_and_trend_schemas_in_openapi":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOutsideHoursRouteContractTest::__pest_evaluable_it_wires_outside_hours_summary_and_trend_endpoints_through_the_dedicated_statistics_service":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOutsideHoursRouteContractTest::__pest_evaluable_it_initializes_the_outside_hours_statistics_service_before_building_the_transaction_count_summary_payload":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewOpenApiSpecTest::__pest_evaluable_it_documents_the_daily_report_overview_endpoint_and_reusable_schemas_in_openapi":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_builds_the_overview_payload_from_batched_repository_data_with_deterministic_tile_states":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_marks_overtime_unavailable_when_not_every_selected_department_can_be_mapped_to_workfeed":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_normalizes_department_id_input_from_csv_strings_and_nested_values":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_limits_overtime_counting_to_the_selected_reporting_range":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_does_not_count_negative_approved_overtime_when_a_saved_end_shortens_the_shift":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_ignores_late_unapproved_administrative_edits_when_calculating_overtime":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_wires_the_overview_route_to_batched_repository_methods_and_overview_path":0,"P\\Tests\\Unit\\DailyReports\\DepartmentOutsideHoursStatisticsServiceTest::__pest_evaluable_it_counts_only_outside_hours_washes_and_flags_missing_opening_hours_without_counting_them_as_closed":0,"P\\Tests\\Unit\\DailyReports\\DepartmentOutsideHoursStatisticsServiceTest::__pest_evaluable_it_deduplicates_linked_washes_with_self_serve_first__then_xlvask__then_orders":0,"P\\Tests\\Unit\\DailyReports\\DepartmentOutsideHoursStatisticsServiceTest::__pest_evaluable_it_builds_daily_trend_points_with_per_day_missing_hours_diagnostics":0,"P\\Tests\\Unit\\Database\\DbObjectRedisNamespaceSafetyTest::__pest_evaluable_it_keeps_db_object_Redis_access_namespace_safe":0.001,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_allows_studio_lane_dynamic_image_previews_to_override_the_saved_image_id":0.001,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_accepts_ordered_dynamic_image_button_tokens_including_reset_start_and_zero":0.003,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_renders_machine_one_dynamic_image_steps_from_the_ordered_button_payload":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_uses_queued_job_payload_customer_context_before_result_data_exists":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_exposes_collected_invoice_queue_monitor_and_per_user_terminal_clear_routes":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_runs_collected_invoice_queue_batches_through_an_explicit_manual_endpoint":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_bounds_e_conomic_curl_calls_below_the_PHP_request_timeout":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersDiscountFallbackTest::__pest_evaluable_it_falls_back_to_a_later_customer_template_product_when_earlier_probes_fail_on_missing_currency_prices":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersDiscountFallbackTest::__pest_evaluable_it_returns_zero_when_every_customer_template_lookup_fails_due_to_missing_currency_prices":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersDiscountFallbackTest::__pest_evaluable_it_rethrows_unrelated_discount_lookup_failures":0,"P\\Tests\\Unit\\Invoicing\\EconomicDraftCustomerOpenApiSpecTest::__pest_evaluable_it_documents_transaction_draft_customer_config_and_auth_runtime_fields_in_all_tracked_openapi_copies":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueCronEntrypointWiringTest::__pest_evaluable_it_wires_root_cron_entrypoint_to_the_full_cron_scheduler_with_queue_worker_tasks":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_additive_collected_invoice_queue_pagination_metadata_and_retry_conflict_semantics":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_exposes_an_explicit_collected_invoice_transfer_queue_run_route_instead_of_ticking_read_endpoints":0.002,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_keeps_order_transfer_queue_status_routes_read_only":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_assigns_classified_booked_department_75_amounts_to_fallback_when_no_monthly_basis_exists":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_falls_back_to_system_orders_for_fixed_pricing_using_the_configured_fallback_department":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_falls_back_to_system_orders_for_wash_subscriptions_using_the_configured_fallback_department":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_uses_the_configured_fallback_department_when_a_subscription_has_no_customer_department_basis":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_excludes_orphaned_customer_traces_from_fixed_pricing_and_customer_price_distributions":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_excludes_orphaned_customers_from_subscription_fallback_versions":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceOrderOverrideTest::__pest_evaluable_it_inherits_department_eligibility_when_no_order_override_is_set":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceOrderOverrideTest::__pest_evaluable_it_allows_an_order_level_include_override_to_overrule_department_exclusion":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceOrderOverrideTest::__pest_evaluable_it_allows_an_order_level_exclude_override_to_overrule_department_inclusion":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_builds_deterministic_automatic_flag_fingerprints_and_interactive_price_message_parts":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_builds_interactive_message_parts_for_order_and_wash_certificate_warnings":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_includes_order_item_preview_context_for_required_order_field_warnings":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_allows_tank_cleaning_products_for_only_tank_cleaning_customers":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_does_not_flag_interior_wash_variants_as_historical_primary_product_mismatches":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_does_not_report_duplicate_primary_vehicle_products_from_duplicated_detector_rows_for_the_same_order_item":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_uses_attached_wash_certificate_documents_instead_of_safety_seal_text_for_certificate_presence":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_loads_wash_certificate_attachment_presence_from_order_attachment_content":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_uses_the_highest_customer_specific_discount_in_expected_price_breakdowns":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_uses_a_preloaded_e_conomic_global_discount_in_expected_price_breakdowns":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_does_not_report_a_price_mismatch_when_a_product_specific_discount_makes_the_expected_price_zero":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_preloads_and_caches_missing_e_conomic_discounts_before_price_mismatch_detection":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_seeds_order_item_preview_cache_from_period_rows":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_sorts_manual_flags_before_automatic_warnings_and_preserves_legacy_circle_indicators_without_flags":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_scopes_invoice_period_flags_to_the_customer_card_that_can_render_them":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_keeps_order_item_preview_context_compact_for_the_period_response":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_formats_stored_manual_flags_with_the_creating_superuser_display_name":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_validates_supported_manual_flag_fields_by_target_type":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_wires_invoice_period_flag_routes_with_explicit_list_create_and_update_permissions":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_uses_the_users_display__name_column_in_detector_queries":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_aggregates_customer_price_overrides_by_customer_number_for_price_mismatch_detection":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_guards_optional_customer_vehicle_deleted__at_filtering_behind_a_column_check":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_limits_historical_primary_product_lookup_to_current_period_registrations":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_provides_a_batched_plain_row_transaction_query_for_invoicing_period_responses":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_adds_guarded_composite_indexes_for_invoicing_period_lookups":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_blocks_invoicing_when_all_actionable_transactions_are_backed_by_valid_e_conomic_drafts":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_keeps_invoicing_available_when_valid_drafts_only_cover_part_of_the_actionable_work":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_excludes_errored__booked__deleted__and_missing_external_id_invoice_collections_at_query_time":0.002,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_still_checks_valid_drafts_when_the_collection_table_has_no_deleted_marker_column":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_blocks_fixed_pricing_and_subscription_customer_level_work_when_a_relevant_valid_draft_exists":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_keeps_queue_blocking_ahead_of_the_draft_label_when_all_work_is_covered_by_queue_or_draft_state":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_detects_paginated_period_mode_only_when_pagination_parameters_are_present":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_normalizes_period_pagination_options_and_clamps_invalid_page_and_limit_values":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_slices_only_the_active_period_view_and_keeps_exact_full_result_type_counts":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_returns_the_entire_active_period_view_when_the_limit_is_all":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_searches_customer_fields_and_order_fields_at_the_customer_card_level":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_applies_requires_action_and_booked_visibility_filters_before_counting_and_slicing":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_normalizes_targeted_customer_number_filters_from_comma_separated_or_repeated_values":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_filters_period_customer_number_candidates_to_targeted_customers_only":0,"P\\Tests\\Unit\\MotorApi\\MotorApiCachedResultTest::__pest_evaluable_it_only_writes_cached_MotorAPI_metadata_when_a_response_object_exists":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_attaches_and_emails_a_wash_certificate_when_a_booking_is_already_linked_to_a_pos_order_without_one":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_does_not_create_or_email_a_duplicate_wash_certificate_when_a_linked_pos_order_already_has_one":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_keeps_standalone_booking_completion_behavior_unchanged_for_wash_certificates":0,"P\\Tests\\Unit\\Orders\\OrdersAutoWashCertificateCompletionTest::__pest_evaluable_it_auto_attaches_a_wash_certificate_on_order_completion_when_a_wash_certificate_item_is_present":0,"P\\Tests\\Unit\\Orders\\OrdersAutoWashCertificateCompletionTest::__pest_evaluable_it_keeps_order_completion_idempotent_when_a_wash_certificate_is_already_attached":0,"P\\Tests\\Unit\\Orders\\OrdersAutoWashCertificateCompletionTest::__pest_evaluable_it_allows_blank_safety_seal_values_when_auto_attaching_a_wash_certificate_on_completion":0,"P\\Tests\\Unit\\Orders\\OrdersIncludeInInvoiceOverrideTest::__pest_evaluable_it_lets_the_order_level_override_include_an_otherwise_excluded_order":0,"P\\Tests\\Unit\\Orders\\OrdersIncludeInInvoiceOverrideTest::__pest_evaluable_it_lets_the_order_level_override_exclude_an_otherwise_included_order":0,"P\\Tests\\Unit\\Orders\\OrdersIncludeInInvoiceOverrideTest::__pest_evaluable_it_falls_back_to_the_department_invoicing_rule_when_the_override_is_null":0,"P\\Tests\\Unit\\Orders\\OrdersIncludeInInvoiceOverrideTest::__pest_evaluable_it_serializes_both_raw_and_effective_include__in__invoice_values":0,"P\\Tests\\Unit\\Orders\\OrdersInputNormalizerTest::__pest_evaluable_it_normalizes_sql_and_datetime_local_created__at_values":0,"P\\Tests\\Unit\\Orders\\OrdersInputNormalizerTest::__pest_evaluable_it_rejects_invalid_created__at_values":0,"P\\Tests\\Unit\\Orders\\OrdersInputNormalizerTest::__pest_evaluable_it_normalizes_include__in__invoice_tri_state_inputs":0,"P\\Tests\\Unit\\Orders\\OrdersInputNormalizerTest::__pest_evaluable_it_rejects_invalid_include__in__invoice_values":0,"P\\Tests\\Unit\\Orders\\OrdersRouteSettingsUpdateWiringTest::__pest_evaluable_it_wires_order_create_and_update_routes_through_the_settings_normalizers":0,"P\\Tests\\Unit\\Orders\\OrdersRouteSettingsUpdateWiringTest::__pest_evaluable_it_keeps_line_item_invoice_filtering_in_the_order_net_amount_calculation":0,"P\\Tests\\Unit\\Orders\\OrdersRouteStripePaymentIntentLifecycleWiringTest::__pest_evaluable_it_wires_mobile_stripe_payment_intent_routes_to_normalized_lifecycle_handling":0.001,"P\\Tests\\Unit\\Orders\\StripePaymentIntentsPersistenceWiringTest::__pest_evaluable_it_wires_stripe_payment_intent_persistence_to_prune_duplicates_and_clear_reader_state_safely":0,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_does_not_send_empty_mget_commands_to_redis":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_generates_MinIO_replica_compose_templates_without_embedding_secrets":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_MinIO_free_space_and_catch_up_math_safely":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_wires_MinIO_replication_through_routes_and_bootstrap_snapshots":0.003,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_nested_v2_ALL_and_ANY_expression_trees_with_trace_output":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_v2_if__else_if__and_else_condition_branches_in_order":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_v2_case_expressions_against_question_values":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_returns_false_and_traces_v2_condition_expression_cycles":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_fails_validation_when_nested_conditions_form_cycles":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_migrates_legacy_AND_and_OR_rules_into_grouped_v2_condition_expressions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_repairs_legacy_defaulted_always_task_gates_during_v2_normalization":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_does_not_let_legacy_defaulted_always_task_gates_bypass_validation":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_rejects_unsupported_legacy_task_target_rules_after_migration":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_validates_v2_expressions_for_empty_used_conditions__missing_refs__invalid_operators__and_cycles":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_validates_nested_v2_branch_and_case_expressions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveInProgressWashAccessTest::__pest_evaluable_it_keeps_own_in_progress_self_serve_wash_details_visible_to_the_customer":0,"P\\Tests\\Unit\\Selfserve\\SelfserveInProgressWashAccessTest::__pest_evaluable_it_redacts_another_customers_in_progress_wash_details_during_customer_lane_polling":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_the_physical_machine_ON_signal_was_recorded__then_turns_off_cleaner_and_machine_relays":0.012,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_skips_vehicle_type_product_add_when_no_physical_machine_ON_signal_was_recorded_and_only_disables_configured_relays":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_does_not_use_selector_relay_online_status_as_machine_wash_billing_evidence":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_continues_STOP_when_exit_relay_dispatch_times_out_ambiguously":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_still_fails_STOP_for_non_timeout_exit_relay_errors":0,"P\\Tests\\Unit\\Selfserve\\SelfserveMachineSignalTest::__pest_evaluable_it_normalizes_Shelly_input_toggle_ON_events_as_machine_start_signals":0,"P\\Tests\\Unit\\Selfserve\\SelfserveMachineSignalTest::__pest_evaluable_it_normalizes_Shelly_switch_ON_events_and_nested_status_payloads":0,"P\\Tests\\Unit\\Selfserve\\SelfserveMachineSignalTest::__pest_evaluable_it_recognizes_Shelly_OFF_events_but_does_not_treat_them_as_billable_machine_starts":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_local_edge_gateway_machine_ON_signal_monitor_endpoints":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_lane_level_self_serve_toggles_through_lane_APIs__guest_payloads__and_edge_workspace_readiness":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_returns_authoritative_allowed_service_state_from_self_serve_session_summaries":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_filters_machine_button_tasks_out_of_self_serve_snapshots_when_MACHINE_is_not_allowed":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_blocks_new_self_serve_eligibility_and_session_sync_for_disabled_lanes":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_adds_lane_level_self_serve_enablement_for_existing_department_lanes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_creates_canvas_only_self_serve_studio_layout_storage":0,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_uses_mysql_safe_identifiers_for_self_serve_studio_virtual_hardware_storage":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_serializes_configurable_studio_actions_with_event__gate__scope__and_ordering_edges":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_validates_action_configuration_and_keeps_warnings_non_blocking":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_serializes_v2_condition_expressions_without_standalone_rule_nodes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_serializes_branch_and_case_condition_expression_dependencies":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_keeps_runtime_on_published_v2_configs_and_leaves_draft_JSON_as_the_studio_edit_surface":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_surfaces_task_attachments_in_studio_graph__simulator__and_flow_responses":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_exposes_dynamic_images_and_referenced_machine_types_as_studio_lookup_choices":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_keeps_lane_management_fields_on_lane_scope_nodes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_routes_studio_lane_graph_operations_through_department__lanes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_projects_visible_question_answer_paths_into_grouped_task_service_and_signal_outcomes":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_truncates_path_outcome_projection_when_the_state_cap_is_reached":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_returns_complete_terminal_path_results_for_wide_question_trees_and_reports_progress":0.364,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_generates_and_merges_virtual_hardware_as_studio_only_relay_coverage":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_renders_virtual_gateway_nodes_and_task_service_edges_in_the_studio_graph":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_inserts_configured_action_signals_into_the_simulator_timeline_in_runtime_order":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_simulates_lane_scoped_wash_start_actions_for_property_gates_and_lane_entrance_ports":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_adds_ordered_simulator_signal_timeline_rows_for_virtual_hardware_dry_runs":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashFlowMachineAllowedWiringTest::__pest_evaluable_it_infers_legacy_defaulted_always_task_gates_from_condition__id_at_runtime":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashSessionStateTest::__pest_evaluable_it_treats_terminal_self_serve_wash_session_statuses_as_closed":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashSessionStateTest::__pest_evaluable_it_freezes_elapsed_self_serve_wash_minutes_at_completion_time":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_exposes_chauffeur_management_endpoints_on_the_subusers_route":0.001,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_includes_grant_management_fields_in_the_subusers_payload_builder":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_links_grant_disable_operations_to_SUBUSERS__DELETE_for_own_customer_managers":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_prevents_own_customer_managers_from_editing_driver_owned_account_profiles":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_only_allows_invite_resend_while_setup_is_still_pending":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusOpenApiSpecTest::__pest_evaluable_it_documents_the_superuser_system_status_snapshot_endpoint_in_openapi":0.001,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusOpenApiSpecTest::__pest_evaluable_it_defines_the_reusable_system_status_schemas_and_enums":0.001,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusRouteWiringTest::__pest_evaluable_it_registers_the_aggregated_superuser_system_status_endpoint_and_permission":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusRouteWiringTest::__pest_evaluable_it_keeps_the_legacy_database_status_endpoint_wired_through_the_shared_snapshot_service":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reduces_overall_status_using_down_and_degraded_precedence":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_runtime_usage_percentages_consistently":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reuses_cached_module_probes_only_when_the_ttl_is_still_valid_and_force_is_false":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"success\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"unauthorized\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"forbidden\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"rate limited\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"server error\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"no response\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_transport_errors_as_down":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_normalizes_and_deduplicates_warning_entries_for_snapshots":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_interprets_recaptcha_probe_payloads_safely with data set \"dataset \"dummy token rejected but credentials valid\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_interprets_recaptcha_probe_payloads_safely with data set \"dataset \"invalid secret is down\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_interprets_recaptcha_probe_payloads_safely with data set \"dataset \"unexpected validation errors degrade\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"recaptcha\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"email\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"motorapi\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"fxratesapi\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"weatherapi\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"workfeed\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"gatewayapi\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"xlvask\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"limble\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"license plate recognizer\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"bird\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_uses_runtime_economic_credentials_for_the_economic_probe":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_returns_down_without_attempting_economic_http_calls_when_runtime_credentials_are_missing":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reports_backup_probe_failures_from_local_validation":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_returns_configured_for_shelly_when_no_known_device_id_is_available_for_probing":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_an_authenticated_shelly_status_probe_when_a_known_device_id_exists":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_validates_selfserve_schema_and_minute_product_configuration":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reports_invalid_selfserve_minute_configuration_before_touching_the_schema":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reports_missing_selfserve_minute_products":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_surfaces_selfserve_bootstrap_failures":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_adds_localization_metadata_for_disabled_and_missing_config_modules":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_marks_newly_supported_modules_as_probe_backed_and_leaves_only_truly_unsupported_modules_as_configuration_only":0.001,"P\\Tests\\Unit\\SystemStatus\\SystemSessionActivityTrackerTest::__pest_evaluable_it_detects_device_types_from_common_user_agents":0,"P\\Tests\\Unit\\SystemStatus\\SystemSessionActivityTrackerTest::__pest_evaluable_it_treats_recent_sessions_as_active_within_the_configured_activity_window":0,"P\\Tests\\Unit\\SystemStatus\\SystemSessionActivityTrackerTest::__pest_evaluable_it_converts_database_utc_datetimes_into_timezone_aware_iso_strings":0,"P\\Tests\\Unit\\SystemStatus\\SystemSessionActivityTrackerTest::__pest_evaluable_it_treats_timezone_aware_iso_timestamps_as_active_using_absolute_time":0,"P\\Tests\\Unit\\Tooling\\LegacyTestInventoryTest::__pest_evaluable_it_keeps_every_legacy_PHP_test_accounted_for_in_the_manifest":0.002,"P\\Tests\\Unit\\Tooling\\MySqlSchemaCompatibilityTest::__pest_evaluable_it_keeps_schema_bootstrap_SQL_compatible_with_the_MySQL_runner":0.025,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_allows_callers_to_resolve_customer_names_without_e_conomic_fallback":0.001,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_returns_an_empty_customer_name_map_without_touching_cache_for_empty_input":0,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_returns_no_rows_for_empty_array_field_filters":0,"P\\Tests\\Unit\\Users\\UsersRedisNamespaceSafetyTest::__pest_evaluable_it_keeps_users_Redis_access_namespace_safe":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_builds_department_weather_preload_targets_in_cli_without_a_request_uri":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherPreloadCronWiringTest::__pest_evaluable_it_registers_and_implements_cron_warming_for_workfeed_employee_name_cache":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_aggregates_multi_department_slot_statuses_using_worst_severity_when_any_department_is_unhealthy":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_aggregates_all_unhealthy_multi_department_slot_statuses_as_unhealthy":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_returns_unknown_when_aggregated_multi_department_slot_targets_are_missing":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_returns_unknown_when_aggregated_multi_department_slot_has_no_evaluable_hours":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_returns_unknown_when_aggregated_multi_department_slot_has_not_started_yet":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsRouteWiringTest::__pest_evaluable_it_registers_department_weather_hour_details_route_with_weather_read_and_department_access_checks":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_calculates_weather_hour_contributions_grouped_per_employee_for_a_slot":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_calculates_weather_hour_contributions_for_canonical_nested_workfeed_employee_schema":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_extracts_weather_employee_identity_from_supported_shift_payload_shapes":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_prefers_canonical_workfeed_employee_schema_fields_over_generic_employee_names":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_does_not_use_workfeed_schema_name_fields_as_employee_ids":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_returns_a_null_employee_name_when_no_workfeed_employee_name_is_available":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_resolves_missing_workfeed_employee_names_from_the_employees_endpoint":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_filters_employee_hour_rows_that_cannot_be_resolved_to_a_workfeed_schema_name":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_resolves_employee_display_name_from_cache_when_shift_payload_lacks_a_name":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_formats_workfeed_employee_display_names_from_the_documented_firstname_lastname_schema":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_prefers_workfeed_schema_names_over_generic_display_name_fields":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_falls_back_to_legacy_display_name_fields_when_schema_names_are_absent":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_ignores_placeholder_workfeed_display_names":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_ignores_employee_id_placeholder_display_names_when_the_id_is_known":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_normalizes_registrations_for_XL_Vask_automation_signatures":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_builds_stable_XL_Vask_automation_item_signatures":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_normalizes_persisted_XL_Vask_usage_log_rows_before_helper_hydration":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_builds_stable_OpenAI_cache_keys_for_identical_automation_input":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_changes_OpenAI_cache_keys_when_automation_eligibility_input_changes":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_declares_a_persistent_OpenAI_cache_table_for_XL_Vask_automation":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_declares_cached_amount_summary_columns_for_XL_Vask_usage_logs":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_scores_same_day_orders_with_matching_XL_Vask_products_and_extra_add_ons_as_attach_suggestions":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_does_not_score_an_order_with_only_the_primary_product_as_a_matching_add_on_attachment":0,"P\\Tests\\Unit\\XLVask\\XLVaskUsageLogHelperTest::__pest_evaluable_it_accepts_persisted_ignore_metadata_from_xlvask_usage_log_rows":0.001,"P\\Tests\\Unit\\XLVask\\XLVaskUsageLogHelperTest::__pest_evaluable_it_calculates_XL_Vask_amount_summaries_without_hydrating_order_item_previews":0,"P\\Tests\\Unit\\XLVask\\XLVaskUsageRouteContractTest::__pest_evaluable_it_exposes_direct_linked_order_metadata_on_XL_Vask_usage_order_rows":0.001,"P\\Tests\\Unit\\XLVask\\XLVaskUsageRouteContractTest::__pest_evaluable_it_returns_cached_amount_summaries_on_XL_Vask_usage_order_rows_without_widening_the_usage_log_object_payload":0,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_counts_complaint_rows_by_department_and_created__at_reporting_range":0.284,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_updates_and_deletes_complaint_rows":0.005,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_parses_created__by__name_from_the_users_table":0.005,"P\\Tests\\Integration\\DailyReports\\DepartmentOutsideHoursStatisticsServiceIntegrationTest::__pest_evaluable_it_integrates_orders__xlvask__and_self_serve_into_one_outside_hours_summary_with_missing_hours_diagnostics":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_processes_only_collected_invoice_jobs_and_respects_the_manual_batch_limit":0.014,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_the_configured_database_in_integration_mode":0,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_redis_in_integration_mode_when_configured":0,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_minio_in_integration_mode_when_configured":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_redacts_sensitive_release_timeline_payload_fields_recursively":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_verifies_GitHub_sha256_webhook_signatures":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_normalizes_GitHub_repository_identifiers_for_private_repository_access_checks":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_defines_release_manager_schema__routes__permissions__and_system_status_integration_hooks":0.004,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_summarizes_failed_deployments_and_blocks_promotion_until_a_deployment_succeeds":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_selected_Coolify_project_and_resolves_server_UUID_from_the_instance_default":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_supports_isolated_stack_mode_and_names_new_Coolify_services_explicitly":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_Coolify_service_payloads_from_raw_compose_without_a_service_type":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_normalizes_Coolify_API_base_URLs_to_the_v1_API_root":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_parses_generated_env_files_for_Coolify_service_env_bulk_updates":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_prefers_public_Coolify_server_hosts_over_Docker_local_addresses":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_blocks_planned_downtime_operations_against_active_replication_primaries":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_allows_failed_Coolify_replica_targets_to_be_removed_after_the_service_disappears":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_retries_Coolify_maintenance_while_linked_replication_provisioning_is_still_incomplete":0.029,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_plans_Hetzner_load_balancer_target_and_service_drift_without_mutating_state":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_does_not_plan_removal_of_the_last_Hetzner_load_balancer_target":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_plans_removal_only_for_disabled_or_deleted_Hetzner_load_balancer_targets":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_defines_Coolify_schema__route_permissions__and_replication_integration_hooks":0.011,"P\\Tests\\Unit\\ErrorReports\\ErrorReportTest::__pest_evaluable_it_redacts_sensitive_error_report_payload_fields_recursively":0,"P\\Tests\\Unit\\ErrorReports\\ErrorReportTest::__pest_evaluable_it_validates_supported_screenshot_data_uris":0,"P\\Tests\\Unit\\ErrorReports\\ErrorReportTest::__pest_evaluable_it_defines_error_report_schema__routes__permissions__storage__and_OpenAPI_docs":0.001,"P\\Tests\\Unit\\Http\\ResponseRequestParametersTest::__pest_evaluable_it_reads_JSON_payloads_for_DELETE_request_parameter_arrays":0,"P\\Tests\\Unit\\Http\\ResponseRequestParametersTest::__pest_evaluable_it_keeps_DELETE_query_parameters_when_no_JSON_body_is_present":0,"P\\Tests\\Unit\\Infrastructure\\CorsReleaseHeadersTest::__pest_evaluable_it_allows_release_telemetry_headers_at_PHP_served_CORS_entry_points":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_uses_the_linked_pos_order_wash_certificate_item_added_during_mobile_completion":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_normalizes_failover_config_defaults_and_per_kind_enablement":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_requires_strict_fresh_100_percent_replica_status_for_candidates":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_selects_the_freshest_eligible_replica_for_failover":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_promotes_enabled_startup_dependencies_from_snapshot_in_dependency_order":0.001,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_does_not_promote_a_disabled_dependency_during_startup_failover":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_wires_the_failover_module_config_endpoint_and_promotion_paths":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_can_embed_primary_admin_credentials_in_generated_MariaDB_replica_env_files":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_operational_and_derived_tables_schema_only_during_MariaDB_seeding_and_replication":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_supports_metadata_only_replication_host_renames":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_MinIO_backup_replicas_bounded_to_the_recent_backup_window":0.004,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_prefills_MinIO_replica_compose_primary_values_from_current_config_when_available":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_allows_the_MinIO_client_binary_to_be_configured_explicitly":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_supports_MinIO_client_runtime_fallback_configuration":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_extracts_host_specific_MariaDB_replication_account_denials":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_identifies_stopped_database_replication_threads_as_a_restartable_status":0,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_returns_no_plate_LPR_results_without_a_failed_HTTP_status":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_does_not_invent_GHCR_images_for_Coolify_service_payloads":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_release_branch_services_out_of_the_production_Coolify_environment_except_beta":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_Coolify_GitHub_App_application_payloads_so_pulls_use_the_app_token":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_does_not_treat_an_existing_Coolify_service_as_an_application_just_because_a_GitHub_App_UUID_is_stored":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_can_use_the_Coolify_instance_default_GitHub_App_when_source_targets_do_not_store_it_yet":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_updates_existing_frontend_Coolify_applications_away_from_legacy_Nixpacks_detection":0,"P\\Tests\\Unit\\Auth\\EconomicCreateCustomerResponseTest::__pest_evaluable_it_adds_supported_CVR_company_fields_to_the_e_conomic_customer_payload":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_release_channel_runtime_availability_independent_from_channel_URLs":0.007,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_chooses_a_requested_runtime_channel_only_when_it_is_available_to_the_principal":0.199,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_normalizes_release_assignment_subject_suggestions_without_leaking_private_fields":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_GitHub_commit_timestamps_in_public_release_manager_commit_payloads":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_requires_non_default_release_channel_runtime_URLs_and_preserves_load_balancer_paths":0.002,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_exposes_release_version_git_commit_metadata_for_runtime_channel_cards":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_builds_gateway_API_auto_provision_context_for_connected_Coolify_servers":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_adds_explicit_Coolify_application_route_labels_for_gateway_API_domains":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_builds_explicit_Coolify_application_route_labels_for_release_API_targets":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_self_contained_Coolify_API_Dockerfile_for_API_applications":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_isolates_and_restores_Hetzner_load_balancer_IP_targets_for_gateway_certificate_bootstrap":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_requires_gateway_ping_probes_to_return_the_API_ping_contract":0,"P\\Tests\\Unit\\Tooling\\ComposerEntrypointTest::__pest_evaluable_it_checks_PSR_HTTP_message_interfaces_before_trusting_a_Composer_vendor_tree":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_marks_a_channel_ready_when_all_release_services_are_healthy":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_reports_non_default_channels_missing_bundles__versions__and_URLs_as_blocking_missing_values":0.024,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_surfaces_failed_latest_deployments_as_critical_promotion_blockers":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_flags_isolated_stacks_that_are_missing_database_Redis_and_MinIO_services":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_maps_degraded_Coolify_targets_and_reconcile_failures_to_release_service_issues":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_plans_Hetzner_load_balancer_service_health_check_drift_updates":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_returns_structured_errors_for_failed_gateway_certificate_bootstrap_and_verification":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_captures_release_request_context_from_headers_and_runtime_query_parameters":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_normalizes_channel_prefixed_API_ingress_paths_before_route_dispatch":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_frontend_Coolify_GitHub_App_application_payloads_with_the_release_Dockerfile":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_builds_gateway_frontend_auto_provision_context_with_the_release_Dockerfile":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_allows_explicit_runtime_selection_of_any_enabled_release_channel":0.289,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_chooses_requested_runtime_channels_from_available_channels_or_enabled_channel_slugs":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_normalizes_gateway_probe_paths_for_release_gateway_health_checks":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_resolves_release_deployment_endpoints_from_manual_overrides__URLs__health_checks__and_gateway_defaults":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_does_not_report_frontend_or_API_URLs_missing_when_target_auto_endpoints_are_resolvable":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_offers_a_release_bundle_action_when_exactly_one_deployed_bundle_is_eligible":0.008,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_offers_application_target_preparation_for_path_routed_Coolify_failures":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_maps_the_public_master_API_prefix_to_the_stable_release_channel":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_master_as_the_public_route_slug_for_the_stable_release_channel":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_does_not_block_channels_on_unhealthy_data_targets_when_data_services_are_production_shared":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_ignores_missing_legacy_bundles_but_still_blocks_on_missing_versions_and_URLs":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_marks_a_branch_based_channel_ready_without_a_release_bundle_when_app_versions_and_URLs_exist":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_does_not_surface_legacy_release_bundle_actions_as_readiness_blockers":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_adds_exact_hidden_question__skipped_action__signal__and_button_decision_causes":0,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_rejects_standalone_order_booking_completion_outside_POS":5.621,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_allows_linked_POS_order_booking_completion_for_mobile_POS_compatibility":4.121,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_accepts_numeric_safety_seal_strings_when_completing_a_linked_POS_order_booking":4.366,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_disables_the_legacy_complete_wash_without_certificate_route":1.122,"P\\Tests\\Api\\OrderBookingsUpdateApiTest::__pest_evaluable_it_detaches_an_order_booking_and_clears_the_matching_order_link":5.559,"P\\Tests\\Api\\OrderBookingsUpdateApiTest::__pest_evaluable_it_keeps_the_linked_order_when_order__id_is_omitted_from_an_order_booking_update":5.22,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_accepts_ordered_dynamic_image_button_tokens_including_program_picker_reset_start_and_zero":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_adds_program_picker_before_mapped_machine_buttons_in_simulator_debug_decisions":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_verifies_CI_release_gate_bearer_tokens_from_dedicated_release_credentials":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_only_chooses_requested_runtime_channels_from_channels_available_to_the_principal":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_ignores_explicit_runtime_selection_for_channels_outside_the_principal_channel_set":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_auto_prepares_path_routed_release_targets_for_Coolify_application_creation":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_offers_application_target_preparation_for_missing_Coolify_service_creation_failures":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_builds_API_Coolify_runtime_environment_from_allowed_process_variables":0.001,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_normalizes_URL_like_CORS_entries_to_origins":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_merges_required_release_and_existing_frontend_origins_into_configured_CORS":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_builds_credential_safe_normal_CORS_response_headers_for_allowed_origins":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_builds_preflight_CORS_response_headers_for_api_v2_release_URLs":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_rejects_unknown_CORS_origins":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_reflects_the_request_origin_for_wildcard_CORS_instead_of_sending_credentialed_wildcard_headers":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_allows_customers_with_own_self_serve_permission_to_use_enabled_self_serve_lanes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_blocks_customer_lane_mutations_without_own_self_serve_permission":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_blocks_customer_lane_mutations_when_the_lane_is_not_operationally_enabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_allows_active_wash_operations_when_the_lane_runtime_belongs_to_the_customer":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_falls_back_to_active_department_sessions_for_customer_active_wash_operations":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_blocks_active_wash_operations_for_other_customers":0,"P\\Tests\\Unit\\Selfserve\\SelfservePropertyGatePermissionBypassTest::__pest_evaluable_it_does_not_bypass_property_gate_permissions_without_customer_self_serve_permission":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_keeps_active_wash_operations_available_if_a_lane_is_disabled_after_start":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_authentication_before_checking_in_progress_wash_permissions":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_reports_both_elevated_and_customer_self_serve_permissions_when_lane_polling_is_not_allowed":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_allows_customer_self_serve_permission_to_view_their_own_in_progress_wash_details":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_redacts_another_customers_in_progress_wash_from_customer_self_serve_lane_polling":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_beta_API_runtime_environment_on_production_database_target":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_treats_attach_existing_service_sets_without_data_target_ids_as_production_shared_ready":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_rejects_beta_release_bundles_that_resolve_to_isolated_cloned_or_fresh_data_services":0.01,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_detects_explicit_data_target_ids_so_beta_service_sets_can_stay_data_only":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_resolves_backend_commit_sha_from_API_runtime_environment_in_priority_order":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_injects_selected_API_commit_into_Coolify_runtime_env_unless_explicitly_set":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_allows_beta_production_service_bundles_only_when_data_services_stay_production_shared":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_release_branch_services_out_of_the_production_Coolify_environment":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_marks_beta_ready_from_the_production_frontend_and_API_services":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_uses_program_picker_button_numbers_as_thumb_selectors_in_simulator_debug_decisions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_upserts_path_editor_answers_into_generated_condition_and_task_config_rows":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_marks_projected_path_confirmations_confirmed_or_stale_by_stable_signatures":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_creates_self_serve_studio_path_confirmation_storage":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_resolves_subuser_customer_names_without_external_lookups_during_list_requests":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_treats_null_path_confirmation_rows_as_an_empty_confirmation_set":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_applies_default_caps_for_wide_question_trees_and_reports_progress":0.062,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_dashboard_lane_machine_status_and_Dognvask_toggle_endpoints":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_classifies_self_serve_lane_command_route_authorization_by_customer_product_behavior":0.004,"P\\Tests\\Unit\\Selfserve\\EdgeBrokerClientConfigTest::__pest_evaluable_it_uses_default_broker_url_but_requires_explicit_shared_secret_configuration":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeBrokerClientConfigTest::__pest_evaluable_it_fails_closed_when_no_broker_shared_secret_is_configured":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_denies_customer_self_serve_command_fallback_when_the_self_serve_module_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_returns_deterministic_forbidden_permissions_when_disabled_module_blocks_customer_self_serve_command_fallback":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_continues_allowing_operator_self_serve_commands_when_the_self_serve_module_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveEligibilityLaneAccessTest::__pest_evaluable_it_authorizes_customer_eligibility_preview_lanes_before_returning_task_attachments":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceModeBillingTest::__pest_evaluable_it_creates_self_serve_invoice_orders_for_the_actual_lane_customer_when_a_draft_customer_is_configured":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceModeBillingTest::__pest_evaluable_it_keeps_the_real_billing_customer_as_the_authoritative_order_customer_in_the_invoice_context":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_caps_excessive_timer_values_when_opening_lane_gates":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_hard_MACHINE_relay_helper_targets_the_configured_MACHINE_relay":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_blocks_setMachineRelayStatus_from_enabling_MACHINE_when_MACHINE_is_not_allowed":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartRaceLockWiringTest::__pest_evaluable_it_locks_and_marks_a_self_serve_start_occupied_before_opening_the_entrance_relay":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStartCleanerRelayWiringTest::__pest_evaluable_it_does_not_enable_cleaner_relay_before_deferred_start_relay_side_effects_are_checked":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioActionRunnerTest::__pest_evaluable_it_does_not_match_condition_gated_actions_when_condition_results_are_missing":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_always_dispatches_completion_relay_off_for_configured_machine_relays_without_a_status_precheck":0,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_only_includes_local_IP_addresses_for_internal_relay_option_lookups":0.001,"P\\Tests\\Api\\SelfserveFixtureApiTest::__pest_evaluable_it_creates_self_serve_invoice_orders_for_the_lane_customer_with_draft_customer_and_driver_metadata_attached":0.283,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_allows_customer_self_serve_permission_to_execute_START_without_department_access_when_department_and_lane_are_enabled":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_customer_START_when_department_self_serve_is_disabled":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_customer_START_when_lane_self_serve_is_disabled":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_a_customer_STOP_for_another_customers_active_lane":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_still_allows_elevated_operators_with_department_access_to_execute_lane_commands":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_keeps_operator_only_commands_elevated_only_for_customers_and_reports_command_permissions":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_authentication_before_checking_the_current_customers_active_self_serve_wash":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_customer_self_serve_permission_before_checking_my_active_wash":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_returns_the_authenticated_customers_active_self_serve_wash_without_requiring_a_lane_id":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_returns_404_when_the_authenticated_customer_has_no_active_self_serve_wash":0,"P\\Tests\\Unit\\Selfserve\\ModuleConfigVariableDatabaseConfigTest::__pest_evaluable_it_reads_debug_database_configuration_when_the_debug_target_is_selected":0,"P\\Tests\\Unit\\Selfserve\\ModuleConfigVariableDatabaseConfigTest::__pest_evaluable_it_keeps_live_database_configuration_as_the_default_target":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_allows_the_customer_self_serve_start_sequence_without_department_access":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_skips_cleaner__program_picker_and_machine_relay_side_effects_when_start_asks_to_defer_them":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_keeps_cleaner__program_picker_and_machine_relay_side_effects_in_order_for_normal_start_commands":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_the_physical_machine_ON_signal_was_recorded__after_turning_relays_off_before_exit":0.001,"P\\Tests\\Unit\\Selfserve\\SelfservePublishedConfigLaneWildcardTest::__pest_evaluable_it_applies_department_product_rows_with_lane_zero_to_all_lanes_in_published_v2_configs":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_derives_allowed_services_from_v2_session_task_snapshots_when_task_rows_are_not_legacy_records":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_sources_guest_lane_product_availability_from_the_published_v2_self_serve_config_before_legacy_tasks":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_widens_self_serve_task_descriptions_for_generated_workbook_instructions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_alters_legacy_bounded_description_columns_to_text":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_keeps_long_generated_task_descriptions_when_refreshing_vehicle_eligibility_snapshots":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_marks_the_active_customer_session_relay_enabled_after_machine_relay_enable":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_normalizes_app_specific_release_gate_auto_sync_metadata":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_requires_non_empty_release_gate_checks_before_auto_sync_can_proceed":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_injects_selected_frontend_commit_into_Coolify_runtime_env_for_manifest_builds":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_redacts_GitHub_access_metadata_from_public_release_versions":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_restricts_release_gate_fetches_to_Truckwash_release_hosts_and_relative_paths":0.001,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_does_not_create_an_active_wash_preview_session_from_read_only_eligibility_checks":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_derives_allowed_services_from_published_v2_config_task_snapshots_when_no_session_exists_yet":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_does_not_create_a_replacement_session_when_refreshing_a_completed_summary_with_vehicle_type":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_creates_a_durable_wash_session_from_customer_start_after_read_only_eligibility":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_refreshes_an_active_wash_summary_with_vehicle_type_without_a_namespace_error":0,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_persists_superuser_new_customer_notification_preferences_and_includes_them_in_session_payloads":0,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_requires_superuser_permission_before_saving_superuser_new_customer_notification_preferences":0,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_sends_new_customer_registration_notifications_only_to_opted_in_superusers":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAccessScopeTest::__pest_evaluable_it_scopes_economic_transfer_queue_route_reads_and_retries_to_the_current_user":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_enforces_customer_or_department_context_before_building_v2_invoice_details_payload":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_normalizes_invoice_period_date_ranges_to_full_day_timestamps_before_cache_backed_reads":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_canonicalizes_invoice_period_redis_keys_for_bare_dates_and_normalized_API_timestamps":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_does_not_treat_subset_primary_vehicle_product_names_as_equivalent":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_rebuilds_automatic_invoice_period_data_on_cache_misses_instead_of_hiding_warnings":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_only_includes_invoice_period_flags_when_the_list_permission_is_granted":0.001,"P\\Tests\\Unit\\N8n\\N8nWebhookUrlValidationWiringTest::__pest_evaluable_it_restricts_absolute_webhook_URLs_to_configured_n8n_webhook_host":0.001,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_attaches_and_emails_a_wash_certificate_when_a_booking_is_already_linked_to_a_matching_pos_order_without_one":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_rejects_wash_certificate_completion_when_the_linked_pos_order_belongs_to_another_booking_context":0,"P\\Tests\\Unit\\Replication\\SuperuserReplicationRouteWiringTest::__pest_evaluable_it_rejects_subuser_sessions_before_checking_replication_permissions":0.001,"P\\Tests\\Unit\\Search\\SystemSearchRouteBehaviorTest::__pest_evaluable_it_does_not_grant_global_users_search_through_narrow_id_and_name_lookup_permissions":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_passes_allowed_department_ids_into_lexical_execution_context":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_only_applies_indexed_department_filters_to_department_scoped_indexed_entities":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_does_not_expand_associations_for_own_only_entity_types":0,"P\\Tests\\Unit\\Subusers\\SubuserGrantPermissionsTest::__pest_evaluable_it_keeps_default_subuser_grant_permissions_JSON_encodable":0,"P\\Tests\\Unit\\Subusers\\SubuserGrantPermissionsTest::__pest_evaluable_it_normalizes_stored_subuser_grant_permission_payloads":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_accepts_subuser_passwords_that_match_the_shared_policy":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"too short\"\"":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"missing uppercase\"\"":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"missing lowercase\"\"":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"missing number\"\"":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"too long\"\"":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_scopes_superuser_invite_resend_to_a_selected_customer_grant":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_requires_own_subuser_permissions_for_classic_customer_users_in_managed_customer_scope":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedClientConformanceTest::__pest_evaluable_it_only_trusts_documented_workfeed_api_hosts":0,"P\\Tests\\Unit\\XLVask\\XLVaskUsageRouteContractTest::__pest_evaluable_it_does_not_execute_XL_Vask_usage_automation_while_listing_usage_order_rows":0.001,"P\\Tests\\Unit\\Slack\\SlackConfigRouteWiringTest::__pest_evaluable_it_registers_Slack_module_config_endpoints_and_customer_registration_webhook_config":0.011,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_extracts_API_ping_commit_metadata_for_release_gate_verification":0,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_invalidates_cached_session_payloads_after_notification_preferences_change":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_filters_period_flag_tabs_using_active_customer_scoped_flag_counts":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_collects_previous_Coolify_application_UUIDs_for_stale_route_cleanup":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_selected_deployment_commit_before_stale_Coolify_context_commits":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_forces_selected_API_commit_into_generated_Coolify_runtime_env_keys":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_deletes_only_generated_API_commit_env_rows_before_Coolify_application_env_updates":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_waits_for_an_in_flight_automatic_sync_instead_of_passing_the_retry_immediately":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_syncs_only_the_program_picker_relay_when_start_asks_to_defer_machine_side_effects":0,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_turns_off_the_program_picker_on_deferred_start_when_the_frontend_selected_manual_wash":0,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_does_not_let_backend_machine_eligibility_override_a_frontend_manual_wash_selection":0,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_uses_the_selfserve_dynamic_image_size_config_for_route_output_and_cache_keys":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSessionRaceWiringTest::__pest_evaluable_it_serializes_self_serve_session_synchronization_before_reading_or_creating_open_sessions":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSessionRaceWiringTest::__pest_evaluable_it_closes_self_serve_wash_sessions_with_an_atomic_open_session_guard":0.001,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_allows_the_fallback_Vite_localhost_dev_origin_used_after_port_5173_is_busy":0,"P\\Tests\\Api\\CollectedInvoiceMoveCustomerApiTest::__pest_evaluable_it_moves_a_collected_invoice_collection_and_all_attached_orders_to_another_customer":0,"P\\Tests\\Api\\CollectedInvoiceMoveCustomerApiTest::__pest_evaluable_it_rejects_moving_a_collection_that_already_has_an_external_invoice_reference":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceMoveCustomerRouteTest::__pest_evaluable_it_wires_collected_invoice_customer_moves_through_the_dedicated_route_and_permission":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_skips_relay_side_effects_when_start_asks_to_defer_machine_side_effects":0,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitWiringTest::__pest_evaluable_it_bounds_Shelly_cloud_HTTP_requests_with_curl_timeouts":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_only_syncs_program_picker_from_selected_service_when_start_asks_to_defer_machine_side_effects":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_returns_more_than_200_projected_path_cases_by_default":0.019,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_applies_the_default_state_cap_for_wide_question_trees_and_reports_progress":0.145,"P\\Tests\\Unit\\Auth\\PasswordResetTokenExpiryTest::__pest_evaluable_it_keeps_password_reset_tokens_valid_for_72_hours":0,"P\\Tests\\Unit\\Auth\\PasswordResetTokenExpiryTest::__pest_evaluable_it_looks_up_reset_tokens_using_the_database_72_hour_validity_window":0.002,"P\\Tests\\Unit\\Auth\\PasswordResetTokenExpiryTest::__pest_evaluable_it_uses_the_same_database_72_hour_window_for_the_selected_token_guard":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_normal_STOP_completion_skips_duplicate_completion_relay_cleanup_after_STOP_already_disabled_relays":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_does_not_infer_program_picker_enablement_from_machine_service_without_a_customer_machine_selection":0,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_keeps_normal_start_program_picker_off_when_the_customer_selected_manual_wash":0,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_honors_a_frontend_machine_wash_selection_when_machine_service_is_selected":0,"P\\Tests\\Unit\\Infrastructure\\PhpFpmWorkerConfigTest::__pest_evaluable_it_configures_PHP_FPM_with_multiple_warm_request_workers":0.001,"P\\Tests\\Unit\\Infrastructure\\PhpFpmWorkerConfigTest::__pest_evaluable_it_copies_the_worker_pool_config_into_every_API_PHP_image":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_sends_raw_base64_to_Plate_Recognizer_with_fast_mode_enabled":0.004,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_keeps_already_raw_base64_upload_data_unchanged":0,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_does_not_store_scanner_images_before_LPR_recognition":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_sends_data_URI_images_to_Plate_Recognizer_as_multipart_bytes_with_fast_mode_enabled":0.002,"P\\Tests\\Unit\\Bookings\\OrderBookingCompletionConfirmationRouteTest::__pest_evaluable_it_wires_the_order_booking_completion_confirmation_resend_endpoint":0.001,"P\\Tests\\Unit\\Email\\FakeEmailDeliveriesTest::__pest_evaluable_it_syncs_fake_email_deliveries_written_by_another_process":0.001,"P\\Tests\\Unit\\Email\\NewCustomerEmailTemplateLegacyScriptTest::__pest_evaluable_it_renders_the_new_customer_welcome_template_without_unselected_user_access_or_leaked_output":0.015,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_parses_wash_mode_aliases_on_start_command_arguments":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_rejects_invalid_wash_types_on_start_command_arguments":0,"P\\Tests\\Unit\\Slack\\SlackCustomerRegistrationWebhookTest::__pest_evaluable_it_does_not_send_customer_registration_test_notifications_without_a_saved_webhook":0.001,"P\\Tests\\Unit\\Slack\\SlackCustomerRegistrationWebhookTest::__pest_evaluable_it_sends_customer_registration_test_notifications_to_the_saved_webhook":0.001,"P\\Tests\\Unit\\Slack\\SlackCustomerRegistrationWebhookTest::__pest_evaluable_it_reports_customer_registration_test_notification_failures_without_exposing_the_webhook":0,"P\\Tests\\Unit\\Storage\\MinioLocalTestStorageTest::__pest_evaluable_it_falls_back_to_local_test_storage_when_MinIO_config_values_are_empty":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_can_skip_config_object_setup_and_cache_runtime_config_for_scanner_requests":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_treats_false_runtime_config_values_as_disabled":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_can_point_Plate_Recognizer_calls_at_a_local_measurement_upstream":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_disables_curl_expect_continue_waits_for_large_multipart_uploads":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_sends_multipart_route_image_bytes_to_Plate_Recognizer_without_base64_wrapping":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_sends_multipart_route_upload_files_to_Plate_Recognizer_without_reading_bytes_into_PHP_memory":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_aborts_upstream_recognition_transfers_when_the_HTTP_client_disconnects":0,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_returns_low_confidence_LPR_results_without_a_failed_HTTP_status":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_shares_runtime_config_briefly_across_scanner_recognizer_instances":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_refreshes_the_shared_runtime_config_cache_after_the_short_scanner_ttl":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_reuses_and_resets_the_Plate_Reader_curl_handle_for_scanner_bursts":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_Redis_backed_runtime_config_cache_across_scanner_requests_when_available":0,"P\\Tests\\Api\\ModuleScannerLprApiTest::__pest_evaluable_it_accepts_multipart_scanner_images_and_forwards_them_to_Plate_Recognizer_as_a_temp_file_upload":0,"P\\Tests\\Api\\ModuleScannerLprApiTest::__pest_evaluable_it_rejects_scanner_LPR_requests_without_an_image_before_contacting_Plate_Recognizer":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_does_not_capture_outgoing_curl_headers_on_the_scanner_hot_path":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_reads_runtime_config_once_in_the_scanner_recognition_hot_path":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_bounds_Plate_Recognizer_scanner_uploads_with_conservative_curl_timeouts":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_a_short_exact_image_result_cache_before_calling_Plate_Recognizer":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_builds_stable_result_cache_keys_from_equivalent_image_bytes":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_keeps_multipart_upload_file_requests_off_the_result_cache_miss_path":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_records_Plate_Recognizer_processing_time_from_the_upstream_response":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_precomputed_Plate_Reader_config_strings_on_the_scanner_payload_hot_path":0.002,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_does_not_retain_raw_upstream_Plate_Recognizer_responses_in_compact_scanner_results":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_records_only_selected_curl_timing_fields_on_the_scanner_hot_path":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_a_streamed_file_hash_for_multipart_upload_file_result_cache_keys":0.001,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_derives_local_scanner_route_timing_by_subtracting_upstream_wait":0.024,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_disables_tcp_write_coalescing_on_scanner_Plate_Recognizer_requests_when_curl_supports_it":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_does_not_hash_multipart_upload_temp_files_for_result_cache_misses":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_builds_stable_result_cache_keys_from_equivalent_in_memory_image_bytes":0,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_reads_raw_scanner_client_timing_metadata_from_request_headers":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_does_not_hash_raw_scanner_body_bytes_on_the_live_camera_upload_path":0.001,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_reads_raw_scanner_client_timing_metadata_from_request_query_parameters":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_reuses_the_scanner_curl_disconnect_callback_across_recognizer_requests":0,"P\\Tests\\Unit\\Slack\\SlackInternalDepartmentIdsConfigTest::__pest_evaluable_it_normalizes_configured_Slack_internal_department_ids":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_queues_gateway_relay_batch_status_requests_through_the_manager":0.002,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_queues_gateway_relay_batch_switch_requests_through_the_manager":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayMachineSignalBrokerTest::__pest_evaluable_it_wires_self_serve_machine_signals_through_the_broker_control_plane":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayAgentLoopResponsivenessTest::__pest_evaluable_it_services_broker_transport_before_replaying_queued_outbox_items":0.002,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayAgentLoopResponsivenessTest::__pest_evaluable_it_bounds_stale_outbox_replay_so_it_cannot_monopolize_the_gateway_loop":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayAgentLoopResponsivenessTest::__pest_evaluable_it_uses_a_short_control_plane_timeout_for_self_serve_machine_signals_before_queueing":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_machine_wash_controls_into_self_serve_module_config":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_falls_back_to_edge_gateway_relay_bindings_for_lane_hardware_batches":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_applies_the_global_machine_wash_toggle_before_exposing_machine_tasks_or_services":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRelayExecutionTimerTest::__pest_evaluable_it_passes_direct_relay_switch_timers_through_the_LAN_worker_and_prefers_legacy_timers_for_Gen1_relays":0.112,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRelayExecutionTimerTest::__pest_evaluable_it_caps_batch_relay_switch_timers_and_sends_Gen3_relays_through_Shelly_RPC_first":0.143,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRelayExecutionTimerTest::__pest_evaluable_it_keeps_PHP_edge_agent_relay_fallback_propagation_aligned_with_LAN_worker_timer_handling":0}} \ No newline at end of file +{"version":"pest_3.8.6","defects":{"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_self_serve_machine_type__eligibility__summary__and_webhook_endpoints":7,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_defines_reusable_self_serve_wash_and_machine_type_schemas":7,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_redistributes_booked_department_75_net_amounts_using_fixed_pricing_and_wash_subscription_weights":7,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_keeps_classified_booked_department_75_amounts_undistributed_when_no_monthly_basis_exists":8,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_keeps_unclassified_booked_department_75_lines_undistributed_with_warnings":8,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_documents_v2_historical_distribution_and_pricing_history_paths_in_openapi":1,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_defines_new_reusable_v2_schemas_for_normalization_comparison_versioning_and_distribution":1,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_supports_bulk_booked_invoice_line_payloads_with_top_level_department_numbers":7,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_claims_a_slot_atomically_with_nx_and_expiration":8,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_returns_false_when_the_slot_is_already_claimed_and_clamps_ttl_to_one_second":8,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_documents_economic_v2_invoice_paths_in_openapi":1,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_aligns_legacy_compare_schema_with_runtime_payload_by_removing_stale_required_order__ids":1,"P\\Tests\\Unit\\Search\\SystemSearchEntityTypeCoverageTest::__pest_evaluable_it_documents_every_supported_search_entity_type_in_openapi_enum":1,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_system_wide_search_endpoints_in_openapi":1,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_debug__intent_and_parser_metadata_schema_in_openapi":1,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_e_conomic_indexed_customer_matching_and_synonym_behavior":1,"P\\Tests\\Integration\\Database\\DbConnectionTest::__pest_evaluable_it_can_connect_to_a_configured_MySQL_instance_in_integration_mode":1,"P\\Tests\\Integration\\Invoicing\\EconomicV2BackfillAndDistributionIntegrationTest::__pest_evaluable_it_runs_best_effort_backfill_repeatedly_without_introducing_duplicate_same_start_rows":1,"P\\Tests\\Integration\\Invoicing\\EconomicV2BackfillAndDistributionIntegrationTest::__pest_evaluable_it_resolves_version_aware_distribution_payload_shapes_over_a_real_date_range":1,"P\\Tests\\Integration\\Invoicing\\EconomicV2VersioningServiceIntegrationTest::__pest_evaluable_it_creates_closes_and_rotates_fixed_pricing_versions_without_overlap":1,"P\\Tests\\Integration\\Invoicing\\EconomicV2VersioningServiceIntegrationTest::__pest_evaluable_it_tracks_vehicle_and_discount_version_lifecycles_with_closure_semantics":1,"P\\Tests\\Integration\\Permissions\\LegacyPermissionRedisCacheScriptTest::__pest_evaluable_it_keeps_legacy_route_permission_redis_cache_script_green":1,"P\\Tests\\Unit\\Goals\\GoalsOpenApiSpecTest::__pest_evaluable_it_documents_advanced_goals_target_duration_fields_in_openapi":1,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineSchemaConformanceTest::__pest_evaluable_it_documents_the_date_key_in_the_openapi_department_weather_timeline_schema":1,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_builds_timeline_entries_with_mostly__clear_weather_when_forecast_payload_is_empty":8,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_wires_departments_weather_route_through_the_forecast_fallback_path":7,"P\\Tests\\Unit\\Orders\\AttachmentsListManyTest::__pest_evaluable_it_groups_attachments_by_object_id_and_preserves_empty_object_groups":8,"P\\Tests\\Unit\\Orders\\AttachmentsListManyTest::__pest_evaluable_it_keeps_listMany_payload_parity_with_list_for_one_object_id":8,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsOpenApiSpecTest::__pest_evaluable_it_documents_department_weather_target_endpoints_and_reusable_schemas_in_openapi":1,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsOpenApiSpecTest::__pest_evaluable_it_documents_unknown_weather_status_behavior_when_targets_are_missing":1,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_respects_the_1_request_per_second_Shelly_gate_for_back_to_back_requests":8,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_in_progress_self_serve_wash_start_and_machine_relay_fields":1,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_stores_config_json_with_apostrophes_without_violating_json_constraints":8,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_program_selector_is_on__then_turns_off_cleaner_machine_and_selector_relays":7,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_skips_vehicle_type_product_add_when_program_selector_is_off_and_only_disables_configured_relays":7,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_self_serve_machine_wash_included_minutes_in_config_schemas":1,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_workspace_id_is_missing_for_gate_calls":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_channel_id_is_missing_for_gate_calls":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_with_terminal_status_details_when_call_never_reaches_accepted_state":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_hangs_up_when_call_reaches_accepted_state":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_hangs_up_immediately_when_status_transitions_to_accepted":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_maps_legacy_timeout_option_to_documented_ringTimeout_payload_field":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_clamps_derived_ringTimeout_to_Bird_documented_max_when_gate_timeout_is_high":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_passes_documented_hangup_cause_when_provided":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_drops_unsupported_hangup_cause_values_from_request_payload":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_workspace_id_is_missing_for_gate_flash_calls":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_creates_gate_flash_call_with_documented_ringTimeout_payload":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_polls_flash_call_and_succeeds_once_accepted":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_flash_gate_flow_when_terminal_failure_status_is_returned":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_does_not_fallback_to_regular_gate_call_when_flash_succeeds":8,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_falls_back_to_regular_gate_call_when_flash_fails":8,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_property_gate_lane_commands_and_sanitized_gate_failure_responses":1,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_returns_raw_payload_for_malformed_JSON_responses_and_null_for_empty_responses":8,"P\\Tests\\Unit\\Bird\\BirdRouteWiringTest::__pest_evaluable_it_keeps_Bird_number_and_webhook_routes_intact":7,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_handles_malformed_and_empty_response_bodies_without_throwing_transport_errors":8,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_aggregates_multi_department_slot_statuses_using_worst_severity_and_unknown_fallback_rules":7,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_program_selector_relay_is_online__then_turns_off_cleaner_and_machine_relays":7,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_bills_primary_product_when_selector_relay_is_online_even_if_relay_output_is_off":7,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_documents_all_Bird_voice_call_parity_endpoints_including_gather_recordings_insights_and_log":1,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_documents_flash_hangup_endpoint_and_marks_end_alias_as_deprecated":1,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_defines_request_and_response_schemas_for_Bird_call_command_recording_insight_log_and_flash_payloads":1,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueRouteRegistrationTest::__pest_evaluable_it_registers_collected_invoice_queue_endpoints_in_orderInvoicesRoute":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_uses_a_consistent_unavailable_service_contract_for_missing_queue_dependencies":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_wires_zero_cost_and_zero_quantity_skip_guard_into_transfer_line_builder":7,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_processes_queued_transfer_jobs_to_completion":1,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_deduplicates_active_jobs_per_transfer_target":1,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_rejects_invalid_payloads_without_inserting_queue_rows":1,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_supports_fail_retry_and_reprocess_lifecycle_transitions":1,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_supports_synchronous_fallback_branches_before_queue_enqueue_on_economic_invoice_export_routes":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_keeps_queue_status_endpoints_guarded_while_collected_invoice_export_routes_support_synchronous_fallback":7,"P\\Tests\\Unit\\Invoicing\\UserCollectedInvoiceUpdateRouteValidationTest::__pest_evaluable_it_supports_independent_po__number_and_closed__at_updates_for_PUT__collected_invoices_in_user_route":7,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_returns_pagination_metadata_and_strict_status_handling_for_collected_invoice_queue_list":7,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_enforces_retry_constraints_for_collected_invoice_queue_jobs_before_retry_execution":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_collected_queue_list_metadata_and_strict_status_filter_enum_in_openapi":7,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_builds_a_completed_collected_invoice_queue_summary_from_payload_and_result":8,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_prefers_queue_error_messages_for_failed_jobs_and_keeps_null_safe_outcome_fields":8,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_uses_deterministic_status_message_fallback_when_no_explicit_message_exists":8,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_handles_object_payload_result_values_and_malformed_fields_without_throwing":8,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_ticks_collected_invoice_transfer_queue_from_queue_list_and_status_routes":7,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_ticks_order_transfer_queue_from_draft_and_invoice_status_routes":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_builds_the_installer_around_the_PHP_agent_artifacts_and_management_polling_config":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_exposes_update_payload__credential_rotation__and_operation_endpoints_without_shell_transport_wiring":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_relay_fallback_and_transport_health_details_without_shell_or_update_runtime_state":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_resolves_edge_agent_artifacts_from_the_source_tree_layout":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_mounted_and_baked_in_artifact_directories_before_repo_fallbacks":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_router_resources_before_mounted_and_baked_in_artifact_directories":7,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_lists_orders_for_an_admin_scoped_user_and_limits_the_results_to_the_permitted_departments":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_lists_only_the_targeted_customer_orders_for_subuser_sessions":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_returns_the_current_auth_and_permission_failures_when_order_listing_is_not_allowed":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_creates_orders_through_the_real_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_order_creation_requests":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_updates_orders_through_the_primary_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_reassigns_invoice_collections_when_changing_an_order_across_the_draft_customer_boundary":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_supports_legacy_field_value_metadata_updates_through_the_primary_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_updates_through_the_primary_order_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_updates_orders_through_the_legacy_alias_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_supports_legacy_field_value_metadata_updates_through_the_alias_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_updates_through_the_legacy_alias_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_unsupported_legacy_field_value_updates_on_both_update_endpoints":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_deletes_orders_through_the_real_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_order_delete_requests":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_regenerates_attached_wash_certificates_when_certificate_metadata_changes_through_the_primary_endpoint":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_regenerates_attached_wash_certificates_for_legacy_field_value_updates_through_the_alias_endpoint":8,"P\\Tests\\Api\\ApiCoverageManifestTest::__pest_evaluable_it_keeps_every_selected_API_operation_covered_by_happy_path_and_failure_tests":8,"P\\Tests\\Api\\ApiCoverageManifestTest::__pest_evaluable_it_keeps_the_OpenAPI_manifest_entries_aligned_with_the_API_spec":8,"P\\Tests\\Api\\ApiFixturesCleanupTest::__pest_evaluable_it_removes_generated_customer_traces_during_fixture_cleanup":8,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_in_with_valid_customer_credentials":1,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_login_payloads_and_credentials":1,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_returns_the_cached_auth_session_payload_for_a_valid_token":1,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_includes_economic_runtime_config_for_uncached_auth_sessions":1,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_auth_session_tokens":1,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_out_and_invalidates_the_token_for_future_session_calls":1,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_out_and_invalidates_cached_subuser_sessions":1,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_logout_tokens":1,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_the_raw_202_gather_webhook_contract_over_HTTP":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_still_prompts_for_department_selection_when_only_one_department_is_eligible":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_accepts_the_legacy_initial_webhook_body_with_top_level_call_identifiers":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_native_flow_gather_data_after_a_top_level_department_selection_when_distinct_gate_choices_exist":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_opens_the_gate_immediately_after_a_top_level_department_selection_when_entrance_and_exit_share_the_same_gate":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_uses_a_multi_digit_gather_contract_when_10_departments_are_eligible":8,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_a_raw_400_transport_error_for_malformed_webhook_payloads":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_lists_only_visible_departments_and_can_return_a_single_department_with_the_slack_webhook":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_department_listing_when_the_permission_is_missing":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_creates_departments_through_the_real_endpoint":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_create_requests":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_updates_departments_through_the_real_endpoint":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_update_requests":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_lists_department_categories_for_a_department":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_category_requests":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_lists_the_draft_customer_config_entry_in_economic_config_responses":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_round_trips_the_draft_customer_config_value_through_economic_config_updates":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_order_draft_exports_for_the_configured_draft_customer":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_booked_invoice_exports_for_the_configured_draft_customer":8,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_collected_invoice_exports_for_the_configured_draft_customer":8,"P\\Tests\\Api\\PingApiTest::__pest_evaluable_it_returns_the_ping_contract":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_setup_required_error_when_department_terminal_readers_are_requested_without_terminal_setup":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_sends_a_Stripe_invoice_by_email_and_persists_the_hosted_invoice_association":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_conflict_when_a_Stripe_hosted_invoice_is_already_active_for_the_order":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_allows_sending_a_new_Stripe_hosted_invoice_when_the_existing_association_is_already_terminal":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_voids_an_unpaid_Stripe_hosted_invoice_and_clears_the_local_order_association":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_refuses_to_cancel_a_paid_Stripe_hosted_invoice":8,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_setup_required_error_when_creating_a_payment_intent_for_a_department_without_terminal_setup":8,"P\\Tests\\Api\\VehiclesApiTest::__pest_evaluable_it_returns_the_newest_vehicle_last__order__id_that_still_has_order_items":8,"P\\Tests\\Api\\VehiclesApiTest::__pest_evaluable_it_returns_a_null_vehicle_last__order__id_when_no_order_with_items_exists":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_syncs_gateway_snapshots_into_cached_list_payloads_and_refreshes_fleet_usage":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_keeps_only_the_module_facade_in_the_global_classes_directory_and_conditionally_loads_module_routes":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_install_script_urls_with_the_compose_edge_gateway_artifacts_and_forwarded_https_scheme":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_builds_the_installer_around_the_compose_stack_artifacts_and_management_polling_config":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_exposes_update_payload__credential_rotation__cancel_endpoints__and_operation_endpoints_without_shell_transport_wiring":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_the_v2_operator_facing_edge_gateway_routes":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewaySchemaBootstrapTest::__pest_evaluable_it_defines_the_v2_edge_gateway_schema_bootstrap_tables":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewaySchemaBootstrapTest::__pest_evaluable_it_stores_operation_metadata_and_event_timelines_for_management_workflows":7,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_prefers_EDGE__PUBLIC__API__URL_when_explicitly_configured":8,"P\\Tests\\Api\\PlateScannersApiTest::__pest_evaluable_it_returns_the_updated_lane_id_after_editing_a_scanner_whose_null_lane_was_already_cached":8,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_serves_installer_artifacts_and_recovers_gateway_runtime_status_after_fresh_heartbeats":1,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_polls_operations_and_commands__submits_results__and_records_broker_presence_for_task_pages":1,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_builds_broker_backlog_and_completes_gateway_operations_through_broker_endpoints":8,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_creates_install_tokens__tracks_installer_status__and_exposes_claimed_gateway_detail_to_authorized_operators":8,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_manages_edge_gateway_metadata__bindings__operations__sessions__rotation__cutover__and_deletion":8,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_assembles_tasks__logs__statistics__operations__commands__and_shell_lifecycle_state_from_persisted_records":1,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_rejects_invalid_edge_broker_shared_secrets":8,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_rejects_operator_edge_routes_when_module_permission_or_department_access_is_missing":8,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_rejects_missing_and_invalid_edge_agent_tokens":1,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_persists_gateway_cutover_relay_bindings_used_by_self_serve_Shelly_dispatch":1,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_validates_broker_sessions_and_ingests_presence__telemetry__logs__and_shell_lifecycle_data":8,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_rejects_shell_session_creation_while_broker_presence_is_unavailable":8,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_ignores_and_soft_deletes_edge_gateways_whose_department_no_longer_exists":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_appends_forwarded_ports_when_the_forwarded_host_omits_them":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_websocket_broker_urls_on_the_traefik_broker_path":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_localhost_websocket_broker_urls_on_the_local_traefik_api_prefix":8,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_keeps_root_host_api_urls_unprefixed_when_the_request_is_not_under_the_local_api_alias":8,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_resolves_simulator_gateway_service_bindings_from_lane_relay_slots":7,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_overtime_minutes_when_a_saved_shift_end_extends_past_the_approved_original_end":7,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_unapproved_overtime_from_a_bounded_shift_updateTime_fallback":7,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_caps_current_slot_hours_to_elapsed_minutes_and_zeroes_future_slots":7,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_round_trips_the_default_distribution_department_config_value_through_economic_config_updates":8,"P\\Tests\\Unit\\Replication\\ReplicationSecretBoxTest::__pest_evaluable_it_encrypts_replication_secrets_without_storing_plaintext":8,"P\\Tests\\Unit\\Replication\\ReplicationSecretBoxTest::__pest_evaluable_it_builds_active_database_and_redis_config_from_encrypted_bootstrap_snapshots":8,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_does_not_require_replica_SQL_threads_before_database_provisioning_configures_them":7,"P\\Tests\\Unit\\Invoicing\\EconomicDraftCustomerOpenApiSpecTest::__pest_evaluable_it_documents_transaction_draft_customer_config_and_auth_runtime_fields_in_all_tracked_openapi_copies":1,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_MinIO_free_space_and_catch_up_math_safely":7,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_counts_complaint_rows_by_department_and_created__at_reporting_range":1,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_updates_and_deletes_complaint_rows":1,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_parses_created__by__name_from_the_users_table":1,"P\\Tests\\Integration\\DailyReports\\DepartmentOutsideHoursStatisticsServiceIntegrationTest::__pest_evaluable_it_integrates_orders__xlvask__and_self_serve_into_one_outside_hours_summary_with_missing_hours_diagnostics":1,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_persists_install_session_updates_and_derives_gateway_runtime_status_from_heartbeats":1,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_processes_only_collected_invoice_jobs_and_respects_the_manual_batch_limit":1,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_the_configured_database_in_integration_mode":1,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_redis_in_integration_mode_when_configured":1,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_minio_in_integration_mode_when_configured":1,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_Coolify_service_payloads_from_raw_compose_without_a_service_type":7,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_selected_Coolify_project_and_resolves_server_UUID_from_the_instance_default":8,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_Coolify_GitHub_App_application_payloads_so_pulls_use_the_app_token":7,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_self_contained_Coolify_API_Dockerfile_for_API_applications":7,"P\\Tests\\Unit\\Tooling\\ComposerEntrypointTest::__pest_evaluable_it_checks_PSR_HTTP_message_interfaces_before_trusting_a_Composer_vendor_tree":1,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_defines_release_manager_schema__routes__permissions__and_system_status_integration_hooks":7,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_requires_non_default_release_channel_runtime_URLs_and_preserves_load_balancer_paths":7,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_wires_MinIO_replication_through_routes_and_bootstrap_snapshots":7,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_defines_Coolify_schema__route_permissions__and_replication_integration_hooks":7,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_chooses_a_requested_runtime_channel_only_when_it_is_available_to_the_principal":8,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_rejects_standalone_order_booking_completion_outside_POS":8,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_allows_linked_POS_order_booking_completion_for_mobile_POS_compatibility":8,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_accepts_numeric_safety_seal_strings_when_completing_a_linked_POS_order_booking":8,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_disables_the_legacy_complete_wash_without_certificate_route":8,"P\\Tests\\Api\\OrderBookingsUpdateApiTest::__pest_evaluable_it_detaches_an_order_booking_and_clears_the_matching_order_link":8,"P\\Tests\\Api\\OrderBookingsUpdateApiTest::__pest_evaluable_it_keeps_the_linked_order_when_order__id_is_omitted_from_an_order_booking_update":8,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_allows_explicit_runtime_selection_of_any_enabled_release_channel":7,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_authentication_before_checking_in_progress_wash_permissions":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_reports_both_elevated_and_customer_self_serve_permissions_when_lane_polling_is_not_allowed":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_allows_customer_self_serve_permission_to_view_their_own_in_progress_wash_details":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_redacts_another_customers_in_progress_wash_from_customer_self_serve_lane_polling":8,"P\\Tests\\Api\\SelfserveFixtureApiTest::__pest_evaluable_it_creates_a_comprehensive_self_serve_API_scenario_with_demo_relays":1,"P\\Tests\\Api\\SelfserveZZZShellyGuardApiTest::__pest_evaluable_it_did_not_record_any_real_Shelly_request_attempts_during_self_serve_API_tests":8,"P\\Tests\\Api\\ApiFixturesCleanupTest::__pest_evaluable_it_restores_preserved_module_config_rows_during_fixture_cleanup":8,"P\\Tests\\Api\\BrandingApiTest::__pest_evaluable_it_creates_lists_and_updates_complete_branding_values":8,"P\\Tests\\Api\\BrandingApiTest::__pest_evaluable_it_rejects_branding_requests_without_permissions_or_valid_input":8,"P\\Tests\\Api\\BrandingApiTest::__pest_evaluable_it_assigns_and_clears_department_branding_for_superusers":8,"P\\Tests\\Api\\BrandingApiTest::__pest_evaluable_it_rejects_invalid_department_branding_assignments":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_previews_monthly_split_changes_without_moving_orders_or_creating_collections":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_splits_a_selected_March_and_April_collected_invoice_into_monthly_collections":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_sets_closed__at_to_month_end_when_split_month_has_ended":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_splits_the_whole_affected_collection_even_when_only_one_month_is_selected":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_does_not_affect_booked_collected_invoices":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_skips_draft_linked__Stripe__and_single_month_collections":8,"P\\Tests\\Api\\CollectedInvoiceMonthlySplitApiTest::__pest_evaluable_it_rejects_invalid_monthly_split_date_ranges":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_allows_superusers_to_filter_archived_departments":8,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_does_not_allow_regular_department_listings_to_reveal_archived_departments_through_filters":8,"P\\Tests\\Api\\EdgeGatewayConfigApiTest::__pest_evaluable_it_stores_broker_settings_in_edge_gateway_module_config_and_uses_them_for_shell_sessions":8,"P\\Tests\\Api\\EdgeGatewayConfigApiTest::__pest_evaluable_it_returns_broker_diagnostics_for_the_current_edge_gateway_module_config_values":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_defaults_order_PO_from_a_linked_booking_when_creating_without_an_order_PO":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_keeps_an_explicit_order_PO_when_creating_a_linked_order":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_defaults_blank_order_PO_from_a_linked_booking_on_order_updates":8,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_requires_explicit_confirmation_before_deleting_protected_orders":8,"P\\Tests\\Api\\PlateScannersApiTest::__pest_evaluable_it_rejects_plate_scanner_edits_when_the_permission_is_missing":8,"P\\Tests\\Api\\ReferenceSuggestionsApiTest::__pest_evaluable_it_returns_ranked_POS_reference_suggestions_from_bookings__orders__and_customer_vehicles":8,"P\\Tests\\Api\\ReferenceSuggestionsApiTest::__pest_evaluable_it_orders_reference_suggestions_by_match_relevance_before_context_and_frequency":8,"P\\Tests\\Api\\ReferenceSuggestionsApiTest::__pest_evaluable_it_enforces_authentication__list_permission__and_department_access_for_reference_suggestions":8,"P\\Tests\\Api\\SelfserveFixtureApiTest::__pest_evaluable_it_creates_self_serve_invoice_orders_for_the_lane_customer_with_draft_customer_and_driver_metadata_attached":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_allows_customer_self_serve_permission_to_execute_START_without_department_access_when_department_and_lane_are_enabled":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_customer_START_when_department_self_serve_is_disabled":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_customer_START_when_lane_self_serve_is_disabled":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_a_customer_STOP_for_another_customers_active_lane":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_still_allows_elevated_operators_with_department_access_to_execute_lane_commands":8,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_keeps_operator_only_commands_elevated_only_for_customers_and_reports_command_permissions":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_authentication_before_checking_the_current_customers_active_self_serve_wash":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_customer_self_serve_permission_before_checking_my_active_wash":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_returns_the_authenticated_customers_active_self_serve_wash_without_requiring_a_lane_id":8,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_returns_404_when_the_authenticated_customer_has_no_active_self_serve_wash":8,"P\\Tests\\Unit\\Selfserve\\SelfserveEligibilityLaneAccessTest::__pest_evaluable_it_authorizes_customer_eligibility_preview_lanes_before_returning_task_attachments":8,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_allows_the_customer_self_serve_start_sequence_without_department_access":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_derives_allowed_services_from_v2_session_task_snapshots_when_task_rows_are_not_legacy_records":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_keeps_long_generated_task_descriptions_when_refreshing_vehicle_eligibility_snapshots":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_marks_the_active_customer_session_relay_enabled_after_machine_relay_enable":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_does_not_create_an_active_wash_preview_session_from_read_only_eligibility_checks":1,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_the_all_in_one_self_serve_studio_replacement_API":7,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_derives_allowed_services_from_published_v2_config_task_snapshots_when_no_session_exists_yet":1,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_persists_superuser_new_customer_notification_preferences_and_includes_them_in_session_payloads":1,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_requires_superuser_permission_before_saving_superuser_new_customer_notification_preferences":1,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_sends_new_customer_registration_notifications_only_to_opted_in_superusers":1,"P\\Tests\\Unit\\Bird\\DepartmentGatesPhoneCallOpenTest::__pest_evaluable_it_forwards_phone_number_and_call_duration_threshold_to_the_Bird_gate_helper":8,"P\\Tests\\Unit\\Bird\\DepartmentGatesPhoneCallOpenTest::__pest_evaluable_it_wraps_Bird_helper_failures_and_reports_them_to_Slack":8,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_invalidates_cached_session_payloads_after_notification_preferences_change":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_creates_a_durable_wash_session_from_customer_start_after_read_only_eligibility":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_refreshes_an_active_wash_summary_with_vehicle_type_without_a_namespace_error":1,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_does_not_create_a_replacement_session_when_refreshing_a_completed_summary_with_vehicle_type":1,"P\\Tests\\Api\\CollectedInvoiceMoveCustomerApiTest::__pest_evaluable_it_moves_a_collected_invoice_collection_and_all_attached_orders_to_another_customer":1,"P\\Tests\\Api\\CollectedInvoiceMoveCustomerApiTest::__pest_evaluable_it_rejects_moving_a_collection_that_already_has_an_external_invoice_reference":1,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_turns_off_the_program_picker_on_deferred_start_when_the_frontend_selected_manual_wash":7,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_does_not_let_backend_machine_eligibility_override_a_frontend_manual_wash_selection":7,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_normal_STOP_completion_skips_duplicate_completion_relay_cleanup_after_STOP_already_disabled_relays":7,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_does_not_store_scanner_images_before_LPR_recognition":7,"P\\Tests\\Api\\ModuleScannerLprApiTest::__pest_evaluable_it_accepts_multipart_scanner_images_and_forwards_them_to_Plate_Recognizer_as_a_temp_file_upload":1,"P\\Tests\\Api\\ModuleScannerLprApiTest::__pest_evaluable_it_rejects_scanner_LPR_requests_without_an_image_before_contacting_Plate_Recognizer":1,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_a_streamed_file_hash_for_multipart_upload_file_result_cache_keys":7,"P\\Tests\\Api\\EdgeGatewayExpectedRelayStatesApiTest::__pest_evaluable_it_serves_whole_department_expected_relay_states_and_records_successful_physical_completion_only":1,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_lists_subusers_when_an_existing_grant_has_legacy_zero_permissions":1,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_enforces_the_password_policy_for_setup_without_rejecting_legacy_valid_passwords_at_login":1,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_returns_a_generic_error_for_invalid_subuser_credentials":1,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_requires_subuser_management_access_before_exposing_permission_nodes":1,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_rejects_customer_subuser_listing_without_own_scope_permission":1,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_replaces_older_setup_tokens_when_a_new_setup_token_is_generated":1,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_validates_setup_identifiers_before_setting_the_driver_password":1,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_lists_chauffeur_grants_across_customers_for_superusers":1,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_lets_superusers_invite_chauffeurs_for_a_selected_customer":1,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_scopes_passkey_challenges_to_the_requested_principal_type":1},"times":{"P\\Tests\\Unit\\Auth\\CreateTokenTest::__pest_evaluable_it_creates_a_64_char_auth_token_for_an_existing_user":0.11,"P\\Tests\\Unit\\Auth\\CreateTokenTest::__pest_evaluable_it_throws_a_clear_exception_when_customer_user_is_missing":0.017,"P\\Tests\\Unit\\Auth\\LegacyAuthScriptParityTest::__pest_evaluable_it_keeps_passkey_challenge_legacy_script_green_during_migration":0.017,"P\\Tests\\Unit\\Auth\\LegacyAuthScriptParityTest::__pest_evaluable_it_keeps_register_CVR_legacy_script_green_during_migration":0.018,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_deterministic_department_digit_map_and_caps_to_9_options":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_resolves_department_ids_by_selected_digit":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_resolves_gate_type_digit_to_entrance_or_exit":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_stores__loads_and_clears_ivr_state_with_ttl":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_validates_state_caller_fingerprint_matching":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_department_and_gate_prompts":0,"P\\Tests\\Unit\\Permissions\\PermissionNodeDefinitionTest::__pest_evaluable_it_creates_permission_nodes_linked_to_subuser_permission_keys":0,"P\\Tests\\Unit\\Permissions\\PermissionNodeDefinitionTest::__pest_evaluable_it_rejects_empty_permission_definitions":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_normalizes_button_arrays__json_and_csv_inputs":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_rejects_invalid_button_inputs":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_normalizes_vehicle_type_values_and_null_semantics":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_rejects_invalid_vehicle_type_values":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_rejects_non_numeric_vehicle_type_strings":0,"P\\Tests\\Unit\\Selfserve\\NormalizationTest::__pest_evaluable_it_keeps_lane_service_enum_contract_for_MACHINE":0,"P\\Tests\\Unit\\Subusers\\SubuserGrantInitializationTest::__pest_evaluable_it_initializes_booking_node_grants_without_DB_dependency":0,"P\\Tests\\Unit\\Subusers\\SubuserGrantInitializationTest::__pest_evaluable_it_initializes_selfserve_node_grants_without_DB_dependency":0,"P\\Tests\\Unit\\Subusers\\SubusersRoutePermissionLinkTest::__pest_evaluable_it_keeps_subusers_route_list_permission_linked_to_SUBUSERS__LIST_node":0,"P\\Tests\\Unit\\Search\\SystemSearchEntityTypeCoverageTest::__pest_evaluable_it_keeps_route_and_service_entity_type_registries_in_sync_with_expanded_coverage":0.001,"P\\Tests\\Unit\\Search\\SystemSearchEntityTypeCoverageTest::__pest_evaluable_it_documents_every_supported_search_entity_type_in_openapi_enum":0.006,"P\\Tests\\Unit\\Search\\SystemSearchEconomicCustomerIndexWiringTest::__pest_evaluable_it_wires_local_e_conomic_customer_index_into_customer_related_search_entities":0.001,"P\\Tests\\Unit\\Search\\SystemSearchEconomicCustomerIndexWiringTest::__pest_evaluable_it_registers_cron_tasks_that_keep_the_e_conomic_search_index_refreshed":0,"P\\Tests\\Unit\\Search\\SystemSearchInvalidationHooksTest::__pest_evaluable_it_marks_system_search_cache_dirty_from_generic_db_object_mutation_flows":0.001,"P\\Tests\\Unit\\Search\\SystemSearchInvalidationHooksTest::__pest_evaluable_it_marks_system_search_cache_dirty_from_object_property_mutations":0,"P\\Tests\\Unit\\Search\\SystemSearchInvalidationHooksTest::__pest_evaluable_it_marks_system_search_cache_dirty_when_module_config_values_change":0,"P\\Tests\\Unit\\Search\\SystemSearchInvalidationHooksTest::__pest_evaluable_it_registers_cron_maintenance_task_for_system_search_cache":0.001,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_redacts_obvious_sensitive_fragments_before_sending_query_to_intent_parser":0.001,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_builds_payload_with_redacted_query_and_parses_strict_JSON_output":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_falls_back_safely_when_OpenAI_is_disabled":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_handles_malformed_OpenAI_response_payloads_without_throwing":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_uses_parser_cache_for_identical_query_and_allowed_type_combinations":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenAiIntentParserTest::__pest_evaluable_it_caps_alias_and_hint_payloads_from_OpenAI_and_filters_hints_to_allowed_types":0,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_system_wide_search_endpoints_in_openapi":0.001,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_debug__intent_and_parser_metadata_schema_in_openapi":0.001,"P\\Tests\\Unit\\Search\\SystemSearchOpenApiSpecTest::__pest_evaluable_it_documents_e_conomic_indexed_customer_matching_and_synonym_behavior":0,"P\\Tests\\Unit\\Search\\SystemSearchRouteBehaviorTest::__pest_evaluable_it_normalizes_type_lists_from_csv_json_and_arrays":0.001,"P\\Tests\\Unit\\Search\\SystemSearchRouteBehaviorTest::__pest_evaluable_it_parses_booleans_and_clamps_integers_using_route_defaults":0.001,"P\\Tests\\Unit\\Search\\SystemSearchRouteBehaviorTest::__pest_evaluable_it_exposes_expected_searchable_entity_types":0,"P\\Tests\\Unit\\Search\\SystemSearchRouteWiringTest::__pest_evaluable_it_registers_system_wide_search_GET_and_POST_endpoints_with_intent_debug_support":0.001,"P\\Tests\\Unit\\Search\\SystemSearchRouteWiringTest::__pest_evaluable_it_registers_superuser_cache_clear_and_rebuild_endpoints_for_system_search":0,"P\\Tests\\Unit\\Search\\SystemSearchRouteWiringTest::__pest_evaluable_it_passes_permission_and_own_scope_context_into_system_search_service":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_does_not_invoke_intent_parser_when_lexical_confidence_is_already_high":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_invokes_parser_on_low_confidence_lexical_results_and_applies_hints_only_boosts":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_never_lets_parser_entity_hints_override_explicit_include_filters":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_returns_fallback_parser_metadata_when_parser_fails_gracefully":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_scopes_query_cache_by_permission_context_to_avoid_cross_user_cache_leakage":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_caps_AI_driven_expanded_terms_to_prevent_query_amplification":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_expands_danish_discount_wording_into_lexical_discount_synonyms":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_invokes_parser_for_intent_driven_natural_language_queries_even_when_lexical_score_is_high":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_uses_association_hints_to_pull_related_customer_records_from_non_customer_matches":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_prefers_newer_records_when_relevance_scores_are_comparable":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_keeps_explicit_identifier_matches_ahead_of_newer_but_weaker_records":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_promotes_invoices_orders_order_bookings_and_customers_in_ranking":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_never_prioritizes_cancelled_bookings_over_active_bookings":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_heavily_demotes_configured_low_priority_entity_types_in_ranking":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_tokenizes_unicode_names_without_stripping_non_ascii_letters":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_does_not_treat_explicit_identifier_queries_as_intent_driven":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_requires_broader_term_coverage_for_multi_word_scoring":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_enriches_object_attachment_results_with_associated_customer_context":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_includes_the_economic_customer_index_in_cache_dependencies_for_customer_scoped_results":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_falls_back_to_invoice_date_ranges_when_invoice_names_are_missing":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_derives_xlvask_customer_numbers_only_from_digits_only_extern_ids":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_replaces_unnamed_user_titles_with_the_customer_context_name":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_uses_the_goal_criteria_label_for_department_goal_titles":0,"P\\Tests\\Integration\\Search\\SystemSearchCacheIntegrationTest::__pest_evaluable_it_reuses_parser_cache_entries_for_repeated_natural_language_intent_requests":0.129,"P\\Tests\\Integration\\Search\\SystemSearchCacheIntegrationTest::__pest_evaluable_it_clears_parser_cache_namespace_via_clearAll_to_force_a_fresh_parse":0,"P\\Tests\\Integration\\Search\\SystemSearchCacheIntegrationTest::__pest_evaluable_it_bumps_per_table_cache_versions_when_a_dirty_table_marker_is_registered":0.05,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_falls_back_to_system_orders_for_fixed_pricing_when_regular_orders_yield_no_customers":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_falls_back_to_system_orders_for_wash_subscriptions_when_regular_orders_yield_no_customers":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CliBackfillCommandTest::__pest_evaluable_it_registers_economic_v2_backfill_command_in_cli_dispatcher":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2CliBackfillCommandTest::__pest_evaluable_it_provides_a_backfill_cron_script_entrypoint":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_returns_exact__match_when_totals_lines_and_departments_are_identical":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_returns_total__mismatch_when_only_totals_differ":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_detects_line_level_mismatches_for_quantity_and_price":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_detects_departmental_distribution_mismatches":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2CompareEngineTest::__pest_evaluable_it_returns_missing__target_when_draft_or_booked_target_is_unavailable":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2LineNormalizerTest::__pest_evaluable_it_normalizes_draft_invoice_lines_including_departmental_distributions":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2LineNormalizerTest::__pest_evaluable_it_marks_text_only_zero_value_lines_as_non_billable_and_keeps_deterministic_key":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2LineNormalizerTest::__pest_evaluable_it_normalizes_booked_invoices_and_computes_net_total_delta_from_lines":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2LineNormalizerTest::__pest_evaluable_it_contains_internal_normalization_path_with_departmental_metadata_support":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_documents_economic_v2_invoice_paths_in_openapi":0.003,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_documents_v2_historical_distribution_and_pricing_history_paths_in_openapi":0.002,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_aligns_legacy_compare_schema_with_runtime_payload_by_removing_stale_required_order__ids":0.003,"P\\Tests\\Unit\\Invoicing\\EconomicV2OpenApiSpecTest::__pest_evaluable_it_defines_new_reusable_v2_schemas_for_normalization_comparison_versioning_and_distribution":0.003,"P\\Tests\\Unit\\Invoicing\\EconomicV2RevenueAndBarredSupportTest::__pest_evaluable_it_supports_barred_filtering_when_listing_e_conomic_customers":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RevenueAndBarredSupportTest::__pest_evaluable_it_implements_a_dedicated_v2_e_conomic_revenue_statistics_service_and_route":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_registers_all_collected_invoice_economic_v2_routes_with_explicit_permissions":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_registers_version_aware_distribution_and_pricing_history_v2_routes":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_caches_v2_distribution_responses_with_a_configurable_redis_ttl":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_writes_fixed_pricing_versions_from_create_and_delete_flows":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_writes_vehicle_subscription_versions_for_create_update_delete_flows":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_writes_discount_override_versions_from_superuser_discounts_route":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_keeps_legacy_compare_endpoint_path_for_backward_compatibility":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2VersioningServiceStructureTest::__pest_evaluable_it_implements_effective_range_lifecycle_methods_for_all_versioned_entities":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2VersioningServiceStructureTest::__pest_evaluable_it_closes_previous_active_interval_before_inserting_a_new_version":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2VersioningServiceStructureTest::__pest_evaluable_it_includes_best_effort_backfill_with_provenance_and_confidence_metadata":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2VersioningServiceStructureTest::__pest_evaluable_it_anchors_historical_resolution_on_order_created__at_timestamps_in_distribution_service":0,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_guards_against_empty_order_ids_in_net_amount_calculation":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_guards_against_empty_customer_arrays_in_date_range_transaction_fetches":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_uses_centralized_duplicate_filtering_for_possible_duplicate_detection":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteCacheHelpersTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_clamps_negative_ttl_to_zero":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteCacheHelpersTest::__pest_evaluable_it_builds_deterministic_cache_keys_per_scope_and_date_range":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteCacheHelpersTest::__pest_evaluable_it_falls_back_to_resolver_directly_when_cache_ttl_is_disabled":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_requires_superuser_permission_for_invoicing_period_distribution_all_endpoint":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_uses_shared_date_range_normalization_across_invoicing_period_endpoints":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodUtilsTest::__pest_evaluable_it_normalizes_a_valid_invoicing_date_range_to_full_day_timestamps":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodUtilsTest::__pest_evaluable_it_rejects_invalid_date_formats":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodUtilsTest::__pest_evaluable_it_rejects_descending_date_ranges":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodUtilsTest::__pest_evaluable_it_finds_duplicate_orders_regardless_of_original_input_order":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_runs_best_effort_backfill_when_fixed_pricing_version_history_is_empty":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_self_serve_conditions_with_combined_AND_and_OR_semantics":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_prefers_condition_results_over_question_answers_when_evaluating_task_gates":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_self_serve_machine_type__eligibility__summary__and_webhook_endpoints":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_defines_reusable_self_serve_wash_and_machine_type_schemas":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_machine_types__eligibility__summaries__and_machine_start_webhook_routes":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_keeps_machine_type_support_wired_into_lanes__tasks__and_conditions_routes":0.001,"P\\Tests\\Unit\\N8n\\N8nRouteHelpersTest::__pest_evaluable_it_normalizes_webhook_methods_and_falls_back_to_POST_for_unsupported_verbs":0.001,"P\\Tests\\Unit\\N8n\\N8nRouteHelpersTest::__pest_evaluable_it_filters_request_parameters_down_to_the_allowed_n8n_query_keys":0,"P\\Tests\\Unit\\N8n\\N8nRouteWiringTest::__pest_evaluable_it_registers_workflow_lifecycle_endpoints_for_the_n8n_module":0.001,"P\\Tests\\Unit\\N8n\\N8nRouteWiringTest::__pest_evaluable_it_registers_execution_and_webhook_trigger_endpoints_for_the_n8n_module":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_redistributes_booked_department_75_net_amounts_using_fixed_pricing_and_wash_subscription_weights":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_keeps_classified_booked_department_75_amounts_undistributed_when_no_monthly_basis_exists":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_keeps_unclassified_booked_department_75_lines_undistributed_with_warnings":0,"P\\Tests\\Unit\\Invoicing\\EconomicEndpointUrlEncodingTest::__pest_evaluable_it_encodes_raw_filter_query_values_that_include_timestamps":0,"P\\Tests\\Unit\\Invoicing\\EconomicEndpointUrlEncodingTest::__pest_evaluable_it_avoids_double_encoding_query_values_that_are_already_escaped":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_supports_bulk_booked_invoice_line_payloads_with_top_level_department_numbers":0,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_claims_a_slot_atomically_with_nx_and_expiration":0,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_returns_false_when_the_slot_is_already_claimed_and_clamps_ttl_to_one_second":0,"P\\Tests\\Unit\\Bookings\\OrderBookingRouteIdempotencyGuardTest::__pest_evaluable_it_guards_order_booking_creation_with_redis_backed_idempotency":0.001,"P\\Tests\\Unit\\DynamicImages\\DynamicImagePreRenderCronWiringTest::__pest_evaluable_it_registers_dynamic_image_pre_render_cron_task_and_related_helpers":0.001,"P\\Tests\\Integration\\Database\\DbConnectionTest::__pest_evaluable_it_can_connect_to_a_configured_MySQL_instance_in_integration_mode":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicV2BackfillAndDistributionIntegrationTest::__pest_evaluable_it_runs_best_effort_backfill_repeatedly_without_introducing_duplicate_same_start_rows":0.013,"P\\Tests\\Integration\\Invoicing\\EconomicV2BackfillAndDistributionIntegrationTest::__pest_evaluable_it_resolves_version_aware_distribution_payload_shapes_over_a_real_date_range":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicV2VersioningServiceIntegrationTest::__pest_evaluable_it_creates_closes_and_rotates_fixed_pricing_versions_without_overlap":0.015,"P\\Tests\\Integration\\Invoicing\\EconomicV2VersioningServiceIntegrationTest::__pest_evaluable_it_tracks_vehicle_and_discount_version_lifecycles_with_closure_semantics":0.014,"P\\Tests\\Integration\\Permissions\\LegacyPermissionRedisCacheScriptTest::__pest_evaluable_it_keeps_legacy_route_permission_redis_cache_script_green":0.01,"P\\Tests\\Unit\\Permissions\\AllowOwnOrDepartmentAccessForbiddenTest::__pest_evaluable_it_returns_both_own_and_elevated_permissions_when_both_are_missing":0,"P\\Tests\\Unit\\Permissions\\AllowOwnOrDepartmentAccessForbiddenTest::__pest_evaluable_it_returns_only_elevated_permission_when_own_permission_exists_but_own_context_fails":0,"P\\Tests\\Unit\\Permissions\\AllowOwnOrDepartmentAccessForbiddenTest::__pest_evaluable_it_allows_elevated_permission_path_without_forbidden_and_validates_department_access":0,"P\\Tests\\Unit\\Permissions\\ForbiddenResponseWiringTest::__pest_evaluable_it_routes_and_trait_use_forbidden_responses_for_permission_and_ownership_denials":0.001,"P\\Tests\\Unit\\Permissions\\GroupPermissionSessionInvalidationWiringTest::__pest_evaluable_it_invalidates_related_user_permission_and_auth_session_caches_when_group_permissions_change":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_parses_advanced_target_duration_from_snake__case_fields":0.001,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_parses_advanced_target_duration_from_camelCase_aliases":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_normalizes_ENTIRE__DURATION_to_ignore_target__duration__every":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_defaults_recurring_target__duration__every_to_1_when_omitted":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetDurationTest::__pest_evaluable_it_keeps_strict_legacy_mode_when_target__duration_is_invalid":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_computes_weekly_target_using_touched_ISO_weeks_for_March_2026":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_applies_target__duration__every_for_weekly_cadence":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_prorates_ENTIRE__DURATION_target_by_overlap_days":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_splits_advanced_target_by_override_weights_per_department":0,"P\\Tests\\Unit\\Goals\\GoalsCriteriaTargetMathTest::__pest_evaluable_it_preserves_legacy_target_behavior_when_target__duration_is_missing":0,"P\\Tests\\Unit\\Goals\\GoalsLegacyRendererScriptsTest::__pest_evaluable_it_keeps_legacy_monthly_renderer_script_green":0.019,"P\\Tests\\Unit\\Goals\\GoalsLegacyRendererScriptsTest::__pest_evaluable_it_keeps_legacy_department_daily_renderer_script_green":0.021,"P\\Tests\\Unit\\Goals\\GoalsOpenApiSpecTest::__pest_evaluable_it_documents_advanced_goals_target_duration_fields_in_openapi":0.001,"P\\Tests\\Unit\\Workfeed\\WorkfeedClientConformanceTest::__pest_evaluable_it_uses_company_scoped_workfeed_endpoints_and_raw_Authorization_header":0.001,"P\\Tests\\Unit\\Workfeed\\WorkfeedClientConformanceTest::__pest_evaluable_it_normalizes_documented_shift_query_parameters":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedConfigRouteWiringTest::__pest_evaluable_it_registers_module_config_endpoints_for_workfeed":0.001,"P\\Tests\\Unit\\Workfeed\\WorkfeedRouteHelpersTest::__pest_evaluable_it_filters_request_parameters_down_to_the_allowed_workfeed_query_keys":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedRouteWiringTest::__pest_evaluable_it_registers_employee_and_department_endpoints_for_the_workfeed_module":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedRouteWiringTest::__pest_evaluable_it_registers_shift_endpoints_for_the_workfeed_module":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_calculates_workfeed_employee_hours_for_the_hour_slot_based_on_overlap":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_extracts_department_id_from_supported_workfeed_shift_shapes":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_normalizes_wrapped_workfeed_collections_from_common_response_keys":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineSchemaConformanceTest::__pest_evaluable_it_includes_a_date_key_in_department_weather_timeline_entries":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineSchemaConformanceTest::__pest_evaluable_it_documents_the_date_key_in_the_openapi_department_weather_timeline_schema":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_builds_a_timeline_range_from_start_of_yesterday_to_end_of_today":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_builds_a_timeline_range_relative_to_an_explicit_selected_date_override":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_calculates_workfeed_employee_hours_across_multiple_departments_for_one_hour_slot":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_normalizes_department_id_input_from_scalar_csv_and_nested_array_values":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_builds_a_timeline_range_relative_to_explicit_date__from_and_date__to_override":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_resolves_forecast_day_count_for_a_given_timeline_range_with_sane_limits":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_resolves_weather_coordinates_from_valid_coordinates_only":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_returns_null_weather_coordinates_when_all_department_locations_are_invalid":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_classifies_weatherapi_no_matching_location_errors_as_location_lookup_failures":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_does_not_classify_non_location_weatherapi_errors_as_location_lookup_failures":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_returns_an_empty_forecast_fallback_when_coordinates_are_unavailable":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_builds_timeline_entries_with_mostly__clear_weather_when_forecast_payload_is_empty":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherFallbackBehaviorTest::__pest_evaluable_it_wires_departments_weather_route_through_the_forecast_fallback_path":0.002,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_clamps_negative_ttl_to_zero":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_builds_deterministic_cache_keys_for_department_sets_and_timeline_ranges":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_builds_order_insensitive_cache_keys_for_equivalent_department_id_sets":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_falls_back_to_resolver_directly_when_cache_ttl_is_disabled":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTimelineRangeTest::__pest_evaluable_it_marks_non_started_slots_as_unknown_regardless_of_wash_hour_ratio":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherPreloadCronWiringTest::__pest_evaluable_it_registers_and_implements_cron_preloading_for_department_weather_cache":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_uses_sane_stale_ttl_defaults_and_clamps_stale_ttl_below_fresh_ttl":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_uses_sane_hot_activity_ttl_defaults_and_clamps_to_a_positive_value":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_serves_fresh_cached_payloads_without_invoking_the_resolver":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_serves_stale_cached_payloads_and_enqueues_a_refresh_signal":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_recomputes_and_rewrites_cache_payloads_when_stale_window_is_exceeded":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_records_hot_keys_order_insensitively_and_applies_preload_target_caps":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_normalizes_batched_wash_count_rows_into_hourly_slot_totals":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_wires_department_weather_route_to_use_batched_wash_aggregation":0,"P\\Tests\\Unit\\Orders\\AttachmentsListManyTest::__pest_evaluable_it_groups_attachments_by_object_id_and_preserves_empty_object_groups":0,"P\\Tests\\Unit\\Orders\\AttachmentsListManyTest::__pest_evaluable_it_keeps_listMany_payload_parity_with_list_for_one_object_id":0,"P\\Tests\\Unit\\Orders\\EconomicModuleOrdersBatchHelpersTest::__pest_evaluable_it_ensures_economic_module_rows_in_one_sanitized_batch":0,"P\\Tests\\Unit\\Orders\\EconomicModuleOrdersBatchHelpersTest::__pest_evaluable_it_returns_id_keyed_economic_module_payload_with_null_defaults":0,"P\\Tests\\Unit\\Orders\\OrdersRouteListBatchingWiringTest::__pest_evaluable_it_wires_GET__orders_through_batched_enrichment_and_stripe_snapshot_caching":0.001,"P\\Tests\\Unit\\Orders\\UsersCashierNamesBatchTest::__pest_evaluable_it_returns_cashier_names_from_cache_and_fetches_missing_ones_in_batch":0,"P\\Tests\\Unit\\Orders\\UsersCashierNamesBatchTest::__pest_evaluable_it_returns_deterministic_map_for_duplicate_and_unsorted_cashier_ids":0,"P\\Tests\\Unit\\Orders\\UsersCashierNamesBatchWiringTest::__pest_evaluable_it_implements_batched_cashier_name_lookup_with_cache_first_fallback_behavior":0.001,"P\\Tests\\Unit\\Orders\\UsersCashierNamesBatchWiringTest::__pest_evaluable_it_sanitizes_and_deduplicates_cashier_ids_before_batch_lookup":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_overtime_minutes_when_a_shift_carries_an_extended_approval_end_timestamp":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_unapproved_overtime_from_a_bounded_shift_updateTime_fallback":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_does_not_treat_late_unapproved_administrative_edits_as_overtime":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheHelpersTest::__pest_evaluable_it_changes_weather_timeline_cache_key_when_department_weather_targets_change":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_evaluates_healthy_degraded_and_unhealthy_statuses_from_configured_department_targets":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_returns_unknown_when_configured_targets_are_missing_for_department_status_evaluation":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_aggregates_multi_department_slot_statuses_using_worst_severity_and_unknown_fallback_rules":0.046,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsOpenApiSpecTest::__pest_evaluable_it_documents_department_weather_target_endpoints_and_reusable_schemas_in_openapi":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsOpenApiSpecTest::__pest_evaluable_it_documents_unknown_weather_status_behavior_when_targets_are_missing":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsRouteWiringTest::__pest_evaluable_it_registers_department_weather_target_routes_with_explicit_read_and_manage_permissions":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsRouteWiringTest::__pest_evaluable_it_persists_department_weather_targets_using_canonical_department_variable_keys":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_machine_relay_status_get_and_set_endpoints":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_batches_sequential_machine_relay_status_requests_into_a_single_Shelly_get_call":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_respects_the_1_request_per_second_Shelly_gate_for_back_to_back_requests":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_retries_missing_Shelly_status_payloads_until_relay_status_becomes_ready":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_times_out_with_a_clear_Shelly_readiness_error_when_payload_remains_missing":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_uses_direct_set_switch_and_seeds_cache_so_immediate_status_read_does_not_call_Shelly_get":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_lane_gate_open_endpoint":0.004,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_in_progress_self_serve_wash_details_endpoint":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_program_selector_is_on__then_turns_off_cleaner_machine_and_selector_relays":0.132,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_skips_vehicle_type_product_add_when_program_selector_is_off_and_only_disables_configured_relays":0.001,"P\\Tests\\Unit\\Selfserve\\DepartmentSelfServeEnabledRelaySyncWiringTest::__pest_evaluable_it_syncs_lane_relay_states_when_department_self_serve_enabled_flag_changes":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_supports_hard_relay_set_even_when_lane_status_is_CLOSED":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStartCleanerRelayWiringTest::__pest_evaluable_it_enables_cleaner_relay_on_wash_start_command_and_webhook_flow":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_forces_machine_relay_off_when_a_self_serve_wash_session_is_completed":0.003,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_opens_exit_port_by_switching_relay__in__id_on":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_opens_entrance_port_by_switching_relay__out__id_on":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_in_progress_self_serve_wash_start_and_machine_relay_fields":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_typed_task_gates_with_strict_semantics":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_validates_typed_task_gates_for_known_references":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_fails_validation_when_typed_task_gates_reference_unknown_entities":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_config_draft_publish_rollback_lifecycle_endpoints":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_keeps_legacy_self_serve_CRUD_routes_syncing_canonical_drafts":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStartCleanerRelayWiringTest::__pest_evaluable_it_keeps_cleaner_relay_enable_wired_into_machine_relay_start_paths":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_stores_config_json_with_apostrophes_without_violating_json_constraints":0.277,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_encodes_config_json_payloads_with_apostrophes_before_persistence":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_forces_machine_and_cleaner_relays_off_when_a_self_serve_wash_session_is_completed":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_vehicle_type_override_into_self_serve_preview_and_synchronization_routes":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_uses_local_demo_responses_and_skips_Shelly_cloud_calls_for_demo_relay_ids":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_returns_default_OFF_status_for_demo_relay_ids_without_Shelly_lookups":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_excludes_demo_relay_ids_from_Shelly_status_batch_payloads":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_keeps_demo_relay_gate_open_queued_but_skips_Shelly_switch_calls":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_allowed_services_route_through_machine_relay_visibility_sync":0.003,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_enables_MACHINE_relay_when_MACHINE_is_visible_in_allowed_services":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_turns_MACHINE_relay_off_immediately_when_MACHINE_is_not_visible":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_does_not_enable_MACHINE_relay_when_allowEnable_is_false_even_if_MACHINE_is_visible":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_is_a_safe_no_op_when_MACHINE_relay_is_not_configured":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRelayVisibilitySyncWiringTest::__pest_evaluable_it_synchronizes_machine_relay_from_visible_services_during_session_synchronization":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRelayVisibilitySyncWiringTest::__pest_evaluable_it_adds_explicit_relay_disable_session_helper_for_visibility_driven_OFF_transitions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_property_gate_command_permissions":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneCommandEnumTest::__pest_evaluable_it_parses_property_gate_lane_commands":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_opens_entrance_gate_for_OPEN__PROPERTY__ACCESS__GATE_command":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_opens_exit_gate_for_OPEN__PROPERTY__EXIT__GATE_command":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_blocks_property_gate_commands_when_department_self_serve_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_throws_a_clear_error_when_entrance_gate_is_missing_for_property_access_command":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_wraps_low_level_gate_errors_for_property_access_command_failures":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashFlowMachineAllowedWiringTest::__pest_evaluable_it_reads_machine_allowed_state_from_session_summary_payload_safely":0.001,"P\\Tests\\Unit\\Selfserve\\DbObjectPaginationLegacyColumnCompatibilityTest::__pest_evaluable_it_guards_pagination_against_searchable_fields_missing_from_legacy_schemas":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_adds_dynamic__images__vehicle__type_column_for_legacy_selfserve_wash_session_task_schemas":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceIncludedMinutesTest::__pest_evaluable_it_computes_billable_minutes_when_elapsed_minutes_exceed_included_minutes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceIncludedMinutesTest::__pest_evaluable_it_computes_zero_billable_minutes_when_elapsed_minutes_equal_included_minutes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceIncludedMinutesTest::__pest_evaluable_it_computes_zero_billable_minutes_when_included_minutes_exceed_elapsed_minutes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceIncludedMinutesTest::__pest_evaluable_it_handles_zero_and_low_elapsed_wash_time_edge_cases":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_self_serve_machine_wash_included_minutes_in_config_schemas":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_machine_wash_included_minutes_into_self_serve_module_config":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_blocks_explicit_relay_writes_when_department_self_serve_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_returns_disabled_no_op_from_machine_relay_visibility_sync_when_department_self_serve_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_property_gate_lane_commands_and_sanitized_gate_failure_responses":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_workspace_id_is_missing_for_gate_calls":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_channel_id_is_missing_for_gate_calls":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_with_terminal_status_details_when_call_never_reaches_accepted_state":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_hangs_up_when_call_reaches_accepted_state":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_hangs_up_immediately_when_status_transitions_to_accepted":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_maps_legacy_timeout_option_to_documented_ringTimeout_payload_field":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_clamps_derived_ringTimeout_to_Bird_documented_max_when_gate_timeout_is_high":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_passes_documented_hangup_cause_when_provided":0.001,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_drops_unsupported_hangup_cause_values_from_request_payload":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_fast_when_workspace_id_is_missing_for_gate_flash_calls":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_creates_gate_flash_call_with_documented_ringTimeout_payload":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_polls_flash_call_and_succeeds_once_accepted":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_fails_flash_gate_flow_when_terminal_failure_status_is_returned":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_does_not_fallback_to_regular_gate_call_when_flash_succeeds":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_falls_back_to_regular_gate_call_when_flash_fails":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePropertyGateCommandTest::__pest_evaluable_it_wraps_low_level_gate_errors_for_property_exit_command_failures":0,"P\\Tests\\Unit\\Bird\\BirdGateCallFlowTest::__pest_evaluable_it_falls_back_to_regular_gate_call_when_flash_caller_id_is_not_confirmed":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_maps_voice_call_facade_methods_to_documented_endpoints_and_methods":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_maps_recordings_insights_log_and_flash_methods_to_documented_resources":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_encodes_path_segments_before_building_outbound_endpoints":0,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_serializes_query_parameters_for_GET_transport_requests":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_maps_4xx_and_5xx_transport_failures_into_informative_exceptions":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_returns_raw_payload_for_malformed_JSON_responses_and_null_for_empty_responses":0.007,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_documents_all_Bird_voice_call_parity_endpoints_including_gather_recordings_insights_and_log":0.001,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_documents_flash_hangup_endpoint_and_marks_end_alias_as_deprecated":0.001,"P\\Tests\\Unit\\Bird\\BirdOpenApiSpecTest::__pest_evaluable_it_defines_request_and_response_schemas_for_Bird_call_command_recording_insight_log_and_flash_payloads":0.002,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_accepts_valid_payloads_for_create_and_nested_call_flow_commands":0,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_rejects_unknown_fields_and_invalid_enum_values_in_strict_schemas":0.001,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_supports_CSV_normalization_in_schema_validation_for_log_filters":0,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_validates_flash_hangup_payloads_for_both_supported_request_shapes":0,"P\\Tests\\Unit\\Bird\\BirdRequestValidationTest::__pest_evaluable_it_fails_before_forward_step_when_strict_validation_fails_and_forwards_when_valid":0,"P\\Tests\\Unit\\Bird\\BirdRouteWiringTest::__pest_evaluable_it_registers_full_Bird_voice_call_route_surface_with_strict_validation_and_permissions":0.001,"P\\Tests\\Unit\\Bird\\BirdRouteWiringTest::__pest_evaluable_it_registers_flash_hangup_endpoint_and_keeps_end_alias_wired_as_compatibility_path":0,"P\\Tests\\Unit\\Bird\\BirdRouteWiringTest::__pest_evaluable_it_keeps_Bird_number_and_webhook_routes_intact":0.001,"P\\Tests\\Unit\\Bird\\BirdModuleClientMappingTest::__pest_evaluable_it_handles_malformed_and_empty_response_bodies_without_throwing_transport_errors":0.005,"P\\Tests\\Unit\\Selfserve\\DepartmentGatesRelaysRouteWiringTest::__pest_evaluable_it_validates_department_gate_config_on_both_create_and_update_routes":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_adds_wash__started__at_column_for_legacy_selfserve_wash_session_schemas":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashStartedAtWiringTest::__pest_evaluable_it_stores_wash__started__at_in_self_serve_wash_sessions_when_machine_start_is_triggered":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashStartedAtWiringTest::__pest_evaluable_it_passes_lane_wash_start_time_into_the_session_machine_start_marker":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashStartedAtWiringTest::__pest_evaluable_it_resolves_in_progress_wash__started__at_from_session_with_compatibility_fallbacks":0.001,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_normalizes_say_payload_and_applies_hangup_default":0.001,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_normalizes_log_query_csv_and_integer_fields":0,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_normalizes_nested_create_call_payload_sections_and_drops_unknown_keys":0.001,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_keeps_gather_nested_say_payload_unchanged_when_hangup_is_omitted":0,"P\\Tests\\Unit\\Bird\\BirdPayloadClassesTest::__pest_evaluable_it_supports_no_body_and_flash_hangup_payload_normalization":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_respects_the_2_second_Shelly_gate_for_back_to_back_requests":0.023,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_enforces_a_2_second_gap_between_sequential_switch_requests_used_by_wash_start_and_stop_flows":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_keeps_back_to_back_get_switch_requests_ordered_through_the_relay_controller":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_executes_sequential_switch_requests_used_by_wash_start_and_stop_flows":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_does_not_print_Shelly_switch_responses_to_output":0,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitWiringTest::__pest_evaluable_it_enforces_a_global_2_second_Shelly_gate_in_sendPostRequest":0.001,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitWiringTest::__pest_evaluable_it_uses_Redis_NX_PX_semantics_for_cross_request_Shelly_rate_limiting":0,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitBehaviorTest::__pest_evaluable_it_enforces_the_2_second_Shelly_gate_across_separate_request_contexts":0,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitBehaviorTest::__pest_evaluable_it_does_not_delay_when_the_Shelly_gate_is_already_expired":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_program_selector_relay_is_online__then_turns_off_cleaner_and_machine_relays":0.62,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_skips_vehicle_type_product_add_when_program_selector_relay_is_offline_and_only_disables_configured_relays":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_bills_primary_product_when_selector_relay_is_online_even_if_relay_output_is_off":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceModeBillingTest::__pest_evaluable_it_bills_manual_self_serve_stop_using_full_elapsed_minutes_without_included_minute_reduction":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceModeBillingTest::__pest_evaluable_it_keeps_included_minute_reduction_for_automatic_mode":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_on_first_dtmf_input_captured_within_the_300_second_window":0.005,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_does_not_send_Slack_when_dtmf_input_repeats_without_change":0.008,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_again_when_dtmf_input_changes_within_the_window":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_keeps_gathering_and_does_not_hang_up_before_300_seconds_have_elapsed":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_announces_timeout_waits_10_seconds_and_sends_hangup_once_at_or_after_300_seconds":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_keeps_polling_until_terminal_status_and_only_then_finalizes":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_finalizes_immediately_when_webhook_payload_is_already_terminal_before_timeout_logic":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_does_not_duplicate_timeout_or_hangup_actions_across_retries_and_lock_contention":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_keeps_state_when_polling_fails_so_completion_is_not_falsely_reported":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_when_dtmf_input_repeats_without_change":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_answers_immediately_once_and_does_not_re_answer_on_subsequent_webhook_retries":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_configures_gather_with_retry_loop_semantics_until_input_is_entered":0.004,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_when_gather_result_provides_keys_field_instead_of_dtmf":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_sends_Slack_when_gather_conditions_variable_keys_carries_the_entered_value":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_configures_gather_to_check_every_2_seconds_with_retry_loop_semantics_until_input_is_entered":0,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_ignores_non_numeric_customer__number_values_from_request":0.042,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_casts_numeric_customer__number_strings_to_int_before_lookup":0,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_prefers_user__id_when_both_user__id_and_customer__number_are_valid":0,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_falls_back_to_customer__number_when_user__id_is_invalid":0,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_normalizes_request_identifiers_before_user_lookups":0.001,"P\\Tests\\Unit\\Users\\UsersAutomaticGetTargetUserFromRequestTest::__pest_evaluable_it_rejects_non_positive_and_non_digit_request_values":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_uses_pagination_results_when_present":0.006,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_falls_back_to_collection_count_when_pagination_metadata_is_missing":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_returns_zero_when_neither_pagination_nor_collection_is_available":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_counts_object_based_collections_when_pagination_metadata_is_missing":0,"P\\Tests\\Unit\\Invoicing\\EconomicPaymentTermsRouteCollectionExtractionTest::__pest_evaluable_it_uses_collection_when_present":0,"P\\Tests\\Unit\\Invoicing\\EconomicPaymentTermsRouteCollectionExtractionTest::__pest_evaluable_it_falls_back_to_paymentTerms_when_collection_is_missing":0,"P\\Tests\\Unit\\Invoicing\\EconomicPaymentTermsRouteCollectionExtractionTest::__pest_evaluable_it_supports_top_level_array_payloads":0,"P\\Tests\\Unit\\Invoicing\\EconomicPaymentTermsRouteCollectionExtractionTest::__pest_evaluable_it_returns_an_empty_array_when_no_known_collection_shape_exists":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_uses_grant__2_in_economic__endpoint__t_when_explicitly_requested_and_configured":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_falls_back_to_grant__1_in_economic__endpoint__t_when_grant__2_is_missing":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_for_missing_required_primary_grant_in_economic__endpoint__t":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_for_missing_app_secret_in_economic__endpoint__t":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_uses_grant__2_in_legacy_economic__m_when_available":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_falls_back_to_grant__1_in_legacy_economic__m_when_grant__2_is_missing":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_for_missing_required_primary_grant_in_legacy_economic__m":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_for_missing_app_secret_in_legacy_economic__m":0.001,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_uses_unfiltered_total_when_no_customer_filters_are_active":0.004,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_uses_filtered_total_when_search_is_active":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_uses_filtered_total_when_barred_filter_is_active":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_treats__null__search_and_barred_values_as_no_filter":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRoutePaginationFallbackTest::__pest_evaluable_it_falls_back_to_filtered_total_when_unfiltered_total_is_missing":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRouteEconomicFailureHandlingTest::__pest_evaluable_it_maps_e_conomic_integration_failures_in_customer_listing_to_explicit_502_responses":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRouteEconomicFailureHandlingTest::__pest_evaluable_it_logs_LIST__CUSTOMERS_success_only_after_pagination_and_customer_mapping_are_completed":0,"P\\Tests\\Unit\\Invoicing\\CustomerSearchRouteEconomicFailureHandlingTest::__pest_evaluable_it_guards_against_malformed_customer_list_payloads_before_calling_paginate":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_deterministic_upstream_exceptions_for_non_2xx_endpoint_trait_responses":0,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_throws_deterministic_upstream_exceptions_for_non_2xx_legacy_economic__m_responses":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_returns_raw_payload_unchanged_on_successful_HTTP_statuses":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersListResponseValidationTest::__pest_evaluable_it_accepts_valid_list_payloads_that_include_collection_and_pagination_results":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersListResponseValidationTest::__pest_evaluable_it_throws_when_pagination_is_missing_from_the_response_payload":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersListResponseValidationTest::__pest_evaluable_it_throws_when_upstream_responds_with_an_error_shaped_payload":0,"P\\Tests\\Unit\\Router\\RouterThrowableHandlingTest::__pest_evaluable_it_catches_throwables_during_auto_route_loading_and_maps_them_to_internal_server_errors":0,"P\\Tests\\Unit\\Users\\EconomicCustomerZeroHandlingTest::__pest_evaluable_it_does_not_request_e_conomic_customer_data_when_customer_number_is_zero":0.001,"P\\Tests\\Unit\\Users\\EconomicCustomerZeroHandlingTest::__pest_evaluable_it_short_circuits_e_conomic_customer_lookup_for_non_positive_customer_numbers":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueRouteRegistrationTest::__pest_evaluable_it_registers_queued_economic_invoice_endpoints_in_economicInvoiceRoute":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueRouteRegistrationTest::__pest_evaluable_it_registers_collected_invoice_queue_endpoints_in_orderInvoicesRoute":0.002,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueSchemaBootstrapTest::__pest_evaluable_it_defines_economic_transfer_queue_jobs_schema_bootstrap_table_and_tracking_columns":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueSchemaBootstrapTest::__pest_evaluable_it_provides_queue_processor_class_constants_and_processing_entrypoint":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueCronIntegrationTest::__pest_evaluable_it_registers_economic_transfer_queue_cron_task_and_handler":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_economic_transfer_queue_paths_in_openapi":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_economic_transfer_queue_schemas_in_openapi":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_skips_order_items_with_zero_quantity_for_e_conomic_export":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_skips_order_items_with_zero_price_for_e_conomic_export":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_keeps_positive_quantity_and_price_items_billable_for_e_conomic_export":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_wires_zero_cost_and_zero_quantity_skip_guard_into_transfer_line_builder":0,"P\\Tests\\Unit\\Invoicing\\EconomicInvoiceDraftZeroItemSkipWiringTest::__pest_evaluable_it_skips_zero_cost_and_zero_quantity_items_in_legacy_economic_draft_helper":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferOrderItemSkipTest::__pest_evaluable_it_skips_malformed_order_item_payloads_for_e_conomic_export_safety":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueHardeningTest::__pest_evaluable_it_hardens_transfer_queue_with_type_validation_retry_caps_and_stale_lock_recovery":0.001,"P\\Tests\\Unit\\Router\\AutoloadRedisCacheValidationTest::__pest_evaluable_it_validates_cached_autoload_paths_before_returning_and_clears_stale_cache_entries":0,"P\\Tests\\Unit\\Orders\\OrdersRegistrationDateRangeQueryTest::__pest_evaluable_it_applies_created__at_bounds_directly_in_SQL_when_filtering_orders_by_registration_number":0,"P\\Tests\\Unit\\Orders\\OrdersRegistrationDateRangeQueryTest::__pest_evaluable_it_rejects_an_inverted_date_range_for_registration_lookups":0,"P\\Tests\\Unit\\Orders\\OrdersRegistrationDateRangeQueryTest::__pest_evaluable_it_returns_early_when_registration_number_is_blank":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueCronIntegrationTest::__pest_evaluable_it_wires_queue_worker_class_loading_for_CLI_queue_action":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_guards_all_economic_invoice_queue_endpoints_before_constructing_queue_service":0.012,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_guards_all_collected_invoice_queue_endpoints_before_constructing_queue_service":0.011,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_uses_a_consistent_unavailable_service_contract_for_missing_queue_dependencies":0.009,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_gracefully_handles_unavailable_queue_dependencies_on_collected_invoice_queue_endpoints":0.005,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceEconomicQueueResponseContractTest::__pest_evaluable_it_returns_the_queue_job_id_in_POST__collected_invoices_economic_enqueue_response":0.204,"P\\Tests\\Unit\\Invoicing\\UserCollectedInvoiceUpdateRouteValidationTest::__pest_evaluable_it_requires_id_and_at_least_one_mutable_field_for_PUT__collected_invoices_in_user_route":0.001,"P\\Tests\\Unit\\Invoicing\\UserCollectedInvoiceUpdateRouteValidationTest::__pest_evaluable_it_supports_independent_po__number_and_closed__at_updates_for_PUT__collected_invoices_in_user_route":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceEconomicQueueResponseContractTest::__pest_evaluable_it_returns_queued_contract_for_POST__collected_invoices_stripe_book":0.002,"P\\Tests\\Unit\\Invoicing\\EconomicDraftQueueOnlyRouteBehaviorTest::__pest_evaluable_it_keeps_order_draft_export_route_queue_only":0.006,"P\\Tests\\Unit\\Invoicing\\EconomicDraftQueueOnlyRouteBehaviorTest::__pest_evaluable_it_keeps_collected_invoice_draft_producing_routes_queue_only_in_orderInvoicesRoute":0.004,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_guards_collected_invoice_and_stripe_draft_producing_endpoints_before_constructing_queue_service":0.004,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_unavailable_queue_dependency_responses_for_async_economic_transfer_endpoints":0.007,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueuePayloadValidationTest::__pest_evaluable_it_normalizes_order_payloads_to_strict_positive_integer_ids":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueuePayloadValidationTest::__pest_evaluable_it_normalizes_collected_invoice_payload_booleans_to_strict_bool_values":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueuePayloadValidationTest::__pest_evaluable_it_rejects_invalid_transfer_payloads_before_enqueue_write_attempts":0.001,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_processes_queued_transfer_jobs_to_completion":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_deduplicates_active_jobs_per_transfer_target":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_rejects_invalid_payloads_without_inserting_queue_rows":0.013,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_supports_fail_retry_and_reprocess_lifecycle_transitions":0.014,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_keeps_queue_guards_on_economic_invoice_queue_status_and_retry_routes":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_supports_synchronous_fallback_branches_before_queue_enqueue_on_economic_invoice_export_routes":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_keeps_queue_status_endpoints_guarded_while_collected_invoice_export_routes_support_synchronous_fallback":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAvailabilityGuardTest::__pest_evaluable_it_uses_a_consistent_unavailable_service_contract_for_queue_status_lifecycle_endpoints":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicDraftQueueOnlyRouteBehaviorTest::__pest_evaluable_it_supports_synchronous_fallback_and_queued_processing_for_order_draft_export_route":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicDraftQueueOnlyRouteBehaviorTest::__pest_evaluable_it_supports_synchronous_fallback_and_queued_processing_for_collected_invoice_draft_producing_routes":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceEconomicQueueResponseContractTest::__pest_evaluable_it_documents_both_synchronous_fallback_and_queued_response_contracts_for_POST__collected_invoices_economic":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceEconomicQueueResponseContractTest::__pest_evaluable_it_documents_both_synchronous_fallback_and_queued_response_contracts_for_POST__collected_invoices_stripe_book":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_200_fallback_plus_202_queue_contracts_for_export_endpoints_and_keeps_503_on_queue_lifecycle_endpoints":0.003,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_returns_pagination_metadata_and_strict_status_handling_for_collected_invoice_queue_list":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_enforces_retry_constraints_for_collected_invoice_queue_jobs_before_retry_execution":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_collected_queue_list_metadata_and_strict_status_filter_enum_in_openapi":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_builds_a_completed_collected_invoice_queue_summary_from_payload_and_result":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_prefers_queue_error_messages_for_failed_jobs_and_keeps_null_safe_outcome_fields":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_uses_deterministic_status_message_fallback_when_no_explicit_message_exists":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_handles_object_payload_result_values_and_malformed_fields_without_throwing":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_ticks_collected_invoice_transfer_queue_from_queue_list_and_status_routes":0.008,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_ticks_order_transfer_queue_from_draft_and_invoice_status_routes":0.009,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_marks_queued_transactions_and_clears_requires__action_when_all_actionable_work_is_already_queued":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_keeps_requires__action_true_when_a_customer_still_has_unqueued_actionable_transactions":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_blocks_fixed_pricing_or_subscription_customers_with_no_transactions_when_a_relevant_queue_job_exists":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerCommandQueueTest::__pest_evaluable_it_queues_admin_commands__exposes_agent_poll_result_handlers__and_keeps_heartbeats_from_mutating_discovery_state":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerCommandQueueTest::__pest_evaluable_it_defines_the_dispatchable_gateway_guard_on_the_loaded_manager_class":0.009,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"recent heartbeat stays online\"\"":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"late heartbeat degrades after one minute\"\"":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"stale heartbeat goes offline after five minutes\"\"":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"explicit offline reports stay offline even when heartbeat is fresh\"\"":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_effective_gateway_status_from_heartbeat_freshness with data set \"dataset \"missing heartbeat is treated as offline\"\"":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_marks_ready_discovery_as_stale_when_the_gateway_heartbeat_has_expired":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_the_edge_gateway_management_REST_endpoints":0.021,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_public_installer__claim__heartbeat__command_polling__and_internal_broker_auth_endpoints":0.004,"P\\Tests\\Unit\\Selfserve\\EdgeBrokerClientConfigTest::__pest_evaluable_it_uses_the_same_default_broker_url_and_shared_secret_fallback_as_the_docker_stack":0.267,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_install_script_urls_with_forwarded_https_scheme_when_proxied":0.336,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_appends_forwarded_ports_when_the_forwarded_host_omits_them":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_infers_https_for_the_staging_api_host_when_only_the_https_port_is_present":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_prefers_EDGE__PUBLIC__API__URL_when_explicitly_configured":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_normalizes_public_broker_overrides_to_https_and_browser_shell_urls_to_wss":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_keeps_localhost_broker_overrides_on_plain_http_and_ws_for_local_development":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_includes_node_pty_build_prerequisites_in_the_generated_install_script":0.007,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_prefers_EDGE__PUBLIC__API__URL_when_explicitly_configured_and_derives_the_broker_from_the_api_origin":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_normalizes_public_broker_overrides_to_https__strips_paths__and_browser_shell_urls_to_wss":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_merges_incoming_heartbeat_metadata_with_existing_gateway_metadata":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_the_v2_operator_facing_edge_gateway_routes":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRouteWiringTest::__pest_evaluable_it_registers_PHP_edge_agent_routes_for_operations_and_legacy_relay_command_polling":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewaySchemaBootstrapTest::__pest_evaluable_it_defines_the_v2_edge_gateway_schema_bootstrap_tables":0.004,"P\\Tests\\Unit\\Selfserve\\EdgeGatewaySchemaBootstrapTest::__pest_evaluable_it_stores_operation_metadata_and_event_timelines_for_management_workflows":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_builds_the_installer_around_the_PHP_agent_artifacts_and_management_polling_config":0.011,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_exposes_update_payload__credential_rotation__and_operation_endpoints_without_shell_transport_wiring":0.013,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerCommandQueueTest::__pest_evaluable_it_keeps_relay_dispatch_and_discovery_queueing_on_the_edge_gateway_manager":0.004,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerCommandQueueTest::__pest_evaluable_it_loads_relay_command_helpers_on_the_manager_and_gateway_operations_on_the_dedicated_service":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_derives_relay_fallback_and_transport_health_details_without_shell_or_update_runtime_state":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_resolves_edge_agent_artifacts_from_the_source_tree_layout":0.445,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_includes_the_container_mounted_artifact_directory_as_a_candidate":0.021,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_reads_install_artifacts_through_the_shared_locator":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_builds_update_payloads_with_checksums_from_resolved_artifact_paths":0.002,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_resolves_edge_agent_artifacts_from_a_supported_runtime_layout":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_install_script_urls_with_the_PHP_agent_artifacts_and_forwarded_https_scheme":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_explains_the_legacy_dist_mount_mismatch_when_php_artifacts_are_unavailable":0.002,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_mounted_and_baked_in_artifact_directories_before_repo_fallbacks":0.022,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_falls_back_to_baked_in_artifacts_when_the_mount_path_is_absent":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_router_resources_before_mounted_and_baked_in_artifact_directories":0.001,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_lists_orders_for_an_admin_scoped_user_and_limits_the_results_to_the_permitted_departments":1.109,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_lists_only_the_targeted_customer_orders_for_subuser_sessions":2.935,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_returns_the_current_auth_and_permission_failures_when_order_listing_is_not_allowed":1.375,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_creates_orders_through_the_real_endpoint":0.982,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_order_creation_requests":3.423,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_updates_orders_through_the_primary_endpoint":1.13,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_reassigns_invoice_collections_when_changing_an_order_across_the_draft_customer_boundary":1.615,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_supports_legacy_field_value_metadata_updates_through_the_primary_endpoint":5.592,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_updates_through_the_primary_order_endpoint":1.29,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_updates_orders_through_the_legacy_alias_endpoint":1.517,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_supports_legacy_field_value_metadata_updates_through_the_alias_endpoint":4.136,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_updates_through_the_legacy_alias_endpoint":0.512,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_unsupported_legacy_field_value_updates_on_both_update_endpoints":0.965,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_deletes_orders_through_the_real_endpoint":1.045,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_rejects_invalid_order_delete_requests":1.64,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_regenerates_attached_wash_certificates_when_certificate_metadata_changes_through_the_primary_endpoint":3.683,"P\\Tests\\Api\\OrdersApiTest::__pest_evaluable_it_regenerates_attached_wash_certificates_for_legacy_field_value_updates_through_the_alias_endpoint":3.194,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayOperationLegacySchemaCompatibilityTest::__pest_evaluable_it_keeps_the_legacy_operation__type_column_compatible_with_v2_operation_queueing":0.001,"P\\Tests\\Unit\\Bookings\\OrderBookingsListCacheTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_clamps_negative_ttl_to_zero":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsListCacheTest::__pest_evaluable_it_builds_deterministic_keys_for_equivalent_contexts":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsListCacheTest::__pest_evaluable_it_stores_and_retrieves_full_order_bookings_payloads":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsListCacheTest::__pest_evaluable_it_ignores_malformed_cached_payloads_and_clears_order_bookings_list_caches":0.001,"P\\Tests\\Unit\\Bookings\\OrderBookingsRouteCacheWiringTest::__pest_evaluable_it_caches_the_paginated_order_bookings_list_response_and_invalidates_it_on_booking_changes":0.001,"P\\Tests\\Unit\\Bookings\\VehicleSearchBookedMetadataRouteContractTest::__pest_evaluable_it_keeps_booked_vehicle_search_metadata_aligned_with_filtered_pending_order_bookings":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsCacheTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_clamps_negative_ttl_to_zero":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsCacheTest::__pest_evaluable_it_builds_deterministic_keys_for_equivalent_count_contexts":0.001,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsCacheTest::__pest_evaluable_it_stores_and_retrieves_normalized_booking_counts":0,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsCacheTest::__pest_evaluable_it_ignores_malformed_payloads_and_clears_order_bookings_count_caches":0.001,"P\\Tests\\Unit\\Bookings\\OrderBookingsCountsRouteWiringTest::__pest_evaluable_it_adds_a_cached_order_bookings_counts_endpoint_and_invalidates_it_on_booking_changes":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayFleetUsageStatisticsTest::__pest_evaluable_it_summarizes_fleet_usage_statistics_for_the_dashboard_landing_view":0,"P\\Tests\\Api\\ApiCoverageManifestTest::__pest_evaluable_it_keeps_every_selected_API_operation_covered_by_happy_path_and_failure_tests":0.001,"P\\Tests\\Api\\ApiCoverageManifestTest::__pest_evaluable_it_keeps_the_OpenAPI_manifest_entries_aligned_with_the_API_spec":0.051,"P\\Tests\\Api\\ApiFixturesCleanupTest::__pest_evaluable_it_removes_generated_customer_traces_during_fixture_cleanup":8.099,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_in_with_valid_customer_credentials":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_login_payloads_and_credentials":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_returns_the_cached_auth_session_payload_for_a_valid_token":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_includes_economic_runtime_config_for_uncached_auth_sessions":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_auth_session_tokens":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_out_and_invalidates_the_token_for_future_session_calls":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_logs_out_and_invalidates_cached_subuser_sessions":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_rejects_invalid_logout_tokens":0,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_the_raw_202_gather_webhook_contract_over_HTTP":0.788,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_still_prompts_for_department_selection_when_only_one_department_is_eligible":0.732,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_accepts_the_legacy_initial_webhook_body_with_top_level_call_identifiers":0.692,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_native_flow_gather_data_after_a_top_level_department_selection_when_distinct_gate_choices_exist":1.515,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_opens_the_gate_immediately_after_a_top_level_department_selection_when_entrance_and_exit_share_the_same_gate":1.719,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_uses_a_multi_digit_gather_contract_when_10_departments_are_eligible":0.587,"P\\Tests\\Api\\BirdVoiceWebhookApiTest::__pest_evaluable_it_returns_a_raw_400_transport_error_for_malformed_webhook_payloads":0.419,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_lists_only_visible_departments_and_can_return_a_single_department_with_the_slack_webhook":1.048,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_department_listing_when_the_permission_is_missing":0.378,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_creates_departments_through_the_real_endpoint":0.59,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_create_requests":1.554,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_updates_departments_through_the_real_endpoint":0.788,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_update_requests":1.552,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_lists_department_categories_for_a_department":1.006,"P\\Tests\\Api\\DepartmentsApiTest::__pest_evaluable_it_rejects_invalid_department_category_requests":1.191,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_lists_the_draft_customer_config_entry_in_economic_config_responses":0,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_round_trips_the_draft_customer_config_value_through_economic_config_updates":0,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_order_draft_exports_for_the_configured_draft_customer":0,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_booked_invoice_exports_for_the_configured_draft_customer":0,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_rejects_collected_invoice_exports_for_the_configured_draft_customer":0,"P\\Tests\\Api\\PingApiTest::__pest_evaluable_it_returns_the_ping_contract":0.877,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_setup_required_error_when_department_terminal_readers_are_requested_without_terminal_setup":1.281,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_sends_a_Stripe_invoice_by_email_and_persists_the_hosted_invoice_association":5.434,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_conflict_when_a_Stripe_hosted_invoice_is_already_active_for_the_order":4.756,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_allows_sending_a_new_Stripe_hosted_invoice_when_the_existing_association_is_already_terminal":3.943,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_voids_an_unpaid_Stripe_hosted_invoice_and_clears_the_local_order_association":3.746,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_refuses_to_cancel_a_paid_Stripe_hosted_invoice":4.131,"P\\Tests\\Api\\StripeApiTest::__pest_evaluable_it_returns_a_setup_required_error_when_creating_a_payment_intent_for_a_department_without_terminal_setup":0.726,"P\\Tests\\Api\\VehiclesApiTest::__pest_evaluable_it_returns_the_newest_vehicle_last__order__id_that_still_has_order_items":1.326,"P\\Tests\\Api\\VehiclesApiTest::__pest_evaluable_it_returns_a_null_vehicle_last__order__id_when_no_order_with_items_exists":1.159,"P\\Tests\\Unit\\Users\\EconomicCustomerModelParsingTest::__pest_evaluable_it_parses_cached_economic_customer_payloads_that_use_snake__case_customer__number":0,"P\\Tests\\Unit\\Users\\EconomicCustomerModelParsingTest::__pest_evaluable_it_leaves_the_economic_customer_model_empty_when_no_valid_customer_number_is_present":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayFleetUsageStatisticsTest::__pest_evaluable_it_derives_fleet_usage_directly_from_cached_gateway_row_summaries":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_install_script_urls_with_the_compose_edge_gateway_artifacts_and_forwarded_https_scheme":0.019,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayMetadataUpdateContractTest::__pest_evaluable_it_adds_a_gateway_metadata_update_endpoint_with_label_and_primary_assignment_fields":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayMetadataUpdateContractTest::__pest_evaluable_it_reassigns_department_primary_gateways_through_dedicated_manager_helpers":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayShellPollingTransportTest::__pest_evaluable_it_removes_shell_access_from_the_edge_gateway_HTTP_contracts":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_builds_the_installer_around_the_compose_stack_artifacts_and_management_polling_config":0.02,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_uses_sane_ttl_defaults_and_deterministic_cache_keys":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_stores_and_retrieves_cached_list_and_detail_payloads":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_syncs_gateway_snapshots_into_cached_list_payloads_and_refreshes_fleet_usage":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayViewCacheTest::__pest_evaluable_it_removes_deleted_gateways_from_cached_list_and_detail_payloads":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayUpdateLifecycleTest::__pest_evaluable_it_exposes_update_payload__credential_rotation__cancel_endpoints__and_operation_endpoints_without_shell_transport_wiring":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_registers_module_scoped_edge_gateway_operator_routes":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_registers_edge_gateway_module_config_endpoints":0.006,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_registers_edge_gateway_config_endpoints_from_the_module_route_directory":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_keeps_only_the_module_facade_in_the_global_classes_directory_and_conditionally_loads_module_routes":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayInstallSessionLifecycleTest::__pest_evaluable_it_caps_install_session_diagnostics_and_events_while_preserving_the_first_start_timestamp":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayInstallSessionLifecycleTest::__pest_evaluable_it_clears_terminal_failure_details_after_a_successful_claim_update":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayInstallSessionLifecycleTest::__pest_evaluable_it_marks_expired_non_terminal_install_sessions_as_terminal_when_read_back":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_websocket_broker_urls_on_the_traefik_broker_path":0.117,"P\\Tests\\Unit\\Selfserve\\DepartmentGateConfigRelayTest::__pest_evaluable_it_validates_relay_gate_configs_and_keeps_relay_specific_fields_in_the_payload":0,"P\\Tests\\Unit\\Selfserve\\DepartmentGateConfigRelayTest::__pest_evaluable_it_rejects_relay_gate_configs_without_a_logical_relay_id":0,"P\\Tests\\Unit\\Bird\\DepartmentGatesRelayOpenTest::__pest_evaluable_it_dispatches_relay_backed_gates_through_the_edge_gateway_relay_manager":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayDepartmentWorkspaceContractTest::__pest_evaluable_it_defines_the_department_hardware_workspace_service_payload_surface":0.001,"P\\Tests\\Unit\\Selfserve\\PlateScannerWorkspaceContractTest::__pest_evaluable_it_adds_lane_aware_scanner_management_and_a_dedicated_rotate_key_action":0.001,"P\\Tests\\Unit\\Selfserve\\PlateScannerWorkspaceContractTest::__pest_evaluable_it_uses_the_scanner_default_lane_before_requiring_an_explicit_lane__id_in_machine_button_webhooks":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_maps_gateway_relay_status_responses_into_the_Shelly_cloud_payload_shape":0.01,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_maps_gateway_relay_switch_responses_into_the_Shelly_cloud_payload_shape":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_requires_a_valid_department_id_for_gateway_transport_requests":0.002,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_rejects_unsupported_gateway_transport_endpoints":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_surfaces_binding_lookup_failures_while_resolving_relay_state_through_the_gateway_transport":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_surfaces_offline_gateway_failures_while_dispatching_relay_switch_commands":0,"P\\Tests\\Api\\PlateScannersApiTest::__pest_evaluable_it_returns_the_updated_lane_id_after_editing_a_scanner_whose_null_lane_was_already_cached":21.835,"P\\Tests\\Api\\PlateScannersApiTest::__pest_evaluable_it_rejects_plate_scanner_edits_when_the_permission_is_missing":7.837,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_normalizes_owned_Shelly_devices_into_relay_select_options":0,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_fails_fast_when_Shelly_inventory_does_not_include_owned_devices_status":0,"P\\Tests\\Unit\\Selfserve\\DepartmentLaneRelayOptionsRouteWiringTest::__pest_evaluable_it_registers_a_department_lane_relay_options_endpoint_backed_by_Shelly_inventory":0.001,"P\\Tests\\Unit\\Selfserve\\DepartmentLaneRelayNullificationRouteWiringTest::__pest_evaluable_it_nullifies_department_lane_relay_fields_when_blank_select_values_are_submitted":0.001,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_serves_installer_artifacts_and_recovers_gateway_runtime_status_after_fresh_heartbeats":0,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_polls_operations_and_commands__submits_results__and_records_broker_presence_for_task_pages":0,"P\\Tests\\Api\\EdgeGatewayAgentApiTest::__pest_evaluable_it_rejects_missing_and_invalid_edge_agent_tokens":0,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_validates_broker_sessions_and_ingests_presence__telemetry__logs__and_shell_lifecycle_data":180.867,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_builds_broker_backlog_and_completes_gateway_operations_through_broker_endpoints":147.749,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_rejects_invalid_edge_broker_shared_secrets":6.832,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_creates_install_tokens__tracks_installer_status__and_exposes_claimed_gateway_detail_to_authorized_operators":134.744,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_manages_edge_gateway_metadata__bindings__operations__sessions__rotation__cutover__and_deletion":272.219,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_rejects_operator_edge_routes_when_module_permission_or_department_access_is_missing":46.681,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_persists_install_session_updates_and_derives_gateway_runtime_status_from_heartbeats":0.015,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_assembles_tasks__logs__statistics__operations__commands__and_shell_lifecycle_state_from_persisted_records":0.019,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_builds_localhost_websocket_broker_urls_on_the_local_traefik_api_prefix":0.002,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerUrlTest::__pest_evaluable_it_keeps_root_host_api_urls_unprefixed_when_the_request_is_not_under_the_local_api_alias":0.001,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_imports_a_matching_e_conomic_customer_into_the_local_system_when_no_local_record_exists":0.001,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_reports_when_the_local_customer_already_has_a_login_account":0,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_creates_a_new_e_conomic_customer_and_returns_a_created_result_for_new_rows":0,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_creates_the_economic_record_for_an_existing_local_account_when_no_matching_upstream_customer_exists":0,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_rejects_CVR_conflicts_when_the_upstream_customer_number_does_not_match_the_submitted_phone_number":0,"P\\Tests\\Unit\\Customers\\CustomerMassImportServiceTest::__pest_evaluable_it_registers_the_customer_import_route_and_wires_it_through_the_mass_import_service":0,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_builds_customer_name_cache_payloads_from_economic_data_or_display_name_fallbacks":0,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_guards_bulk_customer_name_cache_writes_behind_a_resolved_payload_check":0.001,"P\\Tests\\Api\\EdgeGatewayOperatorApiTest::__pest_evaluable_it_ignores_and_soft_deletes_edge_gateways_whose_department_no_longer_exists":35.946,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_only_trusts_broker_presence_while_the_broker_heartbeat_is_fresh":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayManagerHeartbeatStatusTest::__pest_evaluable_it_refreshes_broker_presence_from_broker_telemetry_heartbeats":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_resolves_the_injected_gateway_transport_when_a_department_is_in_gateway_mode":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_resolves_the_injected_cloud_transport_when_a_department_is_in_cloud_mode":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_lets_relay_tests_override_the_department_transport_without_changing_department_mode":0,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_falls_back_to_local_device_and_control_names_when_Shelly_cloud_list_metadata_is_unavailable":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_uses_local_only_gateway_dispatch_for_explicit_local_transport_overrides":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_marks_non_injected_local_overrides_as_local_only_gateway_transport":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_opens_exit_port_by_switching_relay__out__id_on":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_opens_entrance_port_by_switching_relay__in__id_on":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_forwards_Shelly_toggle__after_timers_to_gateway_relay_switches":0,"P\\Tests\\Unit\\Selfserve\\ShellyTransportResolverTest::__pest_evaluable_it_marks_non_injected_local_and_gateway_overrides_as_local_only_gateway_transport":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_preserves_local_gateway_diagnostic_metadata_on_relay_status_snapshots":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_includes_positive_relay_timers_in_Shelly_switch_payloads":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_applies_Shelly_transport_overrides_across_self_serve_relay_side_effect_routes":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayLegacyRouteShimTest::__pest_evaluable_it_keeps_guarded_legacy_root_shims_for_moved_edge_gateway_routes":0.001,"P\\Tests\\Integration\\EdgeGateway\\EdgeGatewayBackendIntegrationTest::__pest_evaluable_it_persists_gateway_cutover_relay_bindings_used_by_self_serve_Shelly_dispatch":0.015,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_passes_explicit_timer_values_when_opening_lane_gates":0,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_keeps_Shelly_1_Mini_Gen3_type__model__and_generation_aligned_with_Shelly_metadata":0,"P\\Tests\\Api\\EdgeGatewayBrokerApiTest::__pest_evaluable_it_rejects_shell_session_creation_while_broker_presence_is_unavailable":23.503,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayModuleRouteWiringTest::__pest_evaluable_it_registers_broker_settings_as_editable_edge_gateway_module_config":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_self_serve_session_management_endpoints_and_OpenAPI_coverage":0.012,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_keeps_self_serve_force_stop_distinct_from_normal_STOP_relay_and_gate_behavior":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_keeps_read_only_self_serve_preview_and_summary_refreshes_from_touching_relay_hardware":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashFlowMachineAllowedWiringTest::__pest_evaluable_it_separates_session_synchronization_from_relay_hardware_synchronization":0.001,"P\\Tests\\Unit\\Selfserve\\ShellyRealRequestGuardTest::__pest_evaluable_it_blocks_and_records_test_mode_Shelly_POST_requests_before_cURL_can_run":0.001,"P\\Tests\\Unit\\Selfserve\\ShellyRealRequestGuardTest::__pest_evaluable_it_blocks_and_records_test_mode_Shelly_GET_requests_before_cURL_can_run":0,"P\\Tests\\Unit\\Selfserve\\ZZZShellyGuardSafetyMetaTest::__pest_evaluable_it_did_not_record_any_real_Shelly_request_attempts_during_self_serve_tests":0,"P\\Tests\\Api\\SelfserveFixtureApiTest::__pest_evaluable_it_creates_a_comprehensive_self_serve_API_scenario_with_demo_relays":0.171,"P\\Tests\\Api\\SelfserveZZZShellyGuardApiTest::__pest_evaluable_it_did_not_record_any_real_Shelly_request_attempts_during_self_serve_API_tests":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_serializes_questions__conditions__tasks__scopes__and_gateways_into_one_graph":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_derives_studio_vehicle_type_lookup_rows_from_selectable_wash_products":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_applies_saved_layout_without_changing_graph_semantics":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_keeps_layout_loading_compatible_with_native_PDO_named_placeholders":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_builds_guided_simulator_debug_payload_with_blockers_and_canvas_annotations":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_resolves_simulator_gateway_service_bindings_from_lane_relay_slots":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_persists_allowed_services_without_relay_writes_for_pre_start_wash_setup":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_the_all_in_one_self_serve_studio_replacement_endpoints":0.003,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_continues_start_when_entrance_relay_dispatch_times_out_ambiguously":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_still_fails_start_for_non_timeout_entrance_relay_errors":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_parses_deferred_relay_side_effects_on_start_command_arguments":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_skips_cleaner_and_machine_relay_side_effects_when_start_asks_to_defer_them":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_keeps_cleaner_and_machine_relay_side_effects_for_normal_start_commands":0,"P\\Tests\\Unit\\Selfserve\\SelfservePropertyGatePermissionBypassTest::__pest_evaluable_it_allows_property_gate_commands_for_customers_with_an_active_wash_in_the_target_department":0,"P\\Tests\\Unit\\Selfserve\\SelfservePropertyGatePermissionBypassTest::__pest_evaluable_it_does_not_bypass_property_gate_permissions_without_a_positive_customer_number":0,"P\\Tests\\Unit\\Selfserve\\SelfservePropertyGatePermissionBypassTest::__pest_evaluable_it_does_not_bypass_property_gate_permissions_when_the_customer_has_no_active_wash_in_the_target_department":0,"P\\Tests\\Unit\\Selfserve\\SelfserveOpenApiSpecTest::__pest_evaluable_it_documents_the_all_in_one_self_serve_studio_replacement_API":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_allows_own_permission_customers_to_preview_borrowed_registration_plates_without_ownership_checks":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_allows_customer_scoped_answers_to_be_stored_for_borrowed_registration_plates":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_does_not_apply_saved_answers_from_another_customer_for_the_same_registration_plate":0.027,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_scopes_saved_self_serve_answers_by_customer_number_and_registration_plate":0,"P\\Tests\\Unit\\Selfserve\\SelfserveNonOwnedVehicleWashAccessTest::__pest_evaluable_it_loads_saved_answers_from_the_authenticated_customer_context_instead_of_the_plate_owner":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_does_not_count_shifts_without_punches_when_checkIn_checkOut_are_null":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_overtime_minutes_when_a_saved_shift_end_extends_past_the_approved_original_end":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_does_not_count_removed_approved_time_when_a_saved_shift_end_is_shortened":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_caps_current_slot_hours_to_elapsed_minutes_and_zeroes_future_slots":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_counts_checked_in_shifts_without_checkOut_up_to_occurredUntil":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_keeps_the_main_period_response_local_only_for_booked_state_and_customer_names":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_streams_the_main_period_response_instead_of_encoding_the_full_payload_at_once":0.002,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_maps_batched_period_transaction_rows_to_the_legacy_transaction_response_shape":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_uses_batched_period_transactions_and_keyed_customer_maps_in_the_main_period_route":0.002,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_falls_back_to_configured_e_conomic_default_department_for_missing_customer_default_department_in_distributions":0.001,"P\\Tests\\Api\\EconomicDraftCustomerApiTest::__pest_evaluable_it_round_trips_the_default_distribution_department_config_value_through_economic_config_updates":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_MySQL_GTID_interval_counts_and_coverage_percentages":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_reports_empty_source_GTID_sets_as_caught_up":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_Redis_offset_percentages_safely":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_MariaDB_GTID_coverage_by_domain_sequence":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_normalizes_public_replication_kind_aliases":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_supports_MariaDB_prerequisites_without_requiring_Oracle_MySQL_variables":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_reports_MariaDB_specific_blockers_when_GTID_or_binary_logging_prerequisites_are_missing":0,"P\\Tests\\Unit\\Replication\\ReplicationSecretBoxTest::__pest_evaluable_it_encrypts_replication_secrets_without_storing_plaintext":0.001,"P\\Tests\\Unit\\Replication\\ReplicationSecretBoxTest::__pest_evaluable_it_builds_active_database_and_redis_config_from_encrypted_bootstrap_snapshots":0,"P\\Tests\\Unit\\Replication\\SuperuserReplicationRouteWiringTest::__pest_evaluable_it_registers_superuser_replication_endpoints_and_permissions":0,"P\\Tests\\Unit\\Replication\\SuperuserReplicationRouteWiringTest::__pest_evaluable_it_documents_replication_management_in_openapi":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_generates_replication_ready_MariaDB_compose_templates_without_embedding_secrets":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_generates_Redis_replica_compose_templates_with_primary_connection_placeholders":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_does_not_require_replica_SQL_threads_before_database_provisioning_configures_them":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_creates_the_generated_replication_user_on_the_primary_during_provisioning":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_detects_missing_database_tables_before_provisioning_a_preseeded_replica":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_allows_failed_replicas_to_be_removed_without_allowing_primary_or_healthy_replica_removal":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_seeds_MariaDB_replicas_in_place_instead_of_requiring_container_recreation":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_replication_operation_progress_schema_idempotent_for_existing_installs":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_limits_MariaDB_log_table_seeding_to_the_last_month":0.002,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_skips_log_table_data_during_MariaDB_seeding_and_replication":0.003,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_operational_log_tables_schema_only_during_MariaDB_seeding_and_replication":0.005,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_provisions_Redis_replicas_after_a_connectivity_only_preflight_and_reports_sync_progress":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_Redis_promotion_caught_up__durable__and_metadata_safe":0,"P\\Tests\\Unit\\Auth\\CreateTokenTest::__pest_evaluable_it_creates_auth_tokens_and_reports_missing_customer_users_clearly":0.018,"P\\Tests\\Unit\\Auth\\EconomicCreateCustomerResponseTest::__pest_evaluable_it_returns_the_raw_upstream_create_response_and_preserves_the_requested_payload":0,"P\\Tests\\Unit\\Auth\\RegisterCvrLegacyScriptTest::__pest_evaluable_it_keeps_the_legacy_register_cvr_route_harness_passing":0.021,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_raw_202_gather_response_for_initial_department_selection":0.002,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_accepts_legacy_initial_webhook_payloads_with_top_level_call_identifiers":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_flow_data_gather_payload_after_department_selection_in_native_flow_mode_when_distinct_gate_choices_exist":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_opens_the_gate_immediately_after_department_selection_when_entrance_and_exit_resolve_to_the_same_gate_in_native_flow_mode":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_flow_data_completion_payload_after_gate_confirmation_in_native_flow_mode":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_second_stage_raw_202_gather_response_after_department_selection_when_distinct_gate_choices_exist":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_opens_the_shared_gate_immediately_after_department_selection_in_raw_command_mode":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_opens_the_selected_gate_and_clears_redis_state_on_final_selection":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_reprompts_with_invalid_selection_while_keeping_webhook_state":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_uses_fallback_dtmf_extraction_when_event_gather_keys_are_missing":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_prompts_for_department_selection_even_when_only_one_eligible_department_exists":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_prompts_for_a_single_available_gate_type_and_opens_only_after_explicit_confirmation":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_supports_multi_digit_department_selections_before_gate_confirmation":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_direct_raw_200_completion_when_no_departments_are_eligible":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_continues_with_the_first_gather_prompt_when_backend_call_acceptance_fails":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteCallLifecycleTest::__pest_evaluable_it_returns_a_business_failure_raw_200_response_when_gate_opening_fails":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_deterministic_department_digit_map_without_capping_options":0.001,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_compact_gate_option_maps_and_resolves_selected_gate_type_by_digit":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_builds_department_prompts_with_multi_digit_guidance_and_compact_gate_prompts":0,"P\\Tests\\Unit\\Bird\\BirdVoiceWebhooksRouteIvrTest::__pest_evaluable_it_normalizes_menu_digit_input_from_Bird_dtmf_payload_values":0,"P\\Tests\\Unit\\Bird\\DepartmentGatesPhoneCallOpenTest::__pest_evaluable_it_forwards_phone_number_and_call_duration_threshold_to_the_Bird_gate_helper":0,"P\\Tests\\Unit\\Bird\\DepartmentGatesPhoneCallOpenTest::__pest_evaluable_it_wraps_Bird_helper_failures_and_reports_them_to_Slack":0.001,"P\\Tests\\Unit\\Bookings\\NonPosBookingCompletionRemovalTest::__pest_evaluable_it_unregisters_legacy_booking_completion_forms":0.001,"P\\Tests\\Unit\\Bookings\\NonPosBookingCompletionRemovalTest::__pest_evaluable_it_keeps_legacy_wash_certificate_downloads_but_disables_generation_and_completion":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsComplaintsOpenApiSpecTest::__pest_evaluable_it_documents_the_daily_report_complaints_CRUD_and_customer_lookup_endpoints_in_openapi":0.002,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsComplaintsRouteContractTest::__pest_evaluable_it_wires_complaint_create__lookup__list__edit__and_delete_routes_with_validation_and_parsing":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOutsideHoursOpenApiSpecTest::__pest_evaluable_it_documents_outside_hours_summary_and_trend_schemas_in_openapi":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOutsideHoursRouteContractTest::__pest_evaluable_it_wires_outside_hours_summary_and_trend_endpoints_through_the_dedicated_statistics_service":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOutsideHoursRouteContractTest::__pest_evaluable_it_initializes_the_outside_hours_statistics_service_before_building_the_transaction_count_summary_payload":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewOpenApiSpecTest::__pest_evaluable_it_documents_the_daily_report_overview_endpoint_and_reusable_schemas_in_openapi":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_builds_the_overview_payload_from_batched_repository_data_with_deterministic_tile_states":0.001,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_marks_overtime_unavailable_when_not_every_selected_department_can_be_mapped_to_workfeed":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_normalizes_department_id_input_from_csv_strings_and_nested_values":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_limits_overtime_counting_to_the_selected_reporting_range":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_does_not_count_negative_approved_overtime_when_a_saved_end_shortens_the_shift":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_ignores_late_unapproved_administrative_edits_when_calculating_overtime":0,"P\\Tests\\Unit\\DailyReports\\DepartmentDailyReportsOverviewRouteTest::__pest_evaluable_it_wires_the_overview_route_to_batched_repository_methods_and_overview_path":0,"P\\Tests\\Unit\\DailyReports\\DepartmentOutsideHoursStatisticsServiceTest::__pest_evaluable_it_counts_only_outside_hours_washes_and_flags_missing_opening_hours_without_counting_them_as_closed":0,"P\\Tests\\Unit\\DailyReports\\DepartmentOutsideHoursStatisticsServiceTest::__pest_evaluable_it_deduplicates_linked_washes_with_self_serve_first__then_xlvask__then_orders":0,"P\\Tests\\Unit\\DailyReports\\DepartmentOutsideHoursStatisticsServiceTest::__pest_evaluable_it_builds_daily_trend_points_with_per_day_missing_hours_diagnostics":0,"P\\Tests\\Unit\\Database\\DbObjectRedisNamespaceSafetyTest::__pest_evaluable_it_keeps_db_object_Redis_access_namespace_safe":0.001,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_allows_studio_lane_dynamic_image_previews_to_override_the_saved_image_id":0.001,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_accepts_ordered_dynamic_image_button_tokens_including_reset_start_and_zero":0.003,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_renders_machine_one_dynamic_image_steps_from_the_ordered_button_payload":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueDetailsSummaryBuilderTest::__pest_evaluable_it_uses_queued_job_payload_customer_context_before_result_data_exists":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_exposes_collected_invoice_queue_monitor_and_per_user_terminal_clear_routes":0.001,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceQueueRouteHardeningTest::__pest_evaluable_it_runs_collected_invoice_queue_batches_through_an_explicit_manual_endpoint":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicAuthTokenFallbackTest::__pest_evaluable_it_bounds_e_conomic_curl_calls_below_the_PHP_request_timeout":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersDiscountFallbackTest::__pest_evaluable_it_falls_back_to_a_later_customer_template_product_when_earlier_probes_fail_on_missing_currency_prices":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersDiscountFallbackTest::__pest_evaluable_it_returns_zero_when_every_customer_template_lookup_fails_due_to_missing_currency_prices":0,"P\\Tests\\Unit\\Invoicing\\EconomicCustomersDiscountFallbackTest::__pest_evaluable_it_rethrows_unrelated_discount_lookup_failures":0,"P\\Tests\\Unit\\Invoicing\\EconomicDraftCustomerOpenApiSpecTest::__pest_evaluable_it_documents_transaction_draft_customer_config_and_auth_runtime_fields_in_all_tracked_openapi_copies":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueCronEntrypointWiringTest::__pest_evaluable_it_wires_root_cron_entrypoint_to_the_full_cron_scheduler_with_queue_worker_tasks":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueOpenApiSpecTest::__pest_evaluable_it_documents_additive_collected_invoice_queue_pagination_metadata_and_retry_conflict_semantics":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_exposes_an_explicit_collected_invoice_transfer_queue_run_route_instead_of_ticking_read_endpoints":0.002,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueWorkerTickRouteTest::__pest_evaluable_it_keeps_order_transfer_queue_status_routes_read_only":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2BookedDepartment75DistributionTest::__pest_evaluable_it_assigns_classified_booked_department_75_amounts_to_fallback_when_no_monthly_basis_exists":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_falls_back_to_system_orders_for_fixed_pricing_using_the_configured_fallback_department":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_falls_back_to_system_orders_for_wash_subscriptions_using_the_configured_fallback_department":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_uses_the_configured_fallback_department_when_a_subscription_has_no_customer_department_basis":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_excludes_orphaned_customer_traces_from_fixed_pricing_and_customer_price_distributions":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceFallbackTest::__pest_evaluable_it_excludes_orphaned_customers_from_subscription_fallback_versions":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceOrderOverrideTest::__pest_evaluable_it_inherits_department_eligibility_when_no_order_override_is_set":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceOrderOverrideTest::__pest_evaluable_it_allows_an_order_level_include_override_to_overrule_department_exclusion":0,"P\\Tests\\Unit\\Invoicing\\EconomicV2DistributionServiceOrderOverrideTest::__pest_evaluable_it_allows_an_order_level_exclude_override_to_overrule_department_inclusion":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_builds_deterministic_automatic_flag_fingerprints_and_interactive_price_message_parts":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_builds_interactive_message_parts_for_order_and_wash_certificate_warnings":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_includes_order_item_preview_context_for_required_order_field_warnings":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_allows_tank_cleaning_products_for_only_tank_cleaning_customers":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_does_not_flag_interior_wash_variants_as_historical_primary_product_mismatches":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_does_not_report_duplicate_primary_vehicle_products_from_duplicated_detector_rows_for_the_same_order_item":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_uses_attached_wash_certificate_documents_instead_of_safety_seal_text_for_certificate_presence":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_loads_wash_certificate_attachment_presence_from_order_attachment_content":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_uses_the_highest_customer_specific_discount_in_expected_price_breakdowns":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_uses_a_preloaded_e_conomic_global_discount_in_expected_price_breakdowns":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_does_not_report_a_price_mismatch_when_a_product_specific_discount_makes_the_expected_price_zero":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_preloads_and_caches_missing_e_conomic_discounts_before_price_mismatch_detection":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_seeds_order_item_preview_cache_from_period_rows":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_sorts_manual_flags_before_automatic_warnings_and_preserves_legacy_circle_indicators_without_flags":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_scopes_invoice_period_flags_to_the_customer_card_that_can_render_them":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_keeps_order_item_preview_context_compact_for_the_period_response":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_formats_stored_manual_flags_with_the_creating_superuser_display_name":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_validates_supported_manual_flag_fields_by_target_type":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_wires_invoice_period_flag_routes_with_explicit_list_create_and_update_permissions":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_uses_the_users_display__name_column_in_detector_queries":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_aggregates_customer_price_overrides_by_customer_number_for_price_mismatch_detection":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_guards_optional_customer_vehicle_deleted__at_filtering_behind_a_column_check":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_limits_historical_primary_product_lookup_to_current_period_registrations":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_provides_a_batched_plain_row_transaction_query_for_invoicing_period_responses":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingOrdersCalculationsHardeningTest::__pest_evaluable_it_adds_guarded_composite_indexes_for_invoicing_period_lookups":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_blocks_invoicing_when_all_actionable_transactions_are_backed_by_valid_e_conomic_drafts":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_keeps_invoicing_available_when_valid_drafts_only_cover_part_of_the_actionable_work":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_excludes_errored__booked__deleted__and_missing_external_id_invoice_collections_at_query_time":0.002,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_still_checks_valid_drafts_when_the_collection_table_has_no_deleted_marker_column":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_blocks_fixed_pricing_and_subscription_customer_level_work_when_a_relevant_valid_draft_exists":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodDraftOverlayTest::__pest_evaluable_it_keeps_queue_blocking_ahead_of_the_draft_label_when_all_work_is_covered_by_queue_or_draft_state":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_detects_paginated_period_mode_only_when_pagination_parameters_are_present":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_normalizes_period_pagination_options_and_clamps_invalid_page_and_limit_values":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_slices_only_the_active_period_view_and_keeps_exact_full_result_type_counts":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_returns_the_entire_active_period_view_when_the_limit_is_all":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_searches_customer_fields_and_order_fields_at_the_customer_card_level":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_applies_requires_action_and_booked_visibility_filters_before_counting_and_slicing":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_normalizes_targeted_customer_number_filters_from_comma_separated_or_repeated_values":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodQueueOverlayTest::__pest_evaluable_it_filters_period_customer_number_candidates_to_targeted_customers_only":0,"P\\Tests\\Unit\\MotorApi\\MotorApiCachedResultTest::__pest_evaluable_it_only_writes_cached_MotorAPI_metadata_when_a_response_object_exists":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_attaches_and_emails_a_wash_certificate_when_a_booking_is_already_linked_to_a_pos_order_without_one":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_does_not_create_or_email_a_duplicate_wash_certificate_when_a_linked_pos_order_already_has_one":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_keeps_standalone_booking_completion_behavior_unchanged_for_wash_certificates":0,"P\\Tests\\Unit\\Orders\\OrdersAutoWashCertificateCompletionTest::__pest_evaluable_it_auto_attaches_a_wash_certificate_on_order_completion_when_a_wash_certificate_item_is_present":0,"P\\Tests\\Unit\\Orders\\OrdersAutoWashCertificateCompletionTest::__pest_evaluable_it_keeps_order_completion_idempotent_when_a_wash_certificate_is_already_attached":0,"P\\Tests\\Unit\\Orders\\OrdersAutoWashCertificateCompletionTest::__pest_evaluable_it_allows_blank_safety_seal_values_when_auto_attaching_a_wash_certificate_on_completion":0,"P\\Tests\\Unit\\Orders\\OrdersIncludeInInvoiceOverrideTest::__pest_evaluable_it_lets_the_order_level_override_include_an_otherwise_excluded_order":0,"P\\Tests\\Unit\\Orders\\OrdersIncludeInInvoiceOverrideTest::__pest_evaluable_it_lets_the_order_level_override_exclude_an_otherwise_included_order":0,"P\\Tests\\Unit\\Orders\\OrdersIncludeInInvoiceOverrideTest::__pest_evaluable_it_falls_back_to_the_department_invoicing_rule_when_the_override_is_null":0,"P\\Tests\\Unit\\Orders\\OrdersIncludeInInvoiceOverrideTest::__pest_evaluable_it_serializes_both_raw_and_effective_include__in__invoice_values":0,"P\\Tests\\Unit\\Orders\\OrdersInputNormalizerTest::__pest_evaluable_it_normalizes_sql_and_datetime_local_created__at_values":0,"P\\Tests\\Unit\\Orders\\OrdersInputNormalizerTest::__pest_evaluable_it_rejects_invalid_created__at_values":0,"P\\Tests\\Unit\\Orders\\OrdersInputNormalizerTest::__pest_evaluable_it_normalizes_include__in__invoice_tri_state_inputs":0,"P\\Tests\\Unit\\Orders\\OrdersInputNormalizerTest::__pest_evaluable_it_rejects_invalid_include__in__invoice_values":0,"P\\Tests\\Unit\\Orders\\OrdersRouteSettingsUpdateWiringTest::__pest_evaluable_it_wires_order_create_and_update_routes_through_the_settings_normalizers":0,"P\\Tests\\Unit\\Orders\\OrdersRouteSettingsUpdateWiringTest::__pest_evaluable_it_keeps_line_item_invoice_filtering_in_the_order_net_amount_calculation":0,"P\\Tests\\Unit\\Orders\\OrdersRouteStripePaymentIntentLifecycleWiringTest::__pest_evaluable_it_wires_mobile_stripe_payment_intent_routes_to_normalized_lifecycle_handling":0.001,"P\\Tests\\Unit\\Orders\\StripePaymentIntentsPersistenceWiringTest::__pest_evaluable_it_wires_stripe_payment_intent_persistence_to_prune_duplicates_and_clear_reader_state_safely":0,"P\\Tests\\Unit\\Redis\\RedisAtomicReservationTest::__pest_evaluable_it_does_not_send_empty_mget_commands_to_redis":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_generates_MinIO_replica_compose_templates_without_embedding_secrets":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_computes_MinIO_free_space_and_catch_up_math_safely":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_wires_MinIO_replication_through_routes_and_bootstrap_snapshots":0.003,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_nested_v2_ALL_and_ANY_expression_trees_with_trace_output":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_v2_if__else_if__and_else_condition_branches_in_order":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_evaluates_v2_case_expressions_against_question_values":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConditionEvaluatorTest::__pest_evaluable_it_returns_false_and_traces_v2_condition_expression_cycles":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_fails_validation_when_nested_conditions_form_cycles":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_migrates_legacy_AND_and_OR_rules_into_grouped_v2_condition_expressions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_repairs_legacy_defaulted_always_task_gates_during_v2_normalization":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_does_not_let_legacy_defaulted_always_task_gates_bypass_validation":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_rejects_unsupported_legacy_task_target_rules_after_migration":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_validates_v2_expressions_for_empty_used_conditions__missing_refs__invalid_operators__and_cycles":0,"P\\Tests\\Unit\\Selfserve\\SelfserveConfigVersioningTest::__pest_evaluable_it_validates_nested_v2_branch_and_case_expressions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveInProgressWashAccessTest::__pest_evaluable_it_keeps_own_in_progress_self_serve_wash_details_visible_to_the_customer":0,"P\\Tests\\Unit\\Selfserve\\SelfserveInProgressWashAccessTest::__pest_evaluable_it_redacts_another_customers_in_progress_wash_details_during_customer_lane_polling":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_the_physical_machine_ON_signal_was_recorded__then_turns_off_cleaner_and_machine_relays":0.012,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_skips_vehicle_type_product_add_when_no_physical_machine_ON_signal_was_recorded_and_only_disables_configured_relays":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_does_not_use_selector_relay_online_status_as_machine_wash_billing_evidence":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_continues_STOP_when_exit_relay_dispatch_times_out_ambiguously":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_still_fails_STOP_for_non_timeout_exit_relay_errors":0,"P\\Tests\\Unit\\Selfserve\\SelfserveMachineSignalTest::__pest_evaluable_it_normalizes_Shelly_input_toggle_ON_events_as_machine_start_signals":0,"P\\Tests\\Unit\\Selfserve\\SelfserveMachineSignalTest::__pest_evaluable_it_normalizes_Shelly_switch_ON_events_and_nested_status_payloads":0,"P\\Tests\\Unit\\Selfserve\\SelfserveMachineSignalTest::__pest_evaluable_it_recognizes_Shelly_OFF_events_but_does_not_treat_them_as_billable_machine_starts":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_local_edge_gateway_machine_ON_signal_monitor_endpoints":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_lane_level_self_serve_toggles_through_lane_APIs__guest_payloads__and_edge_workspace_readiness":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_returns_authoritative_allowed_service_state_from_self_serve_session_summaries":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_filters_machine_button_tasks_out_of_self_serve_snapshots_when_MACHINE_is_not_allowed":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_blocks_new_self_serve_eligibility_and_session_sync_for_disabled_lanes":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_adds_lane_level_self_serve_enablement_for_existing_department_lanes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_creates_canvas_only_self_serve_studio_layout_storage":0,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_uses_mysql_safe_identifiers_for_self_serve_studio_virtual_hardware_storage":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_serializes_configurable_studio_actions_with_event__gate__scope__and_ordering_edges":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_validates_action_configuration_and_keeps_warnings_non_blocking":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_serializes_v2_condition_expressions_without_standalone_rule_nodes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_serializes_branch_and_case_condition_expression_dependencies":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_keeps_runtime_on_published_v2_configs_and_leaves_draft_JSON_as_the_studio_edit_surface":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_surfaces_task_attachments_in_studio_graph__simulator__and_flow_responses":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_exposes_dynamic_images_and_referenced_machine_types_as_studio_lookup_choices":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_keeps_lane_management_fields_on_lane_scope_nodes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_routes_studio_lane_graph_operations_through_department__lanes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_projects_visible_question_answer_paths_into_grouped_task_service_and_signal_outcomes":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_truncates_path_outcome_projection_when_the_state_cap_is_reached":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_returns_complete_terminal_path_results_for_wide_question_trees_and_reports_progress":0.364,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_generates_and_merges_virtual_hardware_as_studio_only_relay_coverage":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_renders_virtual_gateway_nodes_and_task_service_edges_in_the_studio_graph":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_inserts_configured_action_signals_into_the_simulator_timeline_in_runtime_order":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_simulates_lane_scoped_wash_start_actions_for_property_gates_and_lane_entrance_ports":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_adds_ordered_simulator_signal_timeline_rows_for_virtual_hardware_dry_runs":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveWashFlowMachineAllowedWiringTest::__pest_evaluable_it_infers_legacy_defaulted_always_task_gates_from_condition__id_at_runtime":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashSessionStateTest::__pest_evaluable_it_treats_terminal_self_serve_wash_session_statuses_as_closed":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashSessionStateTest::__pest_evaluable_it_freezes_elapsed_self_serve_wash_minutes_at_completion_time":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_exposes_chauffeur_management_endpoints_on_the_subusers_route":0.001,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_includes_grant_management_fields_in_the_subusers_payload_builder":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_links_grant_disable_operations_to_SUBUSERS__DELETE_for_own_customer_managers":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_prevents_own_customer_managers_from_editing_driver_owned_account_profiles":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_only_allows_invite_resend_while_setup_is_still_pending":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusOpenApiSpecTest::__pest_evaluable_it_documents_the_superuser_system_status_snapshot_endpoint_in_openapi":0.001,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusOpenApiSpecTest::__pest_evaluable_it_defines_the_reusable_system_status_schemas_and_enums":0.001,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusRouteWiringTest::__pest_evaluable_it_registers_the_aggregated_superuser_system_status_endpoint_and_permission":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusRouteWiringTest::__pest_evaluable_it_keeps_the_legacy_database_status_endpoint_wired_through_the_shared_snapshot_service":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reduces_overall_status_using_down_and_degraded_precedence":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_runtime_usage_percentages_consistently":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reuses_cached_module_probes_only_when_the_ttl_is_still_valid_and_force_is_false":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"success\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"unauthorized\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"forbidden\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"rate limited\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"server error\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_authenticated_http_probe_responses_conservatively with data set \"dataset \"no response\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_classifies_transport_errors_as_down":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_normalizes_and_deduplicates_warning_entries_for_snapshots":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_interprets_recaptcha_probe_payloads_safely with data set \"dataset \"dummy token rejected but credentials valid\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_interprets_recaptcha_probe_payloads_safely with data set \"dataset \"invalid secret is down\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_interprets_recaptcha_probe_payloads_safely with data set \"dataset \"unexpected validation errors degrade\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"recaptcha\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"email\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"motorapi\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"fxratesapi\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"weatherapi\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"workfeed\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"gatewayapi\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"xlvask\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"limble\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"license plate recognizer\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_the_expected_http_probe_requests_for_newly_supported_modules with data set \"dataset \"bird\"\"":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_uses_runtime_economic_credentials_for_the_economic_probe":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_returns_down_without_attempting_economic_http_calls_when_runtime_credentials_are_missing":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reports_backup_probe_failures_from_local_validation":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_returns_configured_for_shelly_when_no_known_device_id_is_available_for_probing":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_builds_an_authenticated_shelly_status_probe_when_a_known_device_id_exists":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_validates_selfserve_schema_and_minute_product_configuration":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reports_invalid_selfserve_minute_configuration_before_touching_the_schema":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_reports_missing_selfserve_minute_products":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_surfaces_selfserve_bootstrap_failures":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_adds_localization_metadata_for_disabled_and_missing_config_modules":0,"P\\Tests\\Unit\\SystemStatus\\SuperuserSystemStatusServiceTest::__pest_evaluable_it_marks_newly_supported_modules_as_probe_backed_and_leaves_only_truly_unsupported_modules_as_configuration_only":0.001,"P\\Tests\\Unit\\SystemStatus\\SystemSessionActivityTrackerTest::__pest_evaluable_it_detects_device_types_from_common_user_agents":0,"P\\Tests\\Unit\\SystemStatus\\SystemSessionActivityTrackerTest::__pest_evaluable_it_treats_recent_sessions_as_active_within_the_configured_activity_window":0,"P\\Tests\\Unit\\SystemStatus\\SystemSessionActivityTrackerTest::__pest_evaluable_it_converts_database_utc_datetimes_into_timezone_aware_iso_strings":0,"P\\Tests\\Unit\\SystemStatus\\SystemSessionActivityTrackerTest::__pest_evaluable_it_treats_timezone_aware_iso_timestamps_as_active_using_absolute_time":0,"P\\Tests\\Unit\\Tooling\\LegacyTestInventoryTest::__pest_evaluable_it_keeps_every_legacy_PHP_test_accounted_for_in_the_manifest":0.002,"P\\Tests\\Unit\\Tooling\\MySqlSchemaCompatibilityTest::__pest_evaluable_it_keeps_schema_bootstrap_SQL_compatible_with_the_MySQL_runner":0.025,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_allows_callers_to_resolve_customer_names_without_e_conomic_fallback":0.001,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_returns_an_empty_customer_name_map_without_touching_cache_for_empty_input":0,"P\\Tests\\Unit\\Users\\UsersCustomerNamesCacheTest::__pest_evaluable_it_returns_no_rows_for_empty_array_field_filters":0,"P\\Tests\\Unit\\Users\\UsersRedisNamespaceSafetyTest::__pest_evaluable_it_keeps_users_Redis_access_namespace_safe":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherCacheRuntimeBehaviorTest::__pest_evaluable_it_builds_department_weather_preload_targets_in_cli_without_a_request_uri":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherPreloadCronWiringTest::__pest_evaluable_it_registers_and_implements_cron_warming_for_workfeed_employee_name_cache":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_aggregates_multi_department_slot_statuses_using_worst_severity_when_any_department_is_unhealthy":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_aggregates_all_unhealthy_multi_department_slot_statuses_as_unhealthy":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_returns_unknown_when_aggregated_multi_department_slot_targets_are_missing":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_returns_unknown_when_aggregated_multi_department_slot_has_no_evaluable_hours":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherStatusTargetsTest::__pest_evaluable_it_returns_unknown_when_aggregated_multi_department_slot_has_not_started_yet":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherTargetsRouteWiringTest::__pest_evaluable_it_registers_department_weather_hour_details_route_with_weather_read_and_department_access_checks":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_calculates_weather_hour_contributions_grouped_per_employee_for_a_slot":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_calculates_weather_hour_contributions_for_canonical_nested_workfeed_employee_schema":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_extracts_weather_employee_identity_from_supported_shift_payload_shapes":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_prefers_canonical_workfeed_employee_schema_fields_over_generic_employee_names":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_does_not_use_workfeed_schema_name_fields_as_employee_ids":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_returns_a_null_employee_name_when_no_workfeed_employee_name_is_available":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_resolves_missing_workfeed_employee_names_from_the_employees_endpoint":0.001,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_filters_employee_hour_rows_that_cannot_be_resolved_to_a_workfeed_schema_name":0,"P\\Tests\\Unit\\Workfeed\\DepartmentWeatherWorkfeedHoursTest::__pest_evaluable_it_resolves_employee_display_name_from_cache_when_shift_payload_lacks_a_name":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_formats_workfeed_employee_display_names_from_the_documented_firstname_lastname_schema":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_prefers_workfeed_schema_names_over_generic_display_name_fields":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_falls_back_to_legacy_display_name_fields_when_schema_names_are_absent":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_ignores_placeholder_workfeed_display_names":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedEmployeeNameFormatterTest::__pest_evaluable_it_ignores_employee_id_placeholder_display_names_when_the_id_is_known":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_normalizes_registrations_for_XL_Vask_automation_signatures":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_builds_stable_XL_Vask_automation_item_signatures":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_normalizes_persisted_XL_Vask_usage_log_rows_before_helper_hydration":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_builds_stable_OpenAI_cache_keys_for_identical_automation_input":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_changes_OpenAI_cache_keys_when_automation_eligibility_input_changes":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_declares_a_persistent_OpenAI_cache_table_for_XL_Vask_automation":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_declares_cached_amount_summary_columns_for_XL_Vask_usage_logs":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_scores_same_day_orders_with_matching_XL_Vask_products_and_extra_add_ons_as_attach_suggestions":0,"P\\Tests\\Unit\\XLVask\\XLVaskAutomationServiceTest::__pest_evaluable_it_does_not_score_an_order_with_only_the_primary_product_as_a_matching_add_on_attachment":0,"P\\Tests\\Unit\\XLVask\\XLVaskUsageLogHelperTest::__pest_evaluable_it_accepts_persisted_ignore_metadata_from_xlvask_usage_log_rows":0.001,"P\\Tests\\Unit\\XLVask\\XLVaskUsageLogHelperTest::__pest_evaluable_it_calculates_XL_Vask_amount_summaries_without_hydrating_order_item_previews":0,"P\\Tests\\Unit\\XLVask\\XLVaskUsageRouteContractTest::__pest_evaluable_it_exposes_direct_linked_order_metadata_on_XL_Vask_usage_order_rows":0.001,"P\\Tests\\Unit\\XLVask\\XLVaskUsageRouteContractTest::__pest_evaluable_it_returns_cached_amount_summaries_on_XL_Vask_usage_order_rows_without_widening_the_usage_log_object_payload":0,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_counts_complaint_rows_by_department_and_created__at_reporting_range":0.284,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_updates_and_deletes_complaint_rows":0.005,"P\\Tests\\Integration\\DailyReports\\DepartmentDailyReportComplaintsIntegrationTest::__pest_evaluable_it_parses_created__by__name_from_the_users_table":0.005,"P\\Tests\\Integration\\DailyReports\\DepartmentOutsideHoursStatisticsServiceIntegrationTest::__pest_evaluable_it_integrates_orders__xlvask__and_self_serve_into_one_outside_hours_summary_with_missing_hours_diagnostics":0.016,"P\\Tests\\Integration\\Invoicing\\EconomicTransferQueueIntegrationTest::__pest_evaluable_it_processes_only_collected_invoice_jobs_and_respects_the_manual_batch_limit":0.014,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_the_configured_database_in_integration_mode":0,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_redis_in_integration_mode_when_configured":0,"P\\Tests\\Integration\\SystemStatus\\SuperuserSystemStatusInfrastructureProbeTest::__pest_evaluable_it_can_probe_minio_in_integration_mode_when_configured":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_redacts_sensitive_release_timeline_payload_fields_recursively":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_verifies_GitHub_sha256_webhook_signatures":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_normalizes_GitHub_repository_identifiers_for_private_repository_access_checks":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_defines_release_manager_schema__routes__permissions__and_system_status_integration_hooks":0.004,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_summarizes_failed_deployments_and_blocks_promotion_until_a_deployment_succeeds":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_selected_Coolify_project_and_resolves_server_UUID_from_the_instance_default":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_supports_isolated_stack_mode_and_names_new_Coolify_services_explicitly":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_Coolify_service_payloads_from_raw_compose_without_a_service_type":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_normalizes_Coolify_API_base_URLs_to_the_v1_API_root":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_parses_generated_env_files_for_Coolify_service_env_bulk_updates":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_prefers_public_Coolify_server_hosts_over_Docker_local_addresses":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_blocks_planned_downtime_operations_against_active_replication_primaries":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_allows_failed_Coolify_replica_targets_to_be_removed_after_the_service_disappears":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_retries_Coolify_maintenance_while_linked_replication_provisioning_is_still_incomplete":0.029,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_plans_Hetzner_load_balancer_target_and_service_drift_without_mutating_state":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_does_not_plan_removal_of_the_last_Hetzner_load_balancer_target":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_plans_removal_only_for_disabled_or_deleted_Hetzner_load_balancer_targets":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_defines_Coolify_schema__route_permissions__and_replication_integration_hooks":0.011,"P\\Tests\\Unit\\ErrorReports\\ErrorReportTest::__pest_evaluable_it_redacts_sensitive_error_report_payload_fields_recursively":0,"P\\Tests\\Unit\\ErrorReports\\ErrorReportTest::__pest_evaluable_it_validates_supported_screenshot_data_uris":0,"P\\Tests\\Unit\\ErrorReports\\ErrorReportTest::__pest_evaluable_it_defines_error_report_schema__routes__permissions__storage__and_OpenAPI_docs":0.001,"P\\Tests\\Unit\\Http\\ResponseRequestParametersTest::__pest_evaluable_it_reads_JSON_payloads_for_DELETE_request_parameter_arrays":0,"P\\Tests\\Unit\\Http\\ResponseRequestParametersTest::__pest_evaluable_it_keeps_DELETE_query_parameters_when_no_JSON_body_is_present":0,"P\\Tests\\Unit\\Infrastructure\\CorsReleaseHeadersTest::__pest_evaluable_it_allows_release_telemetry_headers_at_PHP_served_CORS_entry_points":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_uses_the_linked_pos_order_wash_certificate_item_added_during_mobile_completion":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_normalizes_failover_config_defaults_and_per_kind_enablement":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_requires_strict_fresh_100_percent_replica_status_for_candidates":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_selects_the_freshest_eligible_replica_for_failover":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_promotes_enabled_startup_dependencies_from_snapshot_in_dependency_order":0.001,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_does_not_promote_a_disabled_dependency_during_startup_failover":0,"P\\Tests\\Unit\\Replication\\ReplicaFailoverManagerTest::__pest_evaluable_it_wires_the_failover_module_config_endpoint_and_promotion_paths":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_can_embed_primary_admin_credentials_in_generated_MariaDB_replica_env_files":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_operational_and_derived_tables_schema_only_during_MariaDB_seeding_and_replication":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_supports_metadata_only_replication_host_renames":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_keeps_MinIO_backup_replicas_bounded_to_the_recent_backup_window":0.004,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_prefills_MinIO_replica_compose_primary_values_from_current_config_when_available":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_allows_the_MinIO_client_binary_to_be_configured_explicitly":0,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_supports_MinIO_client_runtime_fallback_configuration":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_extracts_host_specific_MariaDB_replication_account_denials":0.001,"P\\Tests\\Unit\\Replication\\ReplicationManagerStatusTest::__pest_evaluable_it_identifies_stopped_database_replication_threads_as_a_restartable_status":0,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_returns_no_plate_LPR_results_without_a_failed_HTTP_status":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_does_not_invent_GHCR_images_for_Coolify_service_payloads":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_release_branch_services_out_of_the_production_Coolify_environment_except_beta":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_Coolify_GitHub_App_application_payloads_so_pulls_use_the_app_token":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_does_not_treat_an_existing_Coolify_service_as_an_application_just_because_a_GitHub_App_UUID_is_stored":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_can_use_the_Coolify_instance_default_GitHub_App_when_source_targets_do_not_store_it_yet":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_updates_existing_frontend_Coolify_applications_away_from_legacy_Nixpacks_detection":0,"P\\Tests\\Unit\\Auth\\EconomicCreateCustomerResponseTest::__pest_evaluable_it_adds_supported_CVR_company_fields_to_the_e_conomic_customer_payload":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_release_channel_runtime_availability_independent_from_channel_URLs":0.007,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_chooses_a_requested_runtime_channel_only_when_it_is_available_to_the_principal":0.199,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_normalizes_release_assignment_subject_suggestions_without_leaking_private_fields":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_GitHub_commit_timestamps_in_public_release_manager_commit_payloads":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_requires_non_default_release_channel_runtime_URLs_and_preserves_load_balancer_paths":0.002,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_exposes_release_version_git_commit_metadata_for_runtime_channel_cards":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_builds_gateway_API_auto_provision_context_for_connected_Coolify_servers":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_adds_explicit_Coolify_application_route_labels_for_gateway_API_domains":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_builds_explicit_Coolify_application_route_labels_for_release_API_targets":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_self_contained_Coolify_API_Dockerfile_for_API_applications":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_isolates_and_restores_Hetzner_load_balancer_IP_targets_for_gateway_certificate_bootstrap":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_requires_gateway_ping_probes_to_return_the_API_ping_contract":0,"P\\Tests\\Unit\\Tooling\\ComposerEntrypointTest::__pest_evaluable_it_checks_PSR_HTTP_message_interfaces_before_trusting_a_Composer_vendor_tree":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_marks_a_channel_ready_when_all_release_services_are_healthy":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_reports_non_default_channels_missing_bundles__versions__and_URLs_as_blocking_missing_values":0.024,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_surfaces_failed_latest_deployments_as_critical_promotion_blockers":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_flags_isolated_stacks_that_are_missing_database_Redis_and_MinIO_services":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_maps_degraded_Coolify_targets_and_reconcile_failures_to_release_service_issues":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_plans_Hetzner_load_balancer_service_health_check_drift_updates":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_returns_structured_errors_for_failed_gateway_certificate_bootstrap_and_verification":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_captures_release_request_context_from_headers_and_runtime_query_parameters":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_normalizes_channel_prefixed_API_ingress_paths_before_route_dispatch":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_creates_frontend_Coolify_GitHub_App_application_payloads_with_the_release_Dockerfile":0.001,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_builds_gateway_frontend_auto_provision_context_with_the_release_Dockerfile":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_allows_explicit_runtime_selection_of_any_enabled_release_channel":0.289,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_chooses_requested_runtime_channels_from_available_channels_or_enabled_channel_slugs":0,"P\\Tests\\Unit\\Coolify\\CoolifyManagerTest::__pest_evaluable_it_normalizes_gateway_probe_paths_for_release_gateway_health_checks":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_resolves_release_deployment_endpoints_from_manual_overrides__URLs__health_checks__and_gateway_defaults":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_does_not_report_frontend_or_API_URLs_missing_when_target_auto_endpoints_are_resolvable":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_offers_a_release_bundle_action_when_exactly_one_deployed_bundle_is_eligible":0.008,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_offers_application_target_preparation_for_path_routed_Coolify_failures":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_maps_the_public_master_API_prefix_to_the_stable_release_channel":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_master_as_the_public_route_slug_for_the_stable_release_channel":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_does_not_block_channels_on_unhealthy_data_targets_when_data_services_are_production_shared":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_ignores_missing_legacy_bundles_but_still_blocks_on_missing_versions_and_URLs":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_marks_a_branch_based_channel_ready_without_a_release_bundle_when_app_versions_and_URLs_exist":0,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_does_not_surface_legacy_release_bundle_actions_as_readiness_blockers":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_adds_exact_hidden_question__skipped_action__signal__and_button_decision_causes":0,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_rejects_standalone_order_booking_completion_outside_POS":5.621,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_allows_linked_POS_order_booking_completion_for_mobile_POS_compatibility":4.121,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_accepts_numeric_safety_seal_strings_when_completing_a_linked_POS_order_booking":4.366,"P\\Tests\\Api\\OrderBookingsCompletionApiTest::__pest_evaluable_it_disables_the_legacy_complete_wash_without_certificate_route":1.122,"P\\Tests\\Api\\OrderBookingsUpdateApiTest::__pest_evaluable_it_detaches_an_order_booking_and_clears_the_matching_order_link":5.559,"P\\Tests\\Api\\OrderBookingsUpdateApiTest::__pest_evaluable_it_keeps_the_linked_order_when_order__id_is_omitted_from_an_order_booking_update":5.22,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_accepts_ordered_dynamic_image_button_tokens_including_program_picker_reset_start_and_zero":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_adds_program_picker_before_mapped_machine_buttons_in_simulator_debug_decisions":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_verifies_CI_release_gate_bearer_tokens_from_dedicated_release_credentials":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_only_chooses_requested_runtime_channels_from_channels_available_to_the_principal":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_ignores_explicit_runtime_selection_for_channels_outside_the_principal_channel_set":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_auto_prepares_path_routed_release_targets_for_Coolify_application_creation":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_offers_application_target_preparation_for_missing_Coolify_service_creation_failures":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_builds_API_Coolify_runtime_environment_from_allowed_process_variables":0.001,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_normalizes_URL_like_CORS_entries_to_origins":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_merges_required_release_and_existing_frontend_origins_into_configured_CORS":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_builds_credential_safe_normal_CORS_response_headers_for_allowed_origins":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_builds_preflight_CORS_response_headers_for_api_v2_release_URLs":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_rejects_unknown_CORS_origins":0,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_reflects_the_request_origin_for_wildcard_CORS_instead_of_sending_credentialed_wildcard_headers":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_allows_customers_with_own_self_serve_permission_to_use_enabled_self_serve_lanes":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_blocks_customer_lane_mutations_without_own_self_serve_permission":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_blocks_customer_lane_mutations_when_the_lane_is_not_operationally_enabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_allows_active_wash_operations_when_the_lane_runtime_belongs_to_the_customer":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_falls_back_to_active_department_sessions_for_customer_active_wash_operations":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_blocks_active_wash_operations_for_other_customers":0,"P\\Tests\\Unit\\Selfserve\\SelfservePropertyGatePermissionBypassTest::__pest_evaluable_it_does_not_bypass_property_gate_permissions_without_customer_self_serve_permission":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_keeps_active_wash_operations_available_if_a_lane_is_disabled_after_start":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_authentication_before_checking_in_progress_wash_permissions":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_reports_both_elevated_and_customer_self_serve_permissions_when_lane_polling_is_not_allowed":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_allows_customer_self_serve_permission_to_view_their_own_in_progress_wash_details":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_redacts_another_customers_in_progress_wash_from_customer_self_serve_lane_polling":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_beta_API_runtime_environment_on_production_database_target":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_treats_attach_existing_service_sets_without_data_target_ids_as_production_shared_ready":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_rejects_beta_release_bundles_that_resolve_to_isolated_cloned_or_fresh_data_services":0.01,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_detects_explicit_data_target_ids_so_beta_service_sets_can_stay_data_only":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_resolves_backend_commit_sha_from_API_runtime_environment_in_priority_order":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_injects_selected_API_commit_into_Coolify_runtime_env_unless_explicitly_set":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_allows_beta_production_service_bundles_only_when_data_services_stay_production_shared":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_keeps_release_branch_services_out_of_the_production_Coolify_environment":0.001,"P\\Tests\\Unit\\Release\\ReleaseManagerStatusOverviewTest::__pest_evaluable_it_marks_beta_ready_from_the_production_frontend_and_API_services":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_uses_program_picker_button_numbers_as_thumb_selectors_in_simulator_debug_decisions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_upserts_path_editor_answers_into_generated_condition_and_task_config_rows":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_marks_projected_path_confirmations_confirmed_or_stale_by_stable_signatures":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_creates_self_serve_studio_path_confirmation_storage":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_resolves_subuser_customer_names_without_external_lookups_during_list_requests":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_treats_null_path_confirmation_rows_as_an_empty_confirmation_set":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_applies_default_caps_for_wide_question_trees_and_reports_progress":0.062,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_dashboard_lane_machine_status_and_Dognvask_toggle_endpoints":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_classifies_self_serve_lane_command_route_authorization_by_customer_product_behavior":0.004,"P\\Tests\\Unit\\Selfserve\\EdgeBrokerClientConfigTest::__pest_evaluable_it_uses_default_broker_url_but_requires_explicit_shared_secret_configuration":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeBrokerClientConfigTest::__pest_evaluable_it_fails_closed_when_no_broker_shared_secret_is_configured":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_denies_customer_self_serve_command_fallback_when_the_self_serve_module_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_returns_deterministic_forbidden_permissions_when_disabled_module_blocks_customer_self_serve_command_fallback":0,"P\\Tests\\Unit\\Selfserve\\SelfserveCustomerLaneAccessTest::__pest_evaluable_it_continues_allowing_operator_self_serve_commands_when_the_self_serve_module_is_disabled":0,"P\\Tests\\Unit\\Selfserve\\SelfserveEligibilityLaneAccessTest::__pest_evaluable_it_authorizes_customer_eligibility_preview_lanes_before_returning_task_attachments":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceModeBillingTest::__pest_evaluable_it_creates_self_serve_invoice_orders_for_the_actual_lane_customer_when_a_draft_customer_is_configured":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneInvoiceModeBillingTest::__pest_evaluable_it_keeps_the_real_billing_customer_as_the_authoritative_order_customer_in_the_invoice_context":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLanePortControllerTest::__pest_evaluable_it_caps_excessive_timer_values_when_opening_lane_gates":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_hard_MACHINE_relay_helper_targets_the_configured_MACHINE_relay":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneRelayShellyBatchingTest::__pest_evaluable_it_blocks_setMachineRelayStatus_from_enabling_MACHINE_when_MACHINE_is_not_allowed":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartRaceLockWiringTest::__pest_evaluable_it_locks_and_marks_a_self_serve_start_occupied_before_opening_the_entrance_relay":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStartCleanerRelayWiringTest::__pest_evaluable_it_does_not_enable_cleaner_relay_before_deferred_start_relay_side_effects_are_checked":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioActionRunnerTest::__pest_evaluable_it_does_not_match_condition_gated_actions_when_condition_results_are_missing":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_always_dispatches_completion_relay_off_for_configured_machine_relays_without_a_status_precheck":0,"P\\Tests\\Unit\\Selfserve\\ShellyRelayInventoryTest::__pest_evaluable_it_only_includes_local_IP_addresses_for_internal_relay_option_lookups":0.001,"P\\Tests\\Api\\SelfserveFixtureApiTest::__pest_evaluable_it_creates_self_serve_invoice_orders_for_the_lane_customer_with_draft_customer_and_driver_metadata_attached":0.283,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_allows_customer_self_serve_permission_to_execute_START_without_department_access_when_department_and_lane_are_enabled":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_customer_START_when_department_self_serve_is_disabled":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_customer_START_when_lane_self_serve_is_disabled":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_denies_a_customer_STOP_for_another_customers_active_lane":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_still_allows_elevated_operators_with_department_access_to_execute_lane_commands":0,"P\\Tests\\Api\\SelfserveLaneCommandApiTest::__pest_evaluable_it_keeps_operator_only_commands_elevated_only_for_customers_and_reports_command_permissions":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_authentication_before_checking_the_current_customers_active_self_serve_wash":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_requires_customer_self_serve_permission_before_checking_my_active_wash":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_returns_the_authenticated_customers_active_self_serve_wash_without_requiring_a_lane_id":0,"P\\Tests\\Api\\SelfserveLaneWashInProgressApiTest::__pest_evaluable_it_returns_404_when_the_authenticated_customer_has_no_active_self_serve_wash":0,"P\\Tests\\Unit\\Selfserve\\ModuleConfigVariableDatabaseConfigTest::__pest_evaluable_it_reads_debug_database_configuration_when_the_debug_target_is_selected":0,"P\\Tests\\Unit\\Selfserve\\ModuleConfigVariableDatabaseConfigTest::__pest_evaluable_it_keeps_live_database_configuration_as_the_default_target":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_allows_the_customer_self_serve_start_sequence_without_department_access":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_skips_cleaner__program_picker_and_machine_relay_side_effects_when_start_asks_to_defer_them":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_keeps_cleaner__program_picker_and_machine_relay_side_effects_in_order_for_normal_start_commands":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStopFlowTest::__pest_evaluable_it_adds_vehicle_type_product_on_STOP_when_the_physical_machine_ON_signal_was_recorded__after_turning_relays_off_before_exit":0.001,"P\\Tests\\Unit\\Selfserve\\SelfservePublishedConfigLaneWildcardTest::__pest_evaluable_it_applies_department_product_rows_with_lane_zero_to_all_lanes_in_published_v2_configs":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_derives_allowed_services_from_v2_session_task_snapshots_when_task_rows_are_not_legacy_records":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_sources_guest_lane_product_availability_from_the_published_v2_self_serve_config_before_legacy_tasks":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_widens_self_serve_task_descriptions_for_generated_workbook_instructions":0,"P\\Tests\\Unit\\Selfserve\\SelfserveSchemaBootstrapCompatibilityTest::__pest_evaluable_it_alters_legacy_bounded_description_columns_to_text":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_keeps_long_generated_task_descriptions_when_refreshing_vehicle_eligibility_snapshots":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_marks_the_active_customer_session_relay_enabled_after_machine_relay_enable":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_normalizes_app_specific_release_gate_auto_sync_metadata":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_requires_non_empty_release_gate_checks_before_auto_sync_can_proceed":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_injects_selected_frontend_commit_into_Coolify_runtime_env_for_manifest_builds":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_redacts_GitHub_access_metadata_from_public_release_versions":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_restricts_release_gate_fetches_to_Truckwash_release_hosts_and_relative_paths":0.001,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_does_not_create_an_active_wash_preview_session_from_read_only_eligibility_checks":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_derives_allowed_services_from_published_v2_config_task_snapshots_when_no_session_exists_yet":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_does_not_create_a_replacement_session_when_refreshing_a_completed_summary_with_vehicle_type":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_creates_a_durable_wash_session_from_customer_start_after_read_only_eligibility":0,"P\\Tests\\Api\\SelfserveCustomerStartApiTest::__pest_evaluable_it_refreshes_an_active_wash_summary_with_vehicle_type_without_a_namespace_error":0,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_persists_superuser_new_customer_notification_preferences_and_includes_them_in_session_payloads":0,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_requires_superuser_permission_before_saving_superuser_new_customer_notification_preferences":0,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_sends_new_customer_registration_notifications_only_to_opted_in_superusers":0,"P\\Tests\\Unit\\Invoicing\\EconomicTransferQueueAccessScopeTest::__pest_evaluable_it_scopes_economic_transfer_queue_route_reads_and_retries_to_the_current_user":0.001,"P\\Tests\\Unit\\Invoicing\\EconomicV2RouteAndVersioningHooksTest::__pest_evaluable_it_enforces_customer_or_department_context_before_building_v2_invoice_details_payload":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_normalizes_invoice_period_date_ranges_to_full_day_timestamps_before_cache_backed_reads":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_canonicalizes_invoice_period_redis_keys_for_bare_dates_and_normalized_API_timestamps":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_does_not_treat_subset_primary_vehicle_product_names_as_equivalent":0,"P\\Tests\\Unit\\Invoicing\\InvoicePeriodFlagServiceTest::__pest_evaluable_it_rebuilds_automatic_invoice_period_data_on_cache_misses_instead_of_hiding_warnings":0.001,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodRouteGuardsTest::__pest_evaluable_it_only_includes_invoice_period_flags_when_the_list_permission_is_granted":0.001,"P\\Tests\\Unit\\N8n\\N8nWebhookUrlValidationWiringTest::__pest_evaluable_it_restricts_absolute_webhook_URLs_to_configured_n8n_webhook_host":0.001,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_attaches_and_emails_a_wash_certificate_when_a_booking_is_already_linked_to_a_matching_pos_order_without_one":0,"P\\Tests\\Unit\\Orders\\OrderBookingsCompletionDedupTest::__pest_evaluable_it_rejects_wash_certificate_completion_when_the_linked_pos_order_belongs_to_another_booking_context":0,"P\\Tests\\Unit\\Replication\\SuperuserReplicationRouteWiringTest::__pest_evaluable_it_rejects_subuser_sessions_before_checking_replication_permissions":0.001,"P\\Tests\\Unit\\Search\\SystemSearchRouteBehaviorTest::__pest_evaluable_it_does_not_grant_global_users_search_through_narrow_id_and_name_lookup_permissions":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_passes_allowed_department_ids_into_lexical_execution_context":0,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_only_applies_indexed_department_filters_to_department_scoped_indexed_entities":0.001,"P\\Tests\\Unit\\Search\\SystemSearchServiceIntentFlowTest::__pest_evaluable_it_does_not_expand_associations_for_own_only_entity_types":0,"P\\Tests\\Unit\\Subusers\\SubuserGrantPermissionsTest::__pest_evaluable_it_keeps_default_subuser_grant_permissions_JSON_encodable":0,"P\\Tests\\Unit\\Subusers\\SubuserGrantPermissionsTest::__pest_evaluable_it_normalizes_stored_subuser_grant_permission_payloads":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_accepts_subuser_passwords_that_match_the_shared_policy":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"too short\"\"":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"missing uppercase\"\"":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"missing lowercase\"\"":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"missing number\"\"":0,"P\\Tests\\Unit\\Subusers\\SubuserPasswordPolicyTest::__pest_evaluable_it_rejects_subuser_passwords_that_do_not_match_the_shared_policy with data set \"dataset \"too long\"\"":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_scopes_superuser_invite_resend_to_a_selected_customer_grant":0,"P\\Tests\\Unit\\Subusers\\SubusersRouteManagementContractTest::__pest_evaluable_it_requires_own_subuser_permissions_for_classic_customer_users_in_managed_customer_scope":0,"P\\Tests\\Unit\\Workfeed\\WorkfeedClientConformanceTest::__pest_evaluable_it_only_trusts_documented_workfeed_api_hosts":0,"P\\Tests\\Unit\\XLVask\\XLVaskUsageRouteContractTest::__pest_evaluable_it_does_not_execute_XL_Vask_usage_automation_while_listing_usage_order_rows":0.001,"P\\Tests\\Unit\\Slack\\SlackConfigRouteWiringTest::__pest_evaluable_it_registers_Slack_module_config_endpoints_and_customer_registration_webhook_config":0.011,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_extracts_API_ping_commit_metadata_for_release_gate_verification":0,"P\\Tests\\Api\\UserNotificationsApiTest::__pest_evaluable_it_invalidates_cached_session_payloads_after_notification_preferences_change":0,"P\\Tests\\Unit\\Invoicing\\InvoicingPeriodPaginationTest::__pest_evaluable_it_filters_period_flag_tabs_using_active_customer_scoped_flag_counts":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_collects_previous_Coolify_application_UUIDs_for_stale_route_cleanup":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_uses_the_selected_deployment_commit_before_stale_Coolify_context_commits":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_forces_selected_API_commit_into_generated_Coolify_runtime_env_keys":0.001,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_deletes_only_generated_API_commit_env_rows_before_Coolify_application_env_updates":0,"P\\Tests\\Unit\\ReleaseManager\\ReleaseManagerTest::__pest_evaluable_it_waits_for_an_in_flight_automatic_sync_instead_of_passing_the_retry_immediately":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_syncs_only_the_program_picker_relay_when_start_asks_to_defer_machine_side_effects":0,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_turns_off_the_program_picker_on_deferred_start_when_the_frontend_selected_manual_wash":0,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_does_not_let_backend_machine_eligibility_override_a_frontend_manual_wash_selection":0,"P\\Tests\\Unit\\DynamicImages\\DepartmentLaneDynamicImageRouteTest::__pest_evaluable_it_uses_the_selfserve_dynamic_image_size_config_for_route_output_and_cache_keys":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSessionRaceWiringTest::__pest_evaluable_it_serializes_self_serve_session_synchronization_before_reading_or_creating_open_sessions":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveSessionRaceWiringTest::__pest_evaluable_it_closes_self_serve_wash_sessions_with_an_atomic_open_session_guard":0.001,"P\\Tests\\Unit\\Infrastructure\\CorsPolicyTest::__pest_evaluable_it_allows_the_fallback_Vite_localhost_dev_origin_used_after_port_5173_is_busy":0,"P\\Tests\\Api\\CollectedInvoiceMoveCustomerApiTest::__pest_evaluable_it_moves_a_collected_invoice_collection_and_all_attached_orders_to_another_customer":0,"P\\Tests\\Api\\CollectedInvoiceMoveCustomerApiTest::__pest_evaluable_it_rejects_moving_a_collection_that_already_has_an_external_invoice_reference":0,"P\\Tests\\Unit\\Invoicing\\CollectedInvoiceMoveCustomerRouteTest::__pest_evaluable_it_wires_collected_invoice_customer_moves_through_the_dedicated_route_and_permission":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_skips_relay_side_effects_when_start_asks_to_defer_machine_side_effects":0,"P\\Tests\\Unit\\Selfserve\\ShellyGlobalRateLimitWiringTest::__pest_evaluable_it_bounds_Shelly_cloud_HTTP_requests_with_curl_timeouts":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_only_syncs_program_picker_from_selected_service_when_start_asks_to_defer_machine_side_effects":0,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_returns_more_than_200_projected_path_cases_by_default":0.019,"P\\Tests\\Unit\\Selfserve\\SelfserveStudioGraphTest::__pest_evaluable_it_applies_the_default_state_cap_for_wide_question_trees_and_reports_progress":0.145,"P\\Tests\\Unit\\Auth\\PasswordResetTokenExpiryTest::__pest_evaluable_it_keeps_password_reset_tokens_valid_for_72_hours":0,"P\\Tests\\Unit\\Auth\\PasswordResetTokenExpiryTest::__pest_evaluable_it_looks_up_reset_tokens_using_the_database_72_hour_validity_window":0.002,"P\\Tests\\Unit\\Auth\\PasswordResetTokenExpiryTest::__pest_evaluable_it_uses_the_same_database_72_hour_window_for_the_selected_token_guard":0,"P\\Tests\\Unit\\Selfserve\\SelfserveWashCompletionRelayWiringTest::__pest_evaluable_it_normal_STOP_completion_skips_duplicate_completion_relay_cleanup_after_STOP_already_disabled_relays":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_does_not_infer_program_picker_enablement_from_machine_service_without_a_customer_machine_selection":0,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_keeps_normal_start_program_picker_off_when_the_customer_selected_manual_wash":0,"P\\Tests\\Unit\\Selfserve\\SelfserveProgramPickerWashTypeSelectionTest::__pest_evaluable_it_honors_a_frontend_machine_wash_selection_when_machine_service_is_selected":0,"P\\Tests\\Unit\\Infrastructure\\PhpFpmWorkerConfigTest::__pest_evaluable_it_configures_PHP_FPM_with_multiple_warm_request_workers":0.001,"P\\Tests\\Unit\\Infrastructure\\PhpFpmWorkerConfigTest::__pest_evaluable_it_copies_the_worker_pool_config_into_every_API_PHP_image":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_sends_raw_base64_to_Plate_Recognizer_with_fast_mode_enabled":0.004,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_keeps_already_raw_base64_upload_data_unchanged":0,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_does_not_store_scanner_images_before_LPR_recognition":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_sends_data_URI_images_to_Plate_Recognizer_as_multipart_bytes_with_fast_mode_enabled":0.002,"P\\Tests\\Unit\\Bookings\\OrderBookingCompletionConfirmationRouteTest::__pest_evaluable_it_wires_the_order_booking_completion_confirmation_resend_endpoint":0.001,"P\\Tests\\Unit\\Email\\FakeEmailDeliveriesTest::__pest_evaluable_it_syncs_fake_email_deliveries_written_by_another_process":0.001,"P\\Tests\\Unit\\Email\\NewCustomerEmailTemplateLegacyScriptTest::__pest_evaluable_it_renders_the_new_customer_welcome_template_without_unselected_user_access_or_leaked_output":0.015,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_parses_wash_mode_aliases_on_start_command_arguments":0,"P\\Tests\\Unit\\Selfserve\\SelfserveLaneStartEntranceTimeoutTest::__pest_evaluable_it_rejects_invalid_wash_types_on_start_command_arguments":0,"P\\Tests\\Unit\\Slack\\SlackCustomerRegistrationWebhookTest::__pest_evaluable_it_does_not_send_customer_registration_test_notifications_without_a_saved_webhook":0.001,"P\\Tests\\Unit\\Slack\\SlackCustomerRegistrationWebhookTest::__pest_evaluable_it_sends_customer_registration_test_notifications_to_the_saved_webhook":0.001,"P\\Tests\\Unit\\Slack\\SlackCustomerRegistrationWebhookTest::__pest_evaluable_it_reports_customer_registration_test_notification_failures_without_exposing_the_webhook":0,"P\\Tests\\Unit\\Storage\\MinioLocalTestStorageTest::__pest_evaluable_it_falls_back_to_local_test_storage_when_MinIO_config_values_are_empty":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_can_skip_config_object_setup_and_cache_runtime_config_for_scanner_requests":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_treats_false_runtime_config_values_as_disabled":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_can_point_Plate_Recognizer_calls_at_a_local_measurement_upstream":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_disables_curl_expect_continue_waits_for_large_multipart_uploads":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_sends_multipart_route_image_bytes_to_Plate_Recognizer_without_base64_wrapping":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_sends_multipart_route_upload_files_to_Plate_Recognizer_without_reading_bytes_into_PHP_memory":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_aborts_upstream_recognition_transfers_when_the_HTTP_client_disconnects":0,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_returns_low_confidence_LPR_results_without_a_failed_HTTP_status":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_shares_runtime_config_briefly_across_scanner_recognizer_instances":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_refreshes_the_shared_runtime_config_cache_after_the_short_scanner_ttl":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_reuses_and_resets_the_Plate_Reader_curl_handle_for_scanner_bursts":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_Redis_backed_runtime_config_cache_across_scanner_requests_when_available":0,"P\\Tests\\Api\\ModuleScannerLprApiTest::__pest_evaluable_it_accepts_multipart_scanner_images_and_forwards_them_to_Plate_Recognizer_as_a_temp_file_upload":0,"P\\Tests\\Api\\ModuleScannerLprApiTest::__pest_evaluable_it_rejects_scanner_LPR_requests_without_an_image_before_contacting_Plate_Recognizer":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_does_not_capture_outgoing_curl_headers_on_the_scanner_hot_path":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_reads_runtime_config_once_in_the_scanner_recognition_hot_path":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_bounds_Plate_Recognizer_scanner_uploads_with_conservative_curl_timeouts":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_a_short_exact_image_result_cache_before_calling_Plate_Recognizer":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_builds_stable_result_cache_keys_from_equivalent_image_bytes":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_keeps_multipart_upload_file_requests_off_the_result_cache_miss_path":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_records_Plate_Recognizer_processing_time_from_the_upstream_response":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_precomputed_Plate_Reader_config_strings_on_the_scanner_payload_hot_path":0.002,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_does_not_retain_raw_upstream_Plate_Recognizer_responses_in_compact_scanner_results":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_records_only_selected_curl_timing_fields_on_the_scanner_hot_path":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_uses_a_streamed_file_hash_for_multipart_upload_file_result_cache_keys":0.001,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_derives_local_scanner_route_timing_by_subtracting_upstream_wait":0.024,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_disables_tcp_write_coalescing_on_scanner_Plate_Recognizer_requests_when_curl_supports_it":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_does_not_hash_multipart_upload_temp_files_for_result_cache_misses":0.001,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_builds_stable_result_cache_keys_from_equivalent_in_memory_image_bytes":0,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_reads_raw_scanner_client_timing_metadata_from_request_headers":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_does_not_hash_raw_scanner_body_bytes_on_the_live_camera_upload_path":0.001,"P\\Tests\\Unit\\Scanner\\ModuleScannerRouteTest::__pest_evaluable_it_reads_raw_scanner_client_timing_metadata_from_request_query_parameters":0,"P\\Tests\\Unit\\Scanner\\LicensePlateRecognizerPayloadTest::__pest_evaluable_it_reuses_the_scanner_curl_disconnect_callback_across_recognizer_requests":0,"P\\Tests\\Unit\\Slack\\SlackInternalDepartmentIdsConfigTest::__pest_evaluable_it_normalizes_configured_Slack_internal_department_ids":0,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_queues_gateway_relay_batch_status_requests_through_the_manager":0.002,"P\\Tests\\Unit\\Selfserve\\GatewayShellyTransportTest::__pest_evaluable_it_queues_gateway_relay_batch_switch_requests_through_the_manager":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayMachineSignalBrokerTest::__pest_evaluable_it_wires_self_serve_machine_signals_through_the_broker_control_plane":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayAgentLoopResponsivenessTest::__pest_evaluable_it_services_broker_transport_before_replaying_queued_outbox_items":0.002,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayAgentLoopResponsivenessTest::__pest_evaluable_it_bounds_stale_outbox_replay_so_it_cannot_monopolize_the_gateway_loop":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayAgentLoopResponsivenessTest::__pest_evaluable_it_uses_a_short_control_plane_timeout_for_self_serve_machine_signals_before_queueing":0,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_wires_machine_wash_controls_into_self_serve_module_config":0.001,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_falls_back_to_edge_gateway_relay_bindings_for_lane_hardware_batches":0.002,"P\\Tests\\Unit\\Selfserve\\SelfserveRouteWiringTest::__pest_evaluable_it_applies_the_global_machine_wash_toggle_before_exposing_machine_tasks_or_services":0.003,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRelayExecutionTimerTest::__pest_evaluable_it_passes_direct_relay_switch_timers_through_the_LAN_worker_and_prefers_legacy_timers_for_Gen1_relays":0.112,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRelayExecutionTimerTest::__pest_evaluable_it_caps_batch_relay_switch_timers_and_sends_Gen3_relays_through_Shelly_RPC_first":0.143,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayRelayExecutionTimerTest::__pest_evaluable_it_keeps_PHP_edge_agent_relay_fallback_propagation_aligned_with_LAN_worker_timer_handling":0,"P\\Tests\\Api\\EdgeGatewayExpectedRelayStatesApiTest::__pest_evaluable_it_serves_whole_department_expected_relay_states_and_records_successful_physical_completion_only":0,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_lists_subusers_when_an_existing_grant_has_legacy_zero_permissions":0,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_enforces_the_password_policy_for_setup_without_rejecting_legacy_valid_passwords_at_login":0,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_returns_a_generic_error_for_invalid_subuser_credentials":0,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_requires_subuser_management_access_before_exposing_permission_nodes":0,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_rejects_customer_subuser_listing_without_own_scope_permission":0,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_replaces_older_setup_tokens_when_a_new_setup_token_is_generated":0,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_validates_setup_identifiers_before_setting_the_driver_password":0,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_lists_chauffeur_grants_across_customers_for_superusers":0,"P\\Tests\\Api\\SubusersApiTest::__pest_evaluable_it_lets_superusers_invite_chauffeurs_for_a_selected_customer":0,"P\\Tests\\Api\\AuthApiTest::__pest_evaluable_it_scopes_passkey_challenges_to_the_requested_principal_type":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_generated_edge_agent_build_output_before_router__mounted__and_baked_in_artifact_directories":0.001,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_prioritizes_EDGE__AGENT__ARTIFACT__DIR_before_generated_edge_agent_build_output":0,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_serves_a_manifest_with_hashes_for_the_resolved_artifacts":0.002,"P\\Tests\\Unit\\Selfserve\\EdgeGatewayArtifactLocatorTest::__pest_evaluable_it_normalizes_install_artifact_line_endings_for_shell_safe_streaming":0.001}} \ No newline at end of file diff --git a/services/nginx/app/modules/edgegateway/classes/edge_gateway_agent_artifact_locator.php b/services/nginx/app/modules/edgegateway/classes/edge_gateway_agent_artifact_locator.php index 21a8de68..c516fa15 100644 --- a/services/nginx/app/modules/edgegateway/classes/edge_gateway_agent_artifact_locator.php +++ b/services/nginx/app/modules/edgegateway/classes/edge_gateway_agent_artifact_locator.php @@ -6,6 +6,7 @@ use Exception; class edge_gateway_agent_artifact_locator { + private const EDGE_AGENT_BUILD_ARTIFACT_DIRECTORY = 'build/install'; private const ROUTER_ARTIFACT_DIRECTORY = 'resources/edge-gateway-agent'; private const DEFAULT_MOUNTED_ARTIFACT_DIRECTORY = '/services/edge-agent/php-agent'; private const DEFAULT_BAKED_ARTIFACT_DIRECTORY = '/opt/truckwash-edge-agent-artifacts'; @@ -28,6 +29,10 @@ class edge_gateway_agent_artifact_locator $candidateDirectories[] = self::normalizePath($configuredDirectory); } + foreach (self::edgeAgentBuildDirectories($basePath) as $directory) { + $candidateDirectories[] = $directory; + } + $candidateDirectories[] = self::routerArtifactDirectory($basePath); $mountedArtifactDirectory = $mountedArtifactDirectory ?? self::mountedArtifactDirectory(); @@ -40,9 +45,9 @@ class edge_gateway_agent_artifact_locator $candidateDirectories[] = self::normalizePath($bakedArtifactDirectory); } - $candidateDirectories[] = self::normalizePath(dirname($basePath, 3) . DIRECTORY_SEPARATOR . 'services' . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . 'php-agent'); - $candidateDirectories[] = self::normalizePath(dirname($basePath, 2) . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . 'php-agent'); - $candidateDirectories[] = self::normalizePath(dirname($basePath) . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . 'php-agent'); + foreach (self::legacyPhpAgentDirectories($basePath) as $directory) { + $candidateDirectories[] = $directory; + } $paths = []; foreach (array_values(array_unique($candidateDirectories)) as $directory) { @@ -102,6 +107,42 @@ class edge_gateway_agent_artifact_locator return self::normalizePath($basePath . DIRECTORY_SEPARATOR . self::ROUTER_ARTIFACT_DIRECTORY); } + /** + * @return array + */ + private static function edgeAgentBuildDirectories(string $basePath): array + { + $relative = str_replace('/', DIRECTORY_SEPARATOR, self::EDGE_AGENT_BUILD_ARTIFACT_DIRECTORY); + $directories = [ + dirname($basePath, 4) . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . $relative, + dirname($basePath, 3) . DIRECTORY_SEPARATOR . 'services' . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . $relative, + dirname($basePath, 2) . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . $relative, + dirname($basePath) . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . $relative, + ]; + + if (DIRECTORY_SEPARATOR === '/') { + array_unshift($directories, '/edge-agent/' . self::EDGE_AGENT_BUILD_ARTIFACT_DIRECTORY); + $directories[] = '/services/edge-agent/' . self::EDGE_AGENT_BUILD_ARTIFACT_DIRECTORY; + } + + return array_values(array_unique(array_map( + static fn(string $directory): string => self::normalizePath($directory), + $directories + ))); + } + + /** + * @return array + */ + private static function legacyPhpAgentDirectories(string $basePath): array + { + return [ + self::normalizePath(dirname($basePath, 3) . DIRECTORY_SEPARATOR . 'services' . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . 'php-agent'), + self::normalizePath(dirname($basePath, 2) . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . 'php-agent'), + self::normalizePath(dirname($basePath) . DIRECTORY_SEPARATOR . 'edge-agent' . DIRECTORY_SEPARATOR . 'php-agent'), + ]; + } + private static function mountedArtifactDirectory(): ?string { if (DIRECTORY_SEPARATOR !== '/') { diff --git a/services/nginx/app/modules/edgegateway/classes/edge_gateway_install_service.php b/services/nginx/app/modules/edgegateway/classes/edge_gateway_install_service.php index 81394b23..42277bfd 100644 --- a/services/nginx/app/modules/edgegateway/classes/edge_gateway_install_service.php +++ b/services/nginx/app/modules/edgegateway/classes/edge_gateway_install_service.php @@ -7,6 +7,7 @@ use Exception; class edge_gateway_install_service { private const ARTIFACTS = [ + 'manifest.json' => 'application/json; charset=utf-8', 'agent.php' => 'application/x-httpd-php; charset=utf-8', 'lan-worker.php' => 'application/x-httpd-php; charset=utf-8', 'auto-updater.php' => 'application/x-httpd-php; charset=utf-8', @@ -42,6 +43,10 @@ class edge_gateway_install_service */ public function readArtifact(string $fileName): string { + if ($fileName === 'manifest.json') { + return $this->buildManifest(); + } + $path = $this->artifactPath($fileName); $contents = file_get_contents($path); if ($contents === false) { @@ -66,13 +71,48 @@ class edge_gateway_install_service */ public function artifactPath(string $fileName): string { - if (!array_key_exists($fileName, self::ARTIFACTS)) { + if (!array_key_exists($fileName, self::ARTIFACTS) || $fileName === 'manifest.json') { throw new Exception('Unknown edge agent artifact'); } return edge_gateway_agent_artifact_locator::resolve($fileName); } + /** + * @throws Exception + */ + private function buildManifest(): string + { + $artifacts = []; + foreach (self::ARTIFACTS as $fileName => $contentType) { + if ($fileName === 'manifest.json') { + continue; + } + + $path = $this->artifactPath($fileName); + $sha256 = hash_file('sha256', $path); + $bytes = filesize($path); + if ($sha256 === false || $bytes === false) { + throw new Exception('Unable to inspect edge agent artifact: ' . $fileName); + } + + $artifacts[] = [ + 'name' => $fileName, + 'sha256' => $sha256, + 'bytes' => $bytes, + 'content_type' => $contentType, + ]; + } + + return json_encode([ + 'schema_version' => 1, + 'package' => 'truckwash-edge-agent', + 'version' => edge_gateway_manager::DEFAULT_INSTALL_VERSION, + 'generated_at' => gmdate('c'), + 'artifacts' => $artifacts, + ], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL; + } + private function manager(): edge_gateway_manager { return $this->manager ?? new edge_gateway_manager(); diff --git a/services/nginx/app/modules/edgegateway/classes/edge_gateway_manager.php b/services/nginx/app/modules/edgegateway/classes/edge_gateway_manager.php index ad96cd39..4ae1f4e3 100644 --- a/services/nginx/app/modules/edgegateway/classes/edge_gateway_manager.php +++ b/services/nginx/app/modules/edgegateway/classes/edge_gateway_manager.php @@ -33,6 +33,7 @@ class edge_gateway_manager public const STATUS_DEGRADED = 'DEGRADED'; public const STATUS_OFFLINE = 'OFFLINE'; public const DEFAULT_RELEASE_CHANNEL = 'stable'; + public const DEFAULT_INSTALL_VERSION = 'compose-php-agent-v3'; public const DEFAULT_AGENT_SERVICE_NAME = 'truckwash-edge-agent.service'; public const DEFAULT_STACK_SERVICE_NAME = 'truckwash-edge-gateway-stack.service'; public const DEFAULT_COMPOSE_STACK_FILE = 'docker-compose.gateway.yml'; @@ -2309,6 +2310,7 @@ class edge_gateway_manager 'minioBaseImage' => self::DEFAULT_MINIO_BASE_IMAGE, 'heartbeatIntervalSeconds' => 15, 'operationPollTimeoutSeconds' => self::COMMAND_POLL_TIMEOUT_SECONDS, + 'installedVersion' => self::DEFAULT_INSTALL_VERSION, ], JSON_UNESCAPED_SLASHES); $script = <<<'BASH' @@ -2543,6 +2545,42 @@ fetch_http() { [ "$cleanup_body" -eq 1 ] && rm -f "$body_path" rm -f "$headers_path" } +verify_manifest_artifact() { + local manifest_path="$1" + local artifact_name="$2" + local artifact_path="$3" + log_info "Verifying ${artifact_name} checksum" + php -r ' + $manifestPath = $argv[1]; + $artifactName = $argv[2]; + $artifactPath = $argv[3]; + $manifest = json_decode((string)file_get_contents($manifestPath), true); + if (!is_array($manifest)) { + fwrite(STDERR, "Invalid artifact manifest: " . $manifestPath . PHP_EOL); + exit(1); + } + $expected = null; + foreach ((array)($manifest["artifacts"] ?? []) as $artifact) { + if (is_array($artifact) && ($artifact["name"] ?? null) === $artifactName) { + $expected = (string)($artifact["sha256"] ?? ""); + break; + } + } + if ($expected === null || $expected === "") { + fwrite(STDERR, "Artifact missing from manifest: " . $artifactName . PHP_EOL); + exit(1); + } + if (!is_file($artifactPath)) { + fwrite(STDERR, "Downloaded artifact is missing: " . $artifactPath . PHP_EOL); + exit(1); + } + $actual = hash_file("sha256", $artifactPath); + if ($actual === false || !hash_equals($expected, $actual)) { + fwrite(STDERR, "Artifact checksum mismatch for " . $artifactName . PHP_EOL); + exit(1); + } + ' "$manifest_path" "$artifact_name" "$artifact_path" +} cleanup_existing_installation() { if [ "$INSTALL_DIR" != "/opt/truckwash-edge-agent" ]; then echo "Refusing to remove unexpected install directory: $INSTALL_DIR" >&2 @@ -2707,6 +2745,7 @@ run_step "Updating package lists" apt-get update run_step "Installing base packages" apt-get install -y curl ca-certificates docker.io php-cli php-curl php-mbstring php-sqlite3 run_step "Installing Docker Compose runtime" install_compose_runtime begin_install_phase "DOWNLOAD_ARTIFACTS" "Downloading edge gateway artifacts" +fetch_http "Download artifact manifest" "__MANIFEST_URL__" "$INSTALL_DIR/manifest.json" fetch_http "Download PHP edge agent" "__AGENT_URL__" "$INSTALL_DIR/agent.php" fetch_http "Download LAN worker" "__WORKER_URL__" "$INSTALL_DIR/lan-worker.php" fetch_http "Download auto-updater" "__AUTO_UPDATER_URL__" "$INSTALL_DIR/auto-updater.php" @@ -2717,6 +2756,17 @@ fetch_http "Download auto-updater Dockerfile" "__AUTO_UPDATER_DOCKERFILE_URL__" fetch_http "Download gateway launcher" "__LAUNCHER_URL__" "$INSTALL_DIR/gateway-launcher.sh" fetch_http "Download compose stack service unit" "__STACK_SERVICE_URL__" "$INSTALL_DIR/truckwash-edge-gateway-stack.service" fetch_http "Download compatibility service unit" "__LEGACY_SERVICE_URL__" "$INSTALL_DIR/truckwash-edge-agent.service" +begin_install_phase "VERIFY_ARTIFACTS" "Verifying edge gateway artifacts" +run_step "Verifying PHP edge agent" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "agent.php" "$INSTALL_DIR/agent.php" +run_step "Verifying LAN worker" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "lan-worker.php" "$INSTALL_DIR/lan-worker.php" +run_step "Verifying auto-updater" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "auto-updater.php" "$INSTALL_DIR/auto-updater.php" +run_step "Verifying compose stack" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "docker-compose.gateway.yml" "$INSTALL_DIR/docker-compose.gateway.yml" +run_step "Verifying edge-agent Dockerfile" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "Dockerfile.edge-agent" "$INSTALL_DIR/Dockerfile.edge-agent" +run_step "Verifying lan-worker Dockerfile" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "Dockerfile.lan-worker" "$INSTALL_DIR/Dockerfile.lan-worker" +run_step "Verifying auto-updater Dockerfile" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "Dockerfile.auto-updater" "$INSTALL_DIR/Dockerfile.auto-updater" +run_step "Verifying gateway launcher" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "gateway-launcher.sh" "$INSTALL_DIR/gateway-launcher.sh" +run_step "Verifying compose stack service unit" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "truckwash-edge-gateway-stack.service" "$INSTALL_DIR/truckwash-edge-gateway-stack.service" +run_step "Verifying compatibility service unit" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "truckwash-edge-agent.service" "$INSTALL_DIR/truckwash-edge-agent.service" begin_install_phase "WRITE_CONFIG" "Writing gateway configuration" cat > "$CONFIG_TEMPLATE_PATH" <<'EOF_JSON' __CONFIG_JSON__ @@ -2745,6 +2795,7 @@ BASH; '__INSTALL_TOKEN__' => $plainToken, '__VERIFY_URL__' => $this->buildInstallTokenVerifyUrl($plainToken), '__STATUS_URL__' => rtrim($this->getApiBaseUrl(), '/') . '/edge-agent/install-token/status', + '__MANIFEST_URL__' => $this->buildAgentArtifactUrl('manifest.json'), '__AGENT_URL__' => $this->buildAgentArtifactUrl('agent.php'), '__WORKER_URL__' => $this->buildAgentArtifactUrl(self::DEFAULT_LAN_WORKER_ARTIFACT), '__AUTO_UPDATER_URL__' => $this->buildAgentArtifactUrl(self::DEFAULT_AUTO_UPDATER_ARTIFACT), diff --git a/services/nginx/app/modules/edgegateway/routes/edgeGatewaysRoute.php b/services/nginx/app/modules/edgegateway/routes/edgeGatewaysRoute.php index b8addbe5..67748a4b 100644 --- a/services/nginx/app/modules/edgegateway/routes/edgeGatewaysRoute.php +++ b/services/nginx/app/modules/edgegateway/routes/edgeGatewaysRoute.php @@ -81,6 +81,7 @@ class edgeGatewaysRoute $this->get('/edge-agent/install-token/verify', fn() => $this->handleInstallTokenVerify()); $this->post('/edge-agent/install-token/status', fn() => $this->handleAgentInstallTokenStatus()); $this->get('/edge-agent/install.sh', fn() => $this->renderInstallScript()); + $this->get('/edge-agent/artifacts/manifest.json', fn() => $this->renderArtifact('manifest.json')); $this->get('/edge-agent/artifacts/agent.php', fn() => $this->renderArtifact('agent.php')); $this->get('/edge-agent/artifacts/lan-worker.php', fn() => $this->renderArtifact('lan-worker.php')); $this->get('/edge-agent/artifacts/auto-updater.php', fn() => $this->renderArtifact('auto-updater.php')); diff --git a/services/nginx/app/objects/subuser_grants_o.php b/services/nginx/app/objects/subuser_grants_o.php index 3c7b2641..a5193309 100644 --- a/services/nginx/app/objects/subuser_grants_o.php +++ b/services/nginx/app/objects/subuser_grants_o.php @@ -23,11 +23,11 @@ class subuser_grants_o extends db public object_property $deleted_at; const defaultPermissions = [ 'VEHICLES_LIST', + 'SELFSERVE_LIST', 'SELFSERVE_ADD', 'BOOKINGS_LIST', 'BOOKINGS_ADD', - 'BOOKINGS_EDIT', - 'BOOKINGS_DELETE', + 'ORDERS_LIST', ]; public static function normalizePermissionsValue(mixed $raw): array diff --git a/services/nginx/app/objects/subusers_o.php b/services/nginx/app/objects/subusers_o.php index fb8e462f..cc63dd0c 100644 --- a/services/nginx/app/objects/subusers_o.php +++ b/services/nginx/app/objects/subusers_o.php @@ -171,6 +171,7 @@ class subusers_o extends db return $this; } catch (Exception $e) { $response->error($e->getMessage()); + throw $e; } } @@ -217,9 +218,16 @@ class subusers_o extends db throw new RandomException('Error generating random bytes for setup token', 0, $e); } $cache_key = 'setup_token:' . $token; - $cashe_object_id = 'subuser_setup_token'; - $this->cache($cache_key, $this->id, $cashe_object_id); - $this->setCachedExpiration($cache_key, 24 * 60 * 60, $cashe_object_id); // Set the cache expiration to 24 hours + $reverse_cache_key = 'setup_token_for_subuser:' . (int)$this->id; + $cache_object_id = 'subuser_setup_token'; + $existingToken = $this->getCached($reverse_cache_key, $cache_object_id); + if (is_string($existingToken) && $existingToken !== '') { + $this->deleteCached('setup_token:' . $existingToken, $cache_object_id); + } + $this->cache($cache_key, $this->id, $cache_object_id); + $this->setCachedExpiration($cache_key, 24 * 60 * 60, $cache_object_id); // Set the cache expiration to 24 hours + $this->cache($reverse_cache_key, $token, $cache_object_id); + $this->setCachedExpiration($reverse_cache_key, 24 * 60 * 60, $cache_object_id); return $token; } @@ -260,8 +268,16 @@ class subusers_o extends db public function invalidateSetupToken(string $token): void { $object_id = 'subuser_setup_token'; + $subuser_id = $this->getSubuserIdBySetupToken($token); $cache_key = 'setup_token:' . $token; $this->deleteCached($cache_key, $object_id); + if ($subuser_id !== null) { + $reverse_cache_key = 'setup_token_for_subuser:' . (int)$subuser_id; + $currentToken = $this->getCached($reverse_cache_key, $object_id); + if ((string)$currentToken === $token) { + $this->deleteCached($reverse_cache_key, $object_id); + } + } } /** diff --git a/services/nginx/app/resources/edge-gateway-agent/agent.php b/services/nginx/app/resources/edge-gateway-agent/agent.php index 48fffc4d..b185cee2 100644 --- a/services/nginx/app/resources/edge-gateway-agent/agent.php +++ b/services/nginx/app/resources/edge-gateway-agent/agent.php @@ -1108,7 +1108,7 @@ final class TruckwashEdgeAgent return; } - $installedVersion = (string)$this->config->get('installedVersion', 'compose-php-agent-v2'); + $installedVersion = (string)$this->config->get('installedVersion', 'compose-php-agent-v3'); try { $response = $this->http->post('/edge-agent/claim', [ 'token' => (string)$this->config->get('installToken'), @@ -1264,10 +1264,10 @@ final class TruckwashEdgeAgent 'agent_token' => (string)$this->config->get('agentToken'), 'status' => 'ONLINE', 'hostname' => gethostname() ?: 'truckwash-edge', - 'installed_version' => (string)$this->config->get('installedVersion', 'compose-php-agent-v2'), + 'installed_version' => (string)$this->config->get('installedVersion', 'compose-php-agent-v3'), 'target_version' => (string)$this->config->get( 'targetVersion', - $this->config->get('installedVersion', 'compose-php-agent-v2') + $this->config->get('installedVersion', 'compose-php-agent-v3') ), 'metadata' => array_merge([ 'agent_instance_id' => $this->agentInstanceId, @@ -1964,7 +1964,7 @@ final class TruckwashEdgeAgent return [ 'applied' => false, - 'installed_version' => (string)$this->config->get('installedVersion', 'compose-php-agent-v2'), + 'installed_version' => (string)$this->config->get('installedVersion', 'compose-php-agent-v3'), 'staged_version' => $targetVersion, 'target_version' => $targetVersion, 'staged_at' => $stagedAt, diff --git a/services/nginx/app/routes/authRoute.php b/services/nginx/app/routes/authRoute.php index 8a6cd608..d2ede8d2 100644 --- a/services/nginx/app/routes/authRoute.php +++ b/services/nginx/app/routes/authRoute.php @@ -24,6 +24,72 @@ class authRoute { use route_t; + private function passkeyChallengePrincipalCacheKey(string $challengeToken): string + { + return 'passkey_challenge_principal:' . $challengeToken; + } + + private function setPasskeyChallengePrincipal(string $challengeToken, string $principalType): void + { + if (!defined('redis')) { + return; + } + constant('redis')->setEx($this->passkeyChallengePrincipalCacheKey($challengeToken), $principalType, 5 * 60); + } + + private function getPasskeyChallengePrincipal(string $challengeToken): string + { + if (!defined('redis')) { + return 'discoverable'; + } + $principalType = constant('redis')->get($this->passkeyChallengePrincipalCacheKey($challengeToken)); + return is_string($principalType) && in_array($principalType, ['user', 'subuser'], true) + ? $principalType + : 'discoverable'; + } + + private function clearPasskeyChallengePrincipal(string $challengeToken): void + { + if (!defined('redis')) { + return; + } + constant('redis')->delete($this->passkeyChallengePrincipalCacheKey($challengeToken)); + } + + private function passkeyAllowCredentials(int $userId, bool $isSubuser): array + { + if ($userId <= 0) { + return []; + } + + $passkeys = new passkeys_o(); + $passkeys->setAdditionalWhereClause( + '`user_id` = ' . (int)$userId . ' AND `is_subuser` = ' . ($isSubuser ? '1' : '0') + ); + $list = $passkeys->listObjectsWithPaginationIfSet(function ($o) { + $transports = null; + if (isset($o['transports'])) { + $decoded = json_decode($o['transports'], true); + $transports = is_array($decoded) ? $decoded : null; + } + return [ + 'type' => 'public-key', + 'id' => $o['credential_id'] ?? null, + 'transports' => $transports, + ]; + }); + + if (isset($list['items']) && is_array($list['items'])) { + $list = $list['items']; + } + + return is_array($list) + ? array_values(array_filter($list, function ($item) { + return isset($item['id']) && is_string($item['id']) && strlen($item['id']) > 0; + })) + : []; + } + public function run(): void { $this->post('/auth/login', function () { @@ -625,11 +691,53 @@ class authRoute global $response; $this->requireRecaptcha(); + $principal_type = strtolower(trim((string)(self::getParameter('principal_type') ?? self::getParameter('user_type') ?? ''))); + if ($principal_type === '') { + $principal_type = self::getParameter('customer_number') !== null ? 'user' : 'discoverable'; + } + if (!in_array($principal_type, ['user', 'subuser', 'discoverable'], true)) { + $response->error('Invalid principal_type', 400); + } + $customer_number = self::getParameter('customer_number'); $user_id = 0; $allowCredentials = []; - if ($customer_number !== null) { + if ($principal_type === 'subuser') { + $subuser = null; + if (self::isParametersSet(['subuser_id'])) { + $subuser_id = (int)self::getParameter('subuser_id'); + self::requireType($subuser_id, $this->type_int()); + self::requireMinValue($subuser_id, 1); + $candidate = (new subusers_o())->select($subuser_id); + if ($candidate->exists()) { + $candidate->getObjectProperties(); + $subuser = $candidate; + } + } elseif (self::isParametersSet(['username'])) { + $username = (string)self::getParameter('username'); + self::requireType($username, $this->type_string()); + self::requireMinLength('username', 3); + self::requireMaxLength('username', 255); + $subuser = (new subusers_o())->getSubuserByUsername($username); + } elseif (self::isParametersSet(['phone_country_code', 'phone'])) { + $phone_country_code = (int)self::getParameter('phone_country_code'); + $phone = (int)self::getParameter('phone'); + self::requireType($phone_country_code, $this->type_int()); + self::requireMinLength('phone_country_code', 1); + self::requireMaxLength('phone_country_code', 3); + self::requireType($phone, $this->type_int()); + self::requireMinLength('phone', 4); + self::requireMaxLength('phone', 15); + $subuser = (new subusers_o())->getSubuserByPhone($phone_country_code, $phone); + } + + if ($subuser !== null) { + $user_id = (int)$subuser->id; + $allowCredentials = $this->passkeyAllowCredentials($user_id, true); + } + } elseif ($customer_number !== null) { + $principal_type = 'user'; $customer_number = (int)$customer_number; self::requireType($customer_number, $this->type_int()); self::requireMinValue($customer_number, 1); @@ -639,33 +747,7 @@ class authRoute if ($user->exists()) { $user_id = (int)$user->id; - - // Load passkeys for this user (non-subuser) - $passkeys = new passkeys_o(); - $passkeys->setAdditionalWhereClause('`user_id` = ' . (int)$user_id . ' AND `is_subuser` = 0'); - $list = $passkeys->listObjectsWithPaginationIfSet(function ($o) { - $transports = null; - if (isset($o['transports'])) { - $decoded = json_decode($o['transports'], true); - $transports = is_array($decoded) ? $decoded : null; - } - return [ - 'type' => 'public-key', - 'id' => $o['credential_id'] ?? null, - 'transports' => $transports, - ]; - }); - - // Ensure we return a simple array of credentials (without pagination wrapper) - if (isset($list['items']) && is_array($list['items'])) { - $allowCredentials = array_values(array_filter($list['items'], function ($item) { - return isset($item['id']) && is_string($item['id']) && strlen($item['id']) > 0; - })); - } elseif (is_array($list)) { - $allowCredentials = array_values(array_filter($list, function ($item) { - return isset($item['id']) && is_string($item['id']) && strlen($item['id']) > 0; - })); - } + $allowCredentials = $this->passkeyAllowCredentials($user_id, false); } } @@ -682,6 +764,10 @@ class authRoute // Create an ephemeral token to bind the challenge to the (potential) user (new tokens_o())->create($user_id, $challenge_token, 'PASSKEY_CHALLENGE'); + $this->setPasskeyChallengePrincipal( + $challenge_token, + $principal_type === 'subuser' ? 'subuser' : ($principal_type === 'user' ? 'user' : 'discoverable') + ); $logDetails = $customer_number ? 'Issued passkey challenge for customer ' . $customer_number : 'Issued passkey challenge (discoverable)'; (new logs_o())->add('auth', 'global', 1, $user_id, 'AUTH_PASSKEY_CHALLENGE', $logDetails); @@ -733,6 +819,7 @@ class authRoute if ($token_type !== 'PASSKEY_CHALLENGE') { $response->error('Invalid token type', 401); } + $challengePrincipalType = $this->getPasskeyChallengePrincipal($challenge_token); // Determine rpId/host $host = parse_url((string)($_SERVER['HTTP_ORIGIN'] ?? ''), PHP_URL_HOST) ?: ($_SERVER['SERVER_NAME'] ?? 'localhost'); @@ -768,7 +855,17 @@ class authRoute // Success → issue session token accordingly and delete the challenge token $issued_to_user_id = (int)$passkey->user_id->value(); $is_subuser = (bool)$passkey->is_subuser->value(); + if ( + ($challengePrincipalType === 'subuser' && !$is_subuser) + || ($challengePrincipalType === 'user' && $is_subuser) + ) { + (new logs_o())->add('auth', 'global', 1, $user_id_hint, 'AUTH_PASSKEY_VERIFY_FAILURE', 'Credential principal mismatch'); + $token_o->delete($challenge_token); + $this->clearPasskeyChallengePrincipal($challenge_token); + $response->error('Invalid credential', 401); + } $token_o->delete($challenge_token); + $this->clearPasskeyChallengePrincipal($challenge_token); (new logs_o())->add('auth', 'global', 1, $issued_to_user_id, 'AUTH_PASSKEY_VERIFY_SUCCESS', 'Passkey assertion accepted'); diff --git a/services/nginx/app/routes/passkeysRoute.php b/services/nginx/app/routes/passkeysRoute.php index cfbc6b30..1896ab6f 100644 --- a/services/nginx/app/routes/passkeysRoute.php +++ b/services/nginx/app/routes/passkeysRoute.php @@ -11,21 +11,48 @@ class passkeysRoute { use route_t; + /** + * @return array{principal:object,user_id:int,is_subuser:bool} + */ + private function resolvePasskeyPrincipal(string $classicUserPermission): array + { + global $response; + + $auth = new authentication(); + $subuser = $auth->get_subuser(); + if ($subuser !== false) { + return [ + 'principal' => $subuser, + 'user_id' => (int)$subuser->id, + 'is_subuser' => true, + ]; + } + + self::requirePermission($classicUserPermission); + $user = $auth->get_user(); + if (!$user) { + (new logs_o())->add('user_security', 'global', 0, 0, 'USER_SECURITY_PASSKEYS_AUTH', 'User not logged in'); + $response->error('Invalid session', 400); + } + + return [ + 'principal' => $user, + 'user_id' => (int)$user->id, + 'is_subuser' => false, + ]; + } + public function run(): void { // List passkeys for current authenticated user $this->get('/account/security/passkeys', function () { global $response; - self::requirePermission('user_security_passkeys_list'); - $user = (new authentication())->get_user(); - if (!$user) { - (new logs_o())->add('user_security', 'global', 0, 0, 'USER_SECURITY_PASSKEYS_LIST', 'User not logged in'); - $response->error('Invalid session', 400); - } + $principal = $this->resolvePasskeyPrincipal('user_security_passkeys_list'); $passkeys = new passkeys_o(); - // Restrict to current user (customer) and non-subuser records - $passkeys->setAdditionalWhereClause('`user_id` = ' . (int)$user->id . ' AND `is_subuser` = 0'); + $passkeys->setAdditionalWhereClause( + '`user_id` = ' . (int)$principal['user_id'] . ' AND `is_subuser` = ' . ($principal['is_subuser'] ? '1' : '0') + ); $list = $passkeys->listObjectsWithPaginationIfSet(function ($o) { // $o is an associative array from the database $transports = null; @@ -45,7 +72,7 @@ class passkeysRoute ]; }); - (new logs_o())->add('user_security', 'global', 1, $user->id, 'USER_SECURITY_PASSKEYS_LIST', 'Listed passkeys'); + (new logs_o())->add('user_security', 'global', 1, $principal['user_id'], 'USER_SECURITY_PASSKEYS_LIST', 'Listed passkeys'); $response->success($list); }, [ 'user_security_passkeys_list' => 'List passkeys for the authenticated user', @@ -54,12 +81,7 @@ class passkeysRoute // Create/add a passkey (store after client-side WebAuthn attestation) $this->post('/account/security/passkeys', function () { global $response; - self::requirePermission('user_security_passkeys_create'); - $user = (new authentication())->get_user(); - if (!$user) { - (new logs_o())->add('user_security', 'global', 0, 0, 'USER_SECURITY_PASSKEYS_CREATE', 'User not logged in'); - $response->error('Invalid session', 400); - } + $principal = $this->resolvePasskeyPrincipal('user_security_passkeys_create'); self::requireParameters(['credential_id', 'public_key', 'algorithm', 'transports']); @@ -100,9 +122,9 @@ class passkeysRoute } $obj = new passkeys_o(); - $obj->add((int)$user->id, false, $credential_id, $public_key, $algorithm, (array)$transports, $name); + $obj->add((int)$principal['user_id'], (bool)$principal['is_subuser'], $credential_id, $public_key, $algorithm, (array)$transports, $name); - (new logs_o())->add('user_security', 'global', 1, $user->id, 'USER_SECURITY_PASSKEYS_CREATE', 'Created passkey: ' . $obj->id); + (new logs_o())->add('user_security', 'global', 1, $principal['user_id'], 'USER_SECURITY_PASSKEYS_CREATE', 'Created passkey: ' . $obj->id); $response->success(['id' => $obj->id]); }, [ 'user_security_passkeys_create' => 'Create/add a new passkey for the authenticated user', @@ -111,12 +133,7 @@ class passkeysRoute // Rename a passkey $this->patch('/account/security/passkeys/{id}', function () { global $response; - self::requirePermission('user_security_passkeys_rename'); - $user = (new authentication())->get_user(); - if (!$user) { - (new logs_o())->add('user_security', 'global', 0, 0, 'USER_SECURITY_PASSKEYS_RENAME', 'User not logged in'); - $response->error('Invalid session', 400); - } + $principal = $this->resolvePasskeyPrincipal('user_security_passkeys_rename'); $id = (int)self::fromRoute('id'); self::requireParameterIntPositive($id, 'id'); @@ -127,13 +144,17 @@ class passkeysRoute self::requireMaxLength('name', 255); $obj = (new passkeys_o())->select($id); - if (!$obj->exists() || (int)$obj->user_id->value() !== (int)$user->id || (int)$obj->is_subuser->value() !== 0) { - (new logs_o())->add('user_security', 'global', 0, $user->id, 'USER_SECURITY_PASSKEYS_RENAME', 'Passkey not found or not owned'); + if ( + !$obj->exists() + || (int)$obj->user_id->value() !== (int)$principal['user_id'] + || (bool)$obj->is_subuser->value() !== (bool)$principal['is_subuser'] + ) { + (new logs_o())->add('user_security', 'global', 0, $principal['user_id'], 'USER_SECURITY_PASSKEYS_RENAME', 'Passkey not found or not owned'); $response->error('Not found', 404); } $obj->update(['name' => $name]); - (new logs_o())->add('user_security', 'global', 1, $user->id, 'USER_SECURITY_PASSKEYS_RENAME', 'Renamed passkey ' . $id); + (new logs_o())->add('user_security', 'global', 1, $principal['user_id'], 'USER_SECURITY_PASSKEYS_RENAME', 'Renamed passkey ' . $id); $response->success(['message' => 'Renamed', 'id' => $id]); }, [ 'user_security_passkeys_rename' => 'Rename a passkey that belongs to the authenticated user', @@ -142,24 +163,23 @@ class passkeysRoute // Delete a passkey (soft delete) $this->delete('/account/security/passkeys/{id}', function () { global $response; - self::requirePermission('user_security_passkeys_delete'); - $user = (new authentication())->get_user(); - if (!$user) { - (new logs_o())->add('user_security', 'global', 0, 0, 'USER_SECURITY_PASSKEYS_DELETE', 'User not logged in'); - $response->error('Invalid session', 400); - } + $principal = $this->resolvePasskeyPrincipal('user_security_passkeys_delete'); $id = (int)self::fromRoute('id'); self::requireParameterIntPositive($id, 'id'); $obj = (new passkeys_o())->select($id); - if (!$obj->exists() || (int)$obj->user_id->value() !== (int)$user->id || (int)$obj->is_subuser->value() !== 0) { - (new logs_o())->add('user_security', 'global', 0, $user->id, 'USER_SECURITY_PASSKEYS_DELETE', 'Passkey not found or not owned'); + if ( + !$obj->exists() + || (int)$obj->user_id->value() !== (int)$principal['user_id'] + || (bool)$obj->is_subuser->value() !== (bool)$principal['is_subuser'] + ) { + (new logs_o())->add('user_security', 'global', 0, $principal['user_id'], 'USER_SECURITY_PASSKEYS_DELETE', 'Passkey not found or not owned'); $response->error('Not found', 404); } $obj->delete(); - (new logs_o())->add('user_security', 'global', 1, $user->id, 'USER_SECURITY_PASSKEYS_DELETE', 'Deleted passkey ' . $id); + (new logs_o())->add('user_security', 'global', 1, $principal['user_id'], 'USER_SECURITY_PASSKEYS_DELETE', 'Deleted passkey ' . $id); $response->success(['message' => 'Deleted', 'id' => $id]); }, [ 'user_security_passkeys_delete' => 'Delete a passkey that belongs to the authenticated user', diff --git a/services/nginx/app/routes/subusersRoute.php b/services/nginx/app/routes/subusersRoute.php index 9aca8218..31121521 100644 --- a/services/nginx/app/routes/subusersRoute.php +++ b/services/nginx/app/routes/subusersRoute.php @@ -231,7 +231,57 @@ class subusersRoute private function buildSetupLink(string $token): string { - return 'https://truckwash.io/complete-registration?token=' . $token; + $frontendBaseUrl = trim((string)( + getenv('FRONTEND_URL') + ?: getenv('APP_URL') + ?: ($_SERVER['FRONTEND_URL'] ?? '') + ?: ($_SERVER['APP_URL'] ?? '') + ?: 'https://truckwash.io' + )); + $frontendBaseUrl = rtrim($frontendBaseUrl !== '' ? $frontendBaseUrl : 'https://truckwash.io', '/'); + return $frontendBaseUrl . '/complete-registration?token=' . rawurlencode($token); + } + + private function clientThrottleIp(): string + { + $remoteAddress = trim((string)($_SERVER['REMOTE_ADDR'] ?? '')); + return $remoteAddress !== '' ? $remoteAddress : 'unknown'; + } + + private function recordThrottleAttempt(string $scope, string $identifier, int $limit, int $windowSeconds): ?string + { + global $response; + + if (!defined('redis')) { + return null; + } + + $safeScope = preg_replace('/[^a-z0-9:_-]/i', '_', $scope); + $key = 'subusers_route_throttle:' . $safeScope . ':' . hash( + 'sha256', + $this->clientThrottleIp() . ':' . $identifier + ); + $redis = constant('redis'); + $attempts = (int)($redis->get($key) ?? '0'); + if ($attempts >= $limit) { + $response->error('Too many attempts. Please wait and try again.', 429); + } + $redis->setEx($key, (string)($attempts + 1), $windowSeconds); + return $key; + } + + private function clearThrottleAttempt(?string $key): void + { + if ($key === null || !defined('redis')) { + return; + } + constant('redis')->delete($key); + } + + private function subuserAuthFailure(): void + { + global $response; + $response->error('Invalid credentials', 401); } private function issueSetupInvite(subusers_o $subuser): array @@ -272,7 +322,7 @@ class subusersRoute $delivery = [ 'channel' => 'sms', 'status' => 'failed', - 'message' => $exception->getMessage(), + 'message' => 'Invite delivery failed.', ]; } @@ -330,7 +380,7 @@ class subusersRoute 'subuser' => $subuser->id, 'enabled' => 1, 'deleted_at' => null, - ], ['permissions', 'billing_customer_number']); + ], ['id', 'permissions', 'billing_customer_number']); $customerNames = $this->resolveCustomerNames(array_map( static fn (array $grant): int => (int)($grant['billing_customer_number'] ?? 0), $grants @@ -346,6 +396,7 @@ class subusersRoute 'grants' => array_map(function ($grant) use ($customerNames) { $customerNumber = (int)$grant['billing_customer_number']; return [ + 'grant_id' => isset($grant['id']) ? (int)$grant['id'] : null, 'name' => $this->resolveCustomerName($customerNumber, $customerNames), 'billing_customer_number' => $customerNumber, 'permissions' => subuser_grants_o::normalizePermissionsValue($grant['permissions'] ?? null), @@ -762,28 +813,9 @@ class subusersRoute self::requireType($note, self::type_string()); self::requireMaxLength('note', 65535); } - $permissions = null; - if (self::isParametersSet(['permissions'])) { - $raw = self::getParameter('permissions'); - // Expect array (already parsed) or JSON string - if (is_string($raw)) { - $decoded = json_decode($raw, true); - if (!is_array($decoded)) { - $response->error('Invalid permissions payload', 400); - } - $permissions = $decoded; - } elseif (is_array($raw)) { - $permissions = $raw; - } else { - $response->error('Invalid permissions type', 400); - } - // Validate each permission is a known key - foreach ($permissions as $perm) { - if (!is_string($perm) || subusers_permission_node_key::tryFrom($perm) === null) { - $response->error('Unknown permission key: ' . (string)$perm, 400); - } - } - } + $permissions = self::isParametersSet(['permissions']) + ? $this->parsePermissionsPayload(self::getParameter('permissions'), []) + : null; try { $grant = (new subuser_grants_o())->add($customer_number, $subuser_id, (bool)$enabled, $note, $permissions); $response->success(['grant' => $grant->asArray()]); @@ -834,25 +866,7 @@ class subusersRoute $grant->note->set($note); } if (self::isParametersSet(['permissions'])) { - $raw = self::getParameter('permissions'); - // Expect array (already parsed) or JSON string - if (is_string($raw)) { - $decoded = json_decode($raw, true); - if (!is_array($decoded)) { - $response->error('Invalid permissions payload', 400); - } - $permissions = $decoded; - } elseif (is_array($raw)) { - $permissions = $raw; - } else { - $response->error('Invalid permissions type', 400); - } - // Validate each permission is a known key - foreach ($permissions as $perm) { - if (!is_string($perm) || subusers_permission_node_key::tryFrom($perm) === null) { - $response->error('Unknown permission key: ' . (string)$perm, 400); - } - } + $permissions = $this->parsePermissionsPayload(self::getParameter('permissions'), []); $grant->permissions->set($permissions); } $response->success($grant->asArray()); @@ -866,6 +880,14 @@ class subusersRoute $this->get('/subusers/permission-nodes', function () { global $response; + $canUseGlobalManagement = self::hasPermission('manage_subuser_grants') + || self::hasPermission('list_subusers') + || self::hasPermission('add_subusers') + || self::hasPermission('edit_subusers'); + if (!$canUseGlobalManagement) { + $this->requireManagedCustomerScope(subusers_permission_node_key::SUBUSERS_LIST); + } + // Build groups $groups = [ new subusers_permission_nodes_bookings(), @@ -893,7 +915,13 @@ class subusersRoute ]; } $response->success($out); - }, []); + }, [ + 'list_own_subusers' => 'List chauffeur permission nodes for own customer. Subusers require node: SUBUSERS_LIST and X-Customer-Number header.', + 'manage_subuser_grants' => 'List chauffeur permission nodes for administrative grant management.', + 'list_subusers' => 'List chauffeur permission nodes for superuser management.', + 'add_subusers' => 'List chauffeur permission nodes while inviting chauffeurs.', + 'edit_subusers' => 'List chauffeur permission nodes while editing chauffeur grants.', + ]); $this->post('/subusers', function () { global /** @var response $response */ @@ -948,15 +976,7 @@ class subusersRoute (int)$phone_country_code, (int)$phone ); - // Send an SMS with a link to complete the registration process. - $gatewayAPI = new gatewayapi(); - if ($gatewayAPI->isEnabled()) { - $token = $subuser->generateSetupToken(); - $link = 'https://truckwash.io/complete-registration?token=' . $token; - $message = 'Tak for din oprettelse af chaufførkonto hos Truck Wash! Klik på linket for at fuldføre registreringen: ' . $link; - $phone_number_array = [(string)$phone_country_code . (string)$phone]; - $gatewayAPI->send($phone_number_array, $message); - } + $invite = $this->issueSetupInvite($subuser); // Add the grant request $subuser_grants_o = new subuser_grants_o(); try { @@ -964,7 +984,7 @@ class subusersRoute } catch (Exception $e) { $response->error('Failed to add subuser grant', 500); } - $response->success(['cvr' => $cvr, 'customer_number' => $results[0]->customerNumber]); + $response->success(['cvr' => $cvr, 'customer_number' => $results[0]->customerNumber, 'invite' => $invite]); // Code for creating a new subuser would go here }); $this->get('/subusers/setup', function () { @@ -972,11 +992,13 @@ class subusersRoute global $response; self::requireParameters(['token']); $token = self::getParameter('token'); + $setupThrottleKey = $this->recordThrottleAttempt('setup_token', 'token-validation', 20, 15 * 60); // Get the subuser with the setup token $subuser = (new subusers_o())->getSubuserBySetupToken($token); if ($subuser === null) { $response->error('Invalid or expired token', 400); } + $this->clearThrottleAttempt($setupThrottleKey); $response->success(['message' => 'Token is valid', 'subuser_id' => $subuser->id]); }); $this->post('/subusers/setup', function () { @@ -986,6 +1008,7 @@ class subusersRoute $token = (string)self::getParameter('token'); $password = (string)self::getParameter('password'); $name = (string)self::getParameter('name'); + $setupThrottleKey = $this->recordThrottleAttempt('setup_complete', 'token-complete', 20, 15 * 60); $this->requireSubuserPasswordPolicy($password); self::requireType($name, self::type_string()); self::requireMinLength('name', 3); @@ -1017,18 +1040,24 @@ class subusersRoute if ($subuser === null) { $response->error('Invalid or expired token', 400); } + $this->assertSubuserIdentifiersAvailable( + null, + null, + $username, + $email, + (int)$subuser->id + ); // Set the password for the subuser try { - $subuser->setPassword($password); - if (!empty($username) || !empty($email) || !empty($name)) { - $subuser->update([ - ...(!empty($username) ? ['username' => $username] : []), - ...(!empty($email) ? ['email' => $email] : []), - ...(!empty($name) ? ['name' => $name] : []), - ]); - } + $subuser->update([ + 'password' => password_hash($password, PASSWORD_DEFAULT), + 'name' => $name, + ...(!empty($username) ? ['username' => $username] : []), + ...(!empty($email) ? ['email' => $email] : []), + ]); // Invalidate the setup token $subuser->invalidateSetupToken($token); + $this->clearThrottleAttempt($setupThrottleKey); $response->success(['message' => 'Complete registration successful']); } catch (Exception $e) { $response->error($e->getMessage(), 400); @@ -1067,23 +1096,34 @@ class subusersRoute } else { $response->error('You must provide either phone_country_code & phone, subuser_id or username', 400); } + $identifier = $username !== null + ? 'username:' . strtolower($username) + : ($subuser_id !== null + ? 'id:' . (string)$subuser_id + : 'phone:' . (string)$phone_country_code . ':' . (string)$phone); + $authThrottleKey = $this->recordThrottleAttempt('auth_password', $identifier, 10, 15 * 60); // Get the subuser based on the provided username type $subuser = null; if ($phone_country_code !== null && $phone !== null) { $subuser = (new subusers_o())->getSubuserByPhone($phone_country_code, $phone); } elseif ($subuser_id !== null) { - $subuser = (new subusers_o())->select($subuser_id); + $candidate = (new subusers_o())->select($subuser_id); + if ($candidate->exists()) { + $candidate->getObjectProperties(); + $subuser = $candidate; + } } elseif ($username !== null) { $subuser = (new subusers_o())->getSubuserByUsername($username); } if ($subuser === null) { - $response->error('Subuser not found', 404); + $this->subuserAuthFailure(); } self::requireParameters(['password']); $password = (string)self::getParameter('password'); - $this->requireSubuserPasswordPolicy($password); try { - if (password_verify($password, $subuser->password->value())) { + $passwordHash = $subuser->password->value(); + if (is_string($passwordHash) && $passwordHash !== '' && password_verify($password, $passwordHash)) { + $this->clearThrottleAttempt($authThrottleKey); if ($subuser->isTwoFactorEnabled()) { $token = (new authentication())->create_2fa_token($subuser->id, '2FA_VERIFICATION_SUBUSER'); $response->success(['2fa_required' => true, '2fa_token' => $token]); @@ -1092,7 +1132,7 @@ class subusersRoute $session = $subuser->generateSession(); $response->success(['session' => $session]); } else { - $response->error('Invalid password', 400); + $this->subuserAuthFailure(); } } catch (Exception $e) { $response->error($e->getMessage(), 500); @@ -1363,15 +1403,7 @@ class subusersRoute (int)$phone ); - // Optionally send SMS with setup link - $gatewayAPI = new gatewayapi(); - if ($gatewayAPI->isEnabled()) { - $token = $subuser->generateSetupToken(); - $link = 'https://truckwash.io/complete-registration?token=' . $token; - $message = 'Tak for din oprettelse af chaufførkonto hos Truck Wash! Klik på linket for at fuldføre registreringen: ' . $link; - $phone_number_array = [(string)$phone_country_code . (string)$phone]; - $gatewayAPI->send($phone_number_array, $message); - } + $invite = $this->issueSetupInvite($subuser); // Create a pending grant request for the company $subuser_grants_o = new subuser_grants_o(); @@ -1381,7 +1413,7 @@ class subusersRoute $response->error('Failed to add subuser grant', 500); } - $response->success(['cvr' => $cvr, 'customer_number' => $results[0]->customerNumber]); + $response->success(['cvr' => $cvr, 'customer_number' => $results[0]->customerNumber, 'invite' => $invite]); }); } } diff --git a/services/nginx/app/tests/Api/AuthApiTest.php b/services/nginx/app/tests/Api/AuthApiTest.php index 0d47520e..a195c07e 100644 --- a/services/nginx/app/tests/Api/AuthApiTest.php +++ b/services/nginx/app/tests/Api/AuthApiTest.php @@ -200,6 +200,67 @@ it('logs out and invalidates cached subuser sessions', function (): void { ->assertMessage('Unauthorized'); }); +it('scopes passkey challenges to the requested principal type', function (): void { + api_test_covers('POST /auth/passkey/challenge', 'auth'); + + api_fixtures()->setModuleConfig('reCAPTCHA', 'enabled', 'false'); + $user = api_fixtures()->createUser([ + 'display_name' => 'Passkey Customer', + ]); + $subuser = api_fixtures()->createSubuser([ + 'username' => 'passkey-driver', + ]); + api_fixtures()->createPasskey([ + 'user_id' => (int)$user['id'], + 'is_subuser' => false, + 'credential_id' => 'customer-passkey-credential', + ]); + api_fixtures()->createPasskey([ + 'user_id' => (int)$subuser['id'], + 'is_subuser' => true, + 'credential_id' => 'subuser-passkey-credential', + ]); + + $subuserChallenge = api_client()->post('/auth/passkey/challenge', [ + 'principal_type' => 'subuser', + 'username' => 'passkey-driver', + ]); + $userChallenge = api_client()->post('/auth/passkey/challenge', [ + 'principal_type' => 'user', + 'customer_number' => (int)$user['customer_number'], + ]); + + $subuserChallenge + ->assertStatus(200) + ->assertEnvelope() + ->assertSuccess(); + $userChallenge + ->assertStatus(200) + ->assertEnvelope() + ->assertSuccess(); + + $subuserCredentials = $subuserChallenge->data()['publicKey']['allowCredentials'] ?? []; + $userCredentials = $userChallenge->data()['publicKey']['allowCredentials'] ?? []; + + $subuserCredentialIds = array_column($subuserCredentials, 'id'); + $userCredentialIds = array_column($userCredentials, 'id'); + + expect($subuserCredentialIds)->toContain('subuser-passkey-credential'); + expect($subuserCredentialIds)->not->toContain('customer-passkey-credential'); + expect($userCredentialIds)->toContain('customer-passkey-credential'); + expect($userCredentialIds)->not->toContain('subuser-passkey-credential'); + + $tokenRepo = new \objects\tokens_o(); + $subuserChallengeToken = (string)($subuserChallenge->data()['challenge_token'] ?? ''); + $userChallengeToken = (string)($userChallenge->data()['challenge_token'] ?? ''); + if ($subuserChallengeToken !== '') { + $tokenRepo->delete($subuserChallengeToken); + } + if ($userChallengeToken !== '') { + $tokenRepo->delete($userChallengeToken); + } +}); + it('rejects invalid logout tokens', function (): void { api_test_covers('GET /auth/logout', 'auth'); diff --git a/services/nginx/app/tests/Api/EdgeGatewayAgentApiTest.php b/services/nginx/app/tests/Api/EdgeGatewayAgentApiTest.php index f56d354a..5bda92b9 100644 --- a/services/nginx/app/tests/Api/EdgeGatewayAgentApiTest.php +++ b/services/nginx/app/tests/Api/EdgeGatewayAgentApiTest.php @@ -36,6 +36,15 @@ it('serves installer artifacts and recovers gateway runtime status after fresh h ->and($artifact->body) ->toContain('get('/edge-agent/artifacts/manifest.json'); + expect($manifest->status)->toBe(200); + $manifestPayload = json_decode($manifest->body, true); + expect($manifestPayload)->toBeArray() + ->and($manifestPayload['version'] ?? null)->toBe(edge_gateway_manager::DEFAULT_INSTALL_VERSION); + $manifestArtifacts = array_column((array)($manifestPayload['artifacts'] ?? []), null, 'name'); + expect($manifestArtifacts)->toHaveKey('agent.php') + ->and($manifestArtifacts['agent.php']['sha256'] ?? null)->toBe(hash('sha256', $artifact->body)); + $claimResponse = api_client()->post('/edge-agent/claim', [ 'token' => (string)$installToken['token'], 'hostname' => 'edge-agent-api', diff --git a/services/nginx/app/tests/Api/SubusersApiTest.php b/services/nginx/app/tests/Api/SubusersApiTest.php index 5535293a..289ab1e8 100644 --- a/services/nginx/app/tests/Api/SubusersApiTest.php +++ b/services/nginx/app/tests/Api/SubusersApiTest.php @@ -44,11 +44,13 @@ it('lists subusers when an existing grant has legacy zero permissions', function expect($matchingSubusers[0]['permissions'] ?? null)->toBe([]); }); -it('uses the same password policy for subuser setup and password auth', function (): void { +it('enforces the password policy for setup without rejecting legacy valid passwords at login', function (): void { api_test_covers('POST /subusers/setup', 'failure'); - api_test_covers('POST /subusers/auth/password', 'failure'); + api_test_covers('POST /subusers/auth/password', 'happy'); - $subuser = api_fixtures()->createSubuser(); + $subuser = api_fixtures()->createSubuser([ + 'password_plaintext' => 'invalidpassword', + ]); $setupResponse = api_client()->post('/subusers/setup', [ 'token' => 'policy-test-token', @@ -68,10 +70,114 @@ it('uses the same password policy for subuser setup and password auth', function ->assertMessage(SUBUSER_PASSWORD_POLICY_MESSAGE); $authResponse - ->assertStatus(400) + ->assertStatus(200) + ->assertEnvelope() + ->assertSuccess(); + + expect($authResponse->data()['session'] ?? null)->toBeString(); + (new \objects\subusers_o())->invalidateSessionToken((string)$authResponse->data()['session']); +}); + +it('returns a generic error for invalid subuser credentials', function (): void { + api_test_covers('POST /subusers/auth/password', 'failure'); + + $response = api_client()->post('/subusers/auth/password', [ + 'subuser_id' => 999999999, + 'password' => 'whatever', + ]); + + $response + ->assertStatus(401) ->assertEnvelope() ->assertSuccess(false) - ->assertMessage(SUBUSER_PASSWORD_POLICY_MESSAGE); + ->assertMessage('Invalid credentials'); +}); + +it('requires subuser management access before exposing permission nodes', function (): void { + api_test_covers('GET /subusers/permission-nodes', 'auth'); + + $unauthenticated = api_client()->get('/subusers/permission-nodes'); + $unauthenticated + ->assertStatus(401) + ->assertEnvelope() + ->assertSuccess(false); + + $session = api_fixtures()->createUserSession(['list_own_subusers']); + $authorized = api_client()->get('/subusers/permission-nodes', $session['headers']); + $authorized + ->assertStatus(200) + ->assertEnvelope() + ->assertSuccess(); + + expect($authorized->data())->toBeArray()->not->toBeEmpty(); +}); + +it('rejects customer subuser listing without own-scope permission', function (): void { + api_test_covers('GET /subusers', 'auth'); + + $session = api_fixtures()->createUserSession(['user']); + $response = api_client()->get('/subusers?page=1&limit=5', $session['headers']); + + $response + ->assertStatus(403) + ->assertEnvelope() + ->assertSuccess(false); +}); + +it('replaces older setup tokens when a new setup token is generated', function (): void { + $subuser = api_fixtures()->createSubuser([ + 'password_plaintext' => null, + 'name' => 'Pending Setup Driver', + ]); + $subuserObject = (new \objects\subusers_o())->select((int)$subuser['id']); + $subuserObject->getObjectProperties(); + + $firstToken = $subuserObject->generateSetupToken(); + $secondToken = $subuserObject->generateSetupToken(); + + try { + expect((new \objects\subusers_o())->getSubuserBySetupToken($firstToken))->toBeNull(); + expect((new \objects\subusers_o())->getSubuserBySetupToken($secondToken))->not->toBeNull(); + } finally { + (new \objects\subusers_o())->invalidateSetupToken($secondToken); + } +}); + +it('validates setup identifiers before setting the driver password', function (): void { + api_test_covers('POST /subusers/setup', 'failure'); + + $existing = api_fixtures()->createSubuser([ + 'username' => 'existing-driver-setup', + ]); + $pending = api_fixtures()->createSubuser([ + 'password_plaintext' => null, + 'username' => 'pending-driver-setup', + 'name' => 'Pending Driver', + ]); + $pendingObject = (new \objects\subusers_o())->select((int)$pending['id']); + $pendingObject->getObjectProperties(); + $token = $pendingObject->generateSetupToken(); + + try { + $response = api_client()->post('/subusers/setup', [ + 'token' => $token, + 'name' => 'Pending Driver', + 'username' => $existing['username'], + 'password' => 'ValidPass123', + ]); + + $response + ->assertStatus(400) + ->assertEnvelope() + ->assertSuccess(false) + ->assertMessage('Account already exists with this username'); + + $row = api_fixtures()->fetchRowById('subusers', (int)$pending['id']); + expect($row['password'] ?? null)->toBeNull(); + expect((new \objects\subusers_o())->getSubuserBySetupToken($token))->not->toBeNull(); + } finally { + (new \objects\subusers_o())->invalidateSetupToken($token); + } }); it('lists chauffeur grants across customers for superusers', function (): void { diff --git a/services/nginx/app/tests/Support/Api/ApiFixtures.php b/services/nginx/app/tests/Support/Api/ApiFixtures.php index e3cd1b8b..42b2723f 100644 --- a/services/nginx/app/tests/Support/Api/ApiFixtures.php +++ b/services/nginx/app/tests/Support/Api/ApiFixtures.php @@ -916,14 +916,16 @@ final class ApiFixtures public function createSubuser(array $attributes = []): array { $username = (string)($attributes['username'] ?? ('api-subuser-' . strtolower($this->uniqueSuffix()))); - $passwordPlaintext = (string)($attributes['password_plaintext'] ?? 'Secret123!'); + $passwordPlaintext = array_key_exists('password_plaintext', $attributes) + ? $attributes['password_plaintext'] + : 'Secret123!'; $name = (string)($attributes['name'] ?? 'API Subuser'); $email = (string)($attributes['email'] ?? ($username . '@example.test')); $now = $this->now(); $subuserId = $this->insertRow('subusers', [ 'username' => $username, - 'password' => password_hash($passwordPlaintext, PASSWORD_DEFAULT), + 'password' => $passwordPlaintext === null ? null : password_hash((string)$passwordPlaintext, PASSWORD_DEFAULT), 'name' => $name, 'email' => $email, 'phone_country_code' => 45, @@ -1064,6 +1066,42 @@ final class ApiFixtures return $token; } + /** + * @param array $attributes + * @return array + */ + public function createPasskey(array $attributes): array + { + $userId = (int)($attributes['user_id'] ?? 0); + if ($userId <= 0) { + throw new RuntimeException('Passkey fixtures require user_id.'); + } + + $credentialId = (string)($attributes['credential_id'] ?? ('credential-' . strtolower($this->uniqueSuffix()))); + $passkeyId = $this->insertRow('passkeys', [ + 'user_id' => $userId, + 'is_subuser' => !empty($attributes['is_subuser']) ? 1 : 0, + 'credential_id' => $credentialId, + 'public_key' => $attributes['public_key'] ?? str_repeat('A', 64), + 'algorithm' => $attributes['algorithm'] ?? 'ES256', + 'transports' => json_encode($attributes['transports'] ?? ['internal'], JSON_UNESCAPED_SLASHES), + 'sign_count' => (int)($attributes['sign_count'] ?? 0), + 'backup_state' => json_encode($attributes['backup_state'] ?? new \stdClass(), JSON_UNESCAPED_SLASHES), + 'name' => $attributes['name'] ?? 'API test passkey', + 'created_at' => $attributes['created_at'] ?? $this->now(), + 'updated_at' => $attributes['updated_at'] ?? $this->now(), + 'deleted_at' => $attributes['deleted_at'] ?? null, + ]); + + $this->cleanup->add(fn() => $this->deleteById('passkeys', $passkeyId)); + + return [ + 'id' => $passkeyId, + 'credential_id' => $credentialId, + 'user_id' => $userId, + ]; + } + public function addCustomerAttribute(int $userId, string $attribute): int { $attributeId = $this->insertRow('customer_attributes', [ diff --git a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayArtifactLocatorTest.php b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayArtifactLocatorTest.php index 50ac48a2..91bdd4c1 100644 --- a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayArtifactLocatorTest.php +++ b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayArtifactLocatorTest.php @@ -65,12 +65,16 @@ function remove_edge_gateway_temp_path(string $path): void it('resolves edge-agent artifacts from a supported runtime layout', function (): void { $path = edge_gateway_agent_artifact_locator::resolve('agent.php', app_path()); + $normalizedPath = str_replace('\\', '/', $path); - expect(str_replace('\\', '/', $path))->toEndWith('/resources/edge-gateway-agent/agent.php'); + expect( + str_ends_with($normalizedPath, '/edge-agent/build/install/agent.php') + || str_ends_with($normalizedPath, '/resources/edge-gateway-agent/agent.php') + )->toBeTrue(); expect(is_file($path))->toBeTrue(); }); -it('prioritizes router resources before mounted and baked-in artifact directories', function (): void { +it('prioritizes generated edge-agent build output before router, mounted, and baked-in artifact directories', function (): void { with_edge_gateway_artifact_env(['EDGE_AGENT_ARTIFACT_DIR' => null], function (): void { $candidatePaths = array_map( static fn(string $path): string => str_replace('\\', '/', $path), @@ -82,16 +86,75 @@ it('prioritizes router resources before mounted and baked-in artifact directorie ) ); - expect(array_slice($candidatePaths, 0, 3))->toBe([ + expect(array_slice($candidatePaths, 0, 5))->toBe([ + '/edge-agent/build/install/agent.php', + '/services/edge-agent/build/install/agent.php', + '/var/edge-agent/build/install/agent.php', + '/var/www/edge-agent/build/install/agent.php', '/var/www/html/resources/edge-gateway-agent/agent.php', - '/services/edge-agent/php-agent/agent.php', - '/opt/truckwash-edge-agent-artifacts/agent.php', ]); + expect($candidatePaths)->toContain('/services/edge-agent/php-agent/agent.php'); + expect($candidatePaths)->toContain('/opt/truckwash-edge-agent-artifacts/agent.php'); expect($candidatePaths)->toContain('/var/edge-agent/php-agent/agent.php'); expect($candidatePaths)->toContain('/var/www/edge-agent/php-agent/agent.php'); }); }); +it('prioritizes EDGE_AGENT_ARTIFACT_DIR before generated edge-agent build output', function (): void { + with_edge_gateway_artifact_env(['EDGE_AGENT_ARTIFACT_DIR' => '/tmp/custom-edge-artifacts'], function (): void { + $candidatePaths = array_map( + static fn(string $path): string => str_replace('\\', '/', $path), + edge_gateway_agent_artifact_locator::candidatePaths( + 'agent.php', + '/var/www/html', + '/services/edge-agent/php-agent', + '/opt/truckwash-edge-agent-artifacts' + ) + ); + + expect(array_slice($candidatePaths, 0, 4))->toBe([ + '/tmp/custom-edge-artifacts/agent.php', + '/edge-agent/build/install/agent.php', + '/services/edge-agent/build/install/agent.php', + '/var/edge-agent/build/install/agent.php', + ]); + expect($candidatePaths)->toContain('/var/www/html/resources/edge-gateway-agent/agent.php'); + }); +}); + +it('serves a manifest with hashes for the resolved artifacts', function (): void { + $service = new EdgeGatewayInstallServiceHarness(); + $manifest = json_decode($service->readArtifact('manifest.json'), true); + + expect($manifest)->toBeArray() + ->and($manifest['version'] ?? null)->toBe(edge_gateway_manager::DEFAULT_INSTALL_VERSION); + + $artifacts = []; + foreach ((array)($manifest['artifacts'] ?? []) as $artifact) { + if (is_array($artifact)) { + $artifacts[(string)($artifact['name'] ?? '')] = $artifact; + } + } + + foreach ([ + 'agent.php', + 'lan-worker.php', + 'auto-updater.php', + 'docker-compose.gateway.yml', + 'Dockerfile.edge-agent', + 'Dockerfile.lan-worker', + 'Dockerfile.auto-updater', + 'gateway-launcher.sh', + 'truckwash-edge-gateway-stack.service', + 'truckwash-edge-agent.service', + ] as $fileName) { + $path = edge_gateway_agent_artifact_locator::resolve($fileName, app_path()); + expect($artifacts)->toHaveKey($fileName) + ->and($artifacts[$fileName]['sha256'] ?? null)->toBe(hash_file('sha256', $path)) + ->and($artifacts[$fileName]['bytes'] ?? null)->toBe(filesize($path)); + } +}); + it('reads install artifacts through the shared locator', function (): void { $service = new EdgeGatewayInstallServiceHarness(); $contents = $service->readArtifact('truckwash-edge-gateway-stack.service'); diff --git a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayManagerUrlTest.php b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayManagerUrlTest.php index 53176358..b5f03c58 100644 --- a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayManagerUrlTest.php +++ b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayManagerUrlTest.php @@ -75,10 +75,13 @@ it('builds install script urls with the compose edge gateway artifacts and forwa expect($manager->buildInstallCommand('abc123'))->toContain("https://api.truckwash.io:4433/edge-agent/install.sh?token=abc123"); expect($script)->toContain('fetch_http "Verify install token" "https://api.truckwash.io:4433/edge-agent/install-token/verify?token=abc123"'); expect($script)->toContain('INSTALL_STATUS_URL="https://api.truckwash.io:4433/edge-agent/install-token/status"'); + expect($script)->toContain('fetch_http "Download artifact manifest" "https://api.truckwash.io:4433/edge-agent/artifacts/manifest.json" "$INSTALL_DIR/manifest.json"'); expect($script)->toContain('fetch_http "Download PHP edge agent" "https://api.truckwash.io:4433/edge-agent/artifacts/agent.php" "$INSTALL_DIR/agent.php"'); expect($script)->toContain('fetch_http "Download LAN worker" "https://api.truckwash.io:4433/edge-agent/artifacts/lan-worker.php" "$INSTALL_DIR/lan-worker.php"'); expect($script)->toContain('fetch_http "Download compose stack" "https://api.truckwash.io:4433/edge-agent/artifacts/docker-compose.gateway.yml" "$INSTALL_DIR/docker-compose.gateway.yml"'); expect($script)->toContain('fetch_http "Download compose stack service unit" "https://api.truckwash.io:4433/edge-agent/artifacts/truckwash-edge-gateway-stack.service" "$INSTALL_DIR/truckwash-edge-gateway-stack.service"'); + expect($script)->toContain('begin_install_phase "VERIFY_ARTIFACTS" "Verifying edge gateway artifacts"'); + expect($script)->toContain('verify_manifest_artifact "$INSTALL_DIR/manifest.json" "agent.php" "$INSTALL_DIR/agent.php"'); expect($script)->toContain('report_install_status() {'); expect($script)->toContain('begin_install_phase "VERIFY_TOKEN" "Verifying install token"'); expect($script)->toContain('begin_install_phase "WAIT_FOR_CLAIM" "Waiting for gateway heartbeat and claim"'); @@ -98,6 +101,7 @@ it('builds install script urls with the compose edge gateway artifacts and forwa expect($script)->toContain('"composeFileName":"docker-compose.gateway.yml"'); expect($script)->toContain('"stateDatabasePath":"/opt/truckwash-edge-agent/runtime/gateway-state.sqlite"'); expect($script)->toContain('"operationPollTimeoutSeconds":20'); + expect($script)->toContain('"installedVersion":"compose-php-agent-v3"'); expect($script)->toContain('"brokerUrl":"https://api.truckwash.io:4433/edge-broker"'); expect($script)->not->toContain('"shellActionPollTimeoutSeconds"'); }); diff --git a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayRouteWiringTest.php b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayRouteWiringTest.php index 6330fc22..b74e7147 100644 --- a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayRouteWiringTest.php +++ b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayRouteWiringTest.php @@ -34,6 +34,7 @@ it('registers PHP edge agent routes for operations and legacy relay command poll expect($route)->toContain("'/edge-agent/install-token/verify'"); expect($route)->toContain("'/edge-agent/install-token/status'"); expect($route)->toContain("'/edge-agent/install.sh'"); + expect($route)->toContain("'/edge-agent/artifacts/manifest.json'"); expect($route)->toContain("'/edge-agent/artifacts/agent.php'"); expect($route)->toContain("'/edge-agent/artifacts/lan-worker.php'"); expect($route)->toContain("'/edge-agent/artifacts/auto-updater.php'"); diff --git a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayUpdateLifecycleTest.php b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayUpdateLifecycleTest.php index d642d75c..34fec0a0 100644 --- a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayUpdateLifecycleTest.php +++ b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayUpdateLifecycleTest.php @@ -24,13 +24,19 @@ it('builds the installer around the compose stack artifacts and management polli expect($autoUpdaterSource)->not->toBeFalse(); expect($autoUpdaterDockerfileSource)->not->toBeFalse(); expect($managerSource)->toContain("'operationPollTimeoutSeconds' => self::COMMAND_POLL_TIMEOUT_SECONDS"); + expect($managerSource)->toContain("public const DEFAULT_INSTALL_VERSION = 'compose-php-agent-v3'"); + expect($managerSource)->toContain("'installedVersion' => self::DEFAULT_INSTALL_VERSION"); expect($managerSource)->toContain('fetch_http "Verify install token" "__VERIFY_URL__"'); + expect($managerSource)->toContain('fetch_http "Download artifact manifest" "__MANIFEST_URL__" "$INSTALL_DIR/manifest.json"'); expect($managerSource)->toContain('fetch_http "Download PHP edge agent" "__AGENT_URL__" "$INSTALL_DIR/agent.php"'); expect($managerSource)->toContain('fetch_http "Download LAN worker" "__WORKER_URL__" "$INSTALL_DIR/lan-worker.php"'); expect($managerSource)->toContain('fetch_http "Download auto-updater" "__AUTO_UPDATER_URL__" "$INSTALL_DIR/auto-updater.php"'); expect($managerSource)->toContain('fetch_http "Download compose stack" "__COMPOSE_URL__" "$INSTALL_DIR/docker-compose.gateway.yml"'); expect($managerSource)->toContain('fetch_http "Download auto-updater Dockerfile" "__AUTO_UPDATER_DOCKERFILE_URL__" "$INSTALL_DIR/Dockerfile.auto-updater"'); expect($managerSource)->toContain('fetch_http "Download compose stack service unit" "__STACK_SERVICE_URL__" "$INSTALL_DIR/truckwash-edge-gateway-stack.service"'); + expect($managerSource)->toContain('verify_manifest_artifact()'); + expect($managerSource)->toContain('begin_install_phase "VERIFY_ARTIFACTS" "Verifying edge gateway artifacts"'); + expect($managerSource)->toContain('run_step "Verifying PHP edge agent" verify_manifest_artifact "$INSTALL_DIR/manifest.json" "agent.php" "$INSTALL_DIR/agent.php"'); expect($managerSource)->toContain('log_error "Request: GET ${url}"'); expect($managerSource)->toContain('log_error "Response body preview (first 400 bytes):"'); expect($managerSource)->toContain('run_step "Installing base packages" apt-get install -y curl ca-certificates docker.io php-cli php-curl php-mbstring php-sqlite3'); @@ -72,6 +78,8 @@ it('builds the installer around the compose stack artifacts and management polli expect($managerSource)->not->toContain('agent.mjs'); expect($managerSource)->toContain("'brokerUrl' => \$this->buildBrokerPublicUrl()"); expect($installServiceSource)->toContain('normalizeLineEndings($this->manager()->buildInstallScript($plainToken))'); + expect($installServiceSource)->toContain("'manifest.json' => 'application/json; charset=utf-8'"); + expect($installServiceSource)->toContain("'version' => edge_gateway_manager::DEFAULT_INSTALL_VERSION"); expect($installServiceSource)->toContain('str_replace(["\r\n", "\r"], "\n", $contents)'); expect($serviceSource)->toContain('Description=TruckWash Edge Agent Compatibility Unit'); expect($serviceSource)->toContain('ExecStart=/opt/truckwash-edge-agent/gateway-launcher.sh up'); @@ -129,6 +137,7 @@ it('builds the installer around the compose stack artifacts and management polli expect($composeSource)->toContain('container_name: truckwash-minio'); expect($composeSource)->toContain('container_name: truckwash-auto-updater'); expect($agentSource)->toContain('private string $controlPlaneStatusPath;'); + expect($agentSource)->toContain('compose-php-agent-v3'); expect($agentSource)->toContain('control-plane-status.json'); expect($agentSource)->toContain("'control_plane_status' => \$this->buildControlPlaneStatusPayload()"); expect($agentSource)->toContain("'last_heartbeat_attempt_at'");