GODOT ?= godot .PHONY: editor run test test-s0 test-s1 test-s2 test-s3 test-s4 test-s5 test-s6 test-mvp test-acceptance test-ui test-perf test-perf-full check export-windows editor: $(GODOT) --editor --path . run: $(GODOT) --path . test: $(MAKE) test-s0 $(MAKE) test-s1 $(MAKE) test-s2 $(MAKE) test-s3 $(MAKE) test-supply $(MAKE) test-business $(MAKE) test-s4 $(MAKE) test-s5 $(MAKE) test-s6 $(MAKE) test-mvp $(MAKE) test-acceptance $(MAKE) test-ui $(MAKE) test-transport $(MAKE) test-perf test-s0: $(GODOT) --headless --path . --script res://tests/run_tests.gd $(GODOT) --headless --path . --script res://tests/s0/test_definition_registry.gd $(GODOT) --headless --path . --script res://tests/s0/test_command_transaction.gd $(GODOT) --headless --path . --script res://tests/s0/test_determinism.gd $(GODOT) --headless --path . --script res://tests/s0/test_stable_id_generator.gd $(GODOT) --headless --path . --script res://tests/s0/test_domain_events.gd $(GODOT) --headless --path . --script res://tests/s0/test_runtime_integration.gd test-s1: $(GODOT) --headless --path . --script res://tests/s1/test_dimension_batch_save.gd $(GODOT) --headless --path . --script res://tests/s1/test_facility_resize_preview.gd $(GODOT) --headless --path . --script res://tests/s1/test_weighted_resize_runtime.gd $(GODOT) --headless --path . --script res://tests/s1/test_original_facility_dimensions.gd $(GODOT) --headless --path . --script res://tests/s1/test_world_service.gd $(GODOT) --headless --path . --script res://tests/s1/test_path_service.gd $(GODOT) --headless --path . --script res://tests/s1/test_path_snapshot_transit_guard.gd $(GODOT) --headless --path . --script res://tests/s1/test_path_congestion.gd $(GODOT) --headless --path . --script res://tests/s1/test_construction_service.gd $(GODOT) --headless --path . --script res://tests/s1/test_excavation_service.gd $(GODOT) --headless --path . --script res://tests/s1/test_spatial_subslot_service.gd $(GODOT) --headless --path . --script res://tests/s1/test_route_subslot_path_adapter.gd $(GODOT) --headless --path . --script res://tests/s1/test_facility_infrastructure_projector.gd $(GODOT) --headless --path . --script res://tests/s1/test_runtime_infrastructure_integration.gd $(GODOT) --headless --path . --script res://tests/s1/test_runtime_world_construction.gd test-s2: $(GODOT) --headless --path . --script tests/environment/test_cleaning_access.gd $(GODOT) --headless --path . --script tests/ui/test_cleaning_gameplay.gd $(GODOT) --headless --path . --script tests/environment/test_runtime_cleanliness.gd $(GODOT) --headless --path . --script res://tests/environment/test_facility_cleanliness.gd $(GODOT) --headless --path . --script res://tests/s2/test_facility_upkeep_accrual.gd $(GODOT) --headless --path . --script res://tests/s2/test_facility_upkeep_settlement.gd $(GODOT) --headless --path . --script res://tests/s2/test_facility_service.gd $(GODOT) --headless --path . --script res://tests/s2/test_service_start_slots.gd $(GODOT) --headless --path . --script res://tests/s2/test_inventory_logistics.gd $(GODOT) --headless --path . --script res://tests/s2/test_economy_service.gd $(GODOT) --headless --path . --script res://tests/s2/test_ledger_backed_resources.gd $(GODOT) --headless --path . --script res://tests/s2/test_mana_network_service.gd $(GODOT) --headless --path . --script res://tests/s2/test_mana_reserve_cycle.gd $(GODOT) --headless --path . --script res://tests/s2/test_runtime_mana_reserve.gd $(GODOT) --headless --path . --script res://tests/s2/test_mana_reserve_new_pid.gd -- writer $(GODOT) --headless --path . --script res://tests/s2/test_mana_reserve_new_pid.gd -- reader $(GODOT) --headless --path . --script res://tests/s2/test_runtime_operations_cycle.gd test-s3: $(GODOT) --headless --path . --script res://tests/s3/test_runtime_staff_assignment.gd $(GODOT) --headless --path . --script res://tests/s3/test_guest_service.gd $(GODOT) --headless --path . --script res://tests/s3/test_staff_service.gd $(GODOT) --headless --path . --script res://tests/s3/test_staff_payroll_operations.gd $(GODOT) --headless --path . --script res://tests/s3/test_runtime_actor_cycle.gd $(GODOT) --headless --path . --script res://tests/s3/test_runtime_actor_hardening.gd $(GODOT) --headless --path . --script res://tests/s3/test_runtime_path_traffic.gd test-s4: $(GODOT) --headless --path . --script res://tests/s4/test_relationship_event_service.gd $(GODOT) --headless --path . --script res://tests/s4/test_placement_risk_preview_service.gd $(GODOT) --headless --path . --script res://tests/s4/test_runtime_relationship_events.gd test-s5: $(GODOT) --headless --path . --script res://tests/s5/test_authority_service.gd $(GODOT) --headless --path . --script res://tests/s5/test_defense_service.gd $(GODOT) --headless --path . --script res://tests/s5/test_runtime_authority_cycle.gd $(GODOT) --headless --path . --script res://tests/s5/test_runtime_defense_cycle.gd test-s6: $(GODOT) --headless --path . --script res://tests/s6/test_save_operations.gd $(GODOT) --headless --path . --script res://tests/s6/test_save_preflight.gd $(GODOT) --headless --path . --script res://tests/s6/test_save_recovery_preservation.gd $(GODOT) --headless --path . --script res://tests/s6/test_runtime_snapshot_serialization.gd $(GODOT) --headless --path . --script res://tests/s6/test_performance_budget.gd $(GODOT) --headless --path . --script res://tests/s6/test_runtime_save_lifecycle.gd test-mvp: $(GODOT) --headless --path . --script res://tests/mvp/test_premium_room_guest_flow.gd $(GODOT) --headless --path . --script res://tests/mvp/test_runtime_mana_depletion.gd $(GODOT) --headless --path . --script res://tests/mvp/test_premium_room.gd $(GODOT) --headless --path . --script res://tests/mvp/test_original_room_zones.gd $(GODOT) --headless --path . --script res://tests/mvp/test_upkeep_loss_streak.gd $(GODOT) --headless --path . --script res://tests/mvp/test_upkeep_legacy_midnight.gd $(GODOT) --headless --path . --script res://tests/mvp/test_runtime_upkeep.gd $(GODOT) --headless --path . --script res://tests/mvp/test_upkeep_construction_boundaries.gd $(GODOT) --headless --path . --script res://tests/mvp/test_operations_coordinator.gd $(GODOT) --headless --path . --script res://tests/mvp/test_mvp_content_catalog.gd $(GODOT) --headless --path . --script res://tests/mvp/test_progression_service.gd $(GODOT) --headless --path . --script res://tests/mvp/test_runtime_content_progression.gd $(GODOT) --headless --path . --script res://tests/mvp/test_runtime_operations_integration.gd test-acceptance: $(GODOT) --headless --path . --script res://tests/mvp/test_runtime_operations_acceptance.gd test-ui: $(GODOT) --headless --path . --script res://tests/mvp/test_chapel_boundaries.gd $(GODOT) --headless --path . --script res://tests/ui/test_chapel_gameplay.gd $(GODOT) --headless --path . --script res://tests/mvp/test_chapel_service.gd $(GODOT) --headless --path . --script res://tests/ui/test_dashboard_coalescing.gd $(GODOT) --headless --path . --script res://tests/mvp/test_anri_floor_pricing.gd $(GODOT) --headless --path . --script res://tests/mvp/test_fine_cleaning_effect.gd $(GODOT) --headless --path . --script res://tests/mvp/test_amelia_donations.gd $(GODOT) --headless --path . --script res://tests/ui/test_anri_recruitment.gd $(GODOT) --headless --path . --script res://tests/ui/test_layer_skin.gd $(GODOT) --headless --path . --script res://tests/ui/test_world_tree_rank.gd $(GODOT) --headless --path . --script res://tests/ui/test_rank_pointer.gd $(GODOT) --headless --path . --script res://tests/ui/test_layer_presentation.gd $(GODOT) --headless --path . --script res://tests/ui/test_original_build_pointer.gd $(GODOT) --headless --path . --script res://tests/ui/test_dimension_migration_ui.gd python3 tools/run_upkeep_ui_flow.py --godot "$(GODOT)" $(GODOT) --headless --path . --script res://tests/ui/test_upkeep_inspector.gd $(GODOT) --headless --path . --script res://tests/ui/test_staff_rest.gd $(GODOT) --headless --path . --script res://tests/ui/test_staff_rescue.gd $(GODOT) --headless --path . --script res://tests/ui/test_guest_observation.gd $(GODOT) --headless --path . --script res://tests/ui/test_guest_decision_log.gd $(MAKE) test-pixel-ui $(GODOT) --headless --path . --script res://tests/ui/test_main_dashboard.gd $(GODOT) --headless --path . --script res://tests/ui/test_staff_management.gd $(GODOT) --headless --path . --script res://tests/ui/test_supply_management.gd $(GODOT) --headless --path . --script res://tests/ui/test_supply_auto_purchase_ui.gd $(GODOT) --headless --path . --script res://tests/ui/test_business_management.gd $(GODOT) --headless --path . --script res://tests/ui/test_elevator_management.gd $(MAKE) test-opening test-perf: $(GODOT) --headless --path . --script res://tests/performance/test_facility_reachability.gd $(GODOT) --headless --path . --script res://tests/performance/test_snapshot_ownership.gd $(GODOT) --headless --path . --script res://tests/performance/test_world_snapshot_cache.gd $(GODOT) --headless --path . --script res://tests/performance/test_lazy_digest.gd $(GODOT) --headless --path . --script res://tests/performance/test_path_membership.gd $(GODOT) --headless --path . --script res://tests/performance/test_system_optimization.gd $(GODOT) --headless --path . --script res://tests/performance/test_digest_performance.gd $(GODOT) --headless --path . --script res://tests/performance/test_perf_mvp_001.gd test-perf-full: PERF_MVP_FULL=1 $(GODOT) --headless --path . --script res://tests/performance/test_perf_mvp_001.gd check: $(GODOT) --headless --editor --path . --quit $(GODOT) --headless --path . --quit-after 2 export-windows: mkdir -p build/windows $(GODOT) --headless --path . --export-release "Windows Desktop" $(MAKE) test-exported-opening # Pixel cutaway: interactive disposable inn, capture and input regression. .PHONY: preview-pixel capture-pixel test-pixel-ui preview-pixel: THE_TREE_PIXEL_PLAY=1 $(GODOT) --path . --script res://tests/ui/capture_pixel_tower.gd capture-pixel: $(GODOT) --path . --script res://tests/ui/capture_pixel_tower.gd test-pixel-ui: $(GODOT) --headless --path . --script res://tests/ui/test_room_presentation.gd $(GODOT) --headless --path . --script res://tests/ui/test_pixel_tower.gd .PHONY: test-opening capture-opening test-opening: $(GODOT) --headless --path . --script res://tests/ui/test_first_operating_day.gd capture-opening: THE_TREE_OPENING_CAPTURE=1 $(GODOT) --path . --script res://tests/ui/test_first_operating_day.gd # Paid purchases, kitchen batches, and porter deliveries; isolated test saves. .PHONY: test-supply capture-supply preview-supply test-supply: $(GODOT) --headless --path . --script res://tests/s2/test_kitchen_production.gd $(GODOT) --headless --path . --script res://tests/supply/test_supply_save_migration.gd $(GODOT) --headless --path . --script res://tests/supply/test_supply_logistics_bridge.gd $(GODOT) --headless --path . --script res://tests/supply/test_supply_management_service.gd $(GODOT) --headless --path . --script res://tests/supply/test_supply_auto_purchase.gd $(GODOT) --headless --path . --script res://tests/supply/test_normal_auto_purchase_chain.gd $(GODOT) --headless --path . --script res://tests/supply/test_supply_auto_purchase_boundaries.gd $(GODOT) --headless --path . --script res://tests/supply/test_supply_auto_purchase_destruction.gd $(GODOT) --headless --path . --script res://tests/supply/test_normal_supply_chain.gd capture-supply: THE_TREE_SUPPLY_CAPTURE=1 THE_TREE_SUPPLY_CAPTURE_ONLY=1 $(GODOT) --path . --script res://tests/supply/test_normal_supply_chain.gd preview-supply: THE_TREE_SUPPLY_PREVIEW=1 $(GODOT) --path . --script res://tests/supply/test_normal_supply_chain.gd .PHONY: test-business test-business: $(GODOT) --headless --path . --script res://tests/s2/test_facility_pricing.gd $(GODOT) --headless --path . --script res://tests/business/test_business_operations.gd $(GODOT) --headless --path . --script res://tests/business/test_business_closure.gd .PHONY: preview-business capture-business preview-business: THE_TREE_BUSINESS_PREVIEW=1 THE_TREE_SUPPLY_PREVIEW=1 $(GODOT) --path . --script res://tests/supply/test_normal_supply_chain.gd capture-business: THE_TREE_BUSINESS_UI_CAPTURE=1 $(GODOT) --path . --script res://tests/ui/test_business_management.gd .PHONY: test-transport capture-transport preview-transport test-transport: $(GODOT) --headless --path . --script res://tests/staff/test_dormitory_dimension_migration.gd $(GODOT) --headless --path . --script res://tests/staff/test_staff_dormitory.gd $(GODOT) --headless --path . --script res://tests/staff/test_dormitory_shift_cycle.gd $(GODOT) --headless --path . --script res://tests/staff/test_shift_rush.gd $(GODOT) --headless --path . --script res://tests/staff/test_staff_rest.gd $(GODOT) --headless --path . --script res://tests/staff/test_rescue_elevator.gd $(GODOT) --headless --path . --script res://tests/staff/test_staff_rescue.gd $(GODOT) --headless --path . --script res://tests/staff/test_task_work_clock.gd $(MAKE) test-stairs $(GODOT) --headless --path . --script res://tests/world/test_elevator_topology.gd $(GODOT) --headless --path . --script res://tests/transport/test_elevator_service.gd $(GODOT) --headless --path . --script res://tests/staff/test_staff_commute.gd $(GODOT) --headless --path . --script res://tests/transport/test_transport_save.gd $(GODOT) --headless --path . --script res://tests/transport/test_transport_density_migration.gd $(GODOT) --headless --path . --script res://tests/transport/test_transport_boundaries.gd $(GODOT) --headless --path . --script res://tests/transport/test_runtime_transport.gd capture-transport: THE_TREE_TRANSPORT_CAPTURE=1 $(GODOT) --path . --script res://tests/transport/test_runtime_transport.gd preview-transport: THE_TREE_TRANSPORT_PREVIEW=1 $(GODOT) --path . --script res://tests/transport/test_runtime_transport.gd .PHONY: test-stairs test-transport-comparison test-stairs: $(GODOT) --headless --path . --script res://tests/world/test_path_vertical_policy.gd $(GODOT) --headless --path . --script res://tests/world/test_path_transit_density.gd $(GODOT) --headless --path . --script res://tests/world/test_stair_infrastructure.gd $(GODOT) --headless --path . --script res://tests/world/test_legacy_stairs.gd $(GODOT) --headless --path . --script res://tests/transport/test_runtime_stairs.gd $(GODOT) --headless --path . --script res://tests/ui/test_stair_transport_details.gd test-transport-comparison: $(GODOT) --headless --path . --script res://tests/transport/test_transport_comparison.gd $(GODOT) --headless --path . --script res://tests/transport/test_runtime_transport_comparison.gd # Check the actual shipped data outside this checkout, including first build. WINDOWS_PCK ?= build/windows/TheTree.pck MACOS_APP ?= build/macos/TheTree.app .PHONY: export-macos export-macos: mkdir -p build/macos $(GODOT) --headless --path . --export-release "macOS" "$(MACOS_APP)" python3 tools/verify_exported_opening.py "$(MACOS_APP)/Contents/Resources/The Tree.pck" --godot "$(GODOT)" .PHONY: test-exported-opening test-exported-opening: python3 tools/verify_exported_opening.py "$(WINDOWS_PCK)" --godot "$(GODOT)" # Exhaustive discovery includes comparison suites outside the ordinary smoke run. .PHONY: test-all test-all: python3 tools/run_all_tests.py --godot "$(GODOT)"