[ "tests/test_comfy_transport.py::test_comfy_embed_health_false_without_models", "tests/test_comfy_transport.py::test_default_mode_is_http", "tests/test_comfy_transport.py::test_embed_fetch_copies_from_path", "tests/test_comfy_transport.py::test_embed_fetch_missing_path_returns_none", "tests/test_comfy_transport.py::test_embed_free_vram_is_noop", "tests/test_comfy_transport.py::test_embed_health_routes_to_comfy_embed", "tests/test_comfy_transport.py::test_embed_mode_set", "tests/test_comfy_transport.py::test_embed_run_routes_to_executor", "tests/test_comfy_transport.py::test_embed_upload_copies_into_input_dir", "tests/test_comfy_transport.py::test_output_node_ids_picks_saveimage", "tests/test_engine_mock.py::TestChoiceFlow::test_apply_choice_effects", "tests/test_engine_mock.py::TestChoiceFlow::test_choice_affection_triggers", "tests/test_engine_mock.py::TestChoiceFlow::test_choices_set_by_model", "tests/test_engine_mock.py::TestSaveLoad::test_cast_persistence_across_saves", "tests/test_engine_mock.py::TestSaveLoad::test_scene_state_roundtrip", "tests/test_engine_mock.py::TestStreaming::test_dialogue_recorded_via_stream", "tests/test_engine_mock.py::TestStreaming::test_multiline_tool_call_not_split", "tests/test_engine_mock.py::TestStreaming::test_stream_final_matches_blocking", "tests/test_engine_mock.py::TestVNTurnLoop::test_cast_lock_cleanup", "tests/test_engine_mock.py::TestVNTurnLoop::test_expression_changes_in_narration", "tests/test_engine_mock.py::TestVNTurnLoop::test_first_turn_returns_narration", "tests/test_engine_mock.py::TestVNTurnLoop::test_multi_turn_preserves_state", "tests/test_engine_mock.py::TestVNTurnLoop::test_tool_calls_parsed_in_narration", "tests/test_trace_log.py::test_mock_model_is_not_logged", "tests/test_trace_log.py::test_real_model_turn_is_logged", "tests/test_trace_log.py::test_trace_disabled_by_env", "tests/test_unit.py::TestCastLock::test_check_case_insensitive", "tests/test_unit.py::TestCastLock::test_check_nonexistent_character", "tests/test_unit.py::TestCastLock::test_check_valid_character", "tests/test_unit.py::TestCastLock::test_clean_noncast_dialogue", "tests/test_unit.py::TestCastLock::test_repair_cast_violation_flags", "tests/test_unit.py::TestCastMember::test_character_immutability", "tests/test_unit.py::TestCastMember::test_expression_map_completeness", "tests/test_unit.py::TestCastMember::test_get_sprite_fallback", "tests/test_unit.py::TestCastPipeline::test_cast_character_identity", "tests/test_unit.py::TestCastPipeline::test_cast_to_dict_roundtrip", "tests/test_unit.py::TestCastPipeline::test_curated_cast_has_all_expressions", "tests/test_unit.py::TestCastPipeline::test_curated_cast_sprite_paths_exist", "tests/test_unit.py::TestCastPipeline::test_pipeline_returns_list", "tests/test_unit.py::TestCastPipeline::test_standard_expressions_constant", "tests/test_unit.py::TestEnterExitCharacter::test_enter_character_adds_to_present", "tests/test_unit.py::TestEnterExitCharacter::test_enter_character_cast_lock_violation", "tests/test_unit.py::TestEnterExitCharacter::test_enter_character_idempotent", "tests/test_unit.py::TestEnterExitCharacter::test_enter_character_routed", "tests/test_unit.py::TestEnterExitCharacter::test_exit_character_cast_lock_violation", "tests/test_unit.py::TestEnterExitCharacter::test_exit_character_not_present_no_error", "tests/test_unit.py::TestEnterExitCharacter::test_exit_character_removes_from_present", "tests/test_unit.py::TestEnterExitCharacter::test_exit_character_routed", "tests/test_unit.py::TestEnterExitCharacter::test_parse_enter_character", "tests/test_unit.py::TestEnterExitCharacter::test_parse_exit_character", "tests/test_unit.py::TestExpressionState::test_choice_expression_changes_applied", "tests/test_unit.py::TestExpressionState::test_invalid_expression_leaves_state", "tests/test_unit.py::TestExpressionState::test_set_expression_updates_scene_state", "tests/test_unit.py::TestExpressionState::test_state_banner_shows_expressions", "tests/test_unit.py::TestSaveLoadJson::test_engine_save_load_roundtrip", "tests/test_unit.py::TestSaveLoadJson::test_load_missing_slot_raises", "tests/test_unit.py::TestSaveLoadJson::test_savedata_dict_roundtrip", "tests/test_unit.py::TestSceneState::test_affection_flags", "tests/test_unit.py::TestSceneState::test_has_affection", "tests/test_unit.py::TestSceneState::test_initial_state", "tests/test_unit.py::TestSceneState::test_present_characters", "tests/test_unit.py::TestSelectiveVoicing::test_dialogue_recorded_in_scene", "tests/test_unit.py::TestSelectiveVoicing::test_no_voice_without_expression_change", "tests/test_unit.py::TestSelectiveVoicing::test_voices_line_after_expression_change", "tests/test_unit.py::TestSetBackgroundTool::test_parse_set_background", "tests/test_unit.py::TestSetBackgroundTool::test_set_background_mutation", "tests/test_unit.py::TestSetBackgroundTool::test_set_background_requires_key", "tests/test_unit.py::TestSetBackgroundTool::test_set_background_routed", "tests/test_unit.py::TestToolParsing::test_loads_lenient_apostrophe_in_single_quoted_value", "tests/test_unit.py::TestToolParsing::test_loads_lenient_bare_keys_with_single_quoted_values", "tests/test_unit.py::TestToolParsing::test_loads_lenient_garbage_still_raises", "tests/test_unit.py::TestToolParsing::test_loads_lenient_mixed_quoting", "tests/test_unit.py::TestToolParsing::test_loads_lenient_preserves_colon_in_values", "tests/test_unit.py::TestToolParsing::test_loads_lenient_single_quoted_python_repr", "tests/test_unit.py::TestToolParsing::test_loads_lenient_strict_json_unchanged", "tests/test_unit.py::TestToolParsing::test_no_tools_returns_empty", "tests/test_unit.py::TestToolParsing::test_offer_choices_lenient_loose_json", "tests/test_unit.py::TestToolParsing::test_offer_choices_with_apostrophes_routes_ok", "tests/test_unit.py::TestToolParsing::test_parse_advance_scene", "tests/test_unit.py::TestToolParsing::test_parse_apostrophe_in_double_quoted_arg", "tests/test_unit.py::TestToolParsing::test_parse_apostrophe_in_plain_single_quoted_arg", "tests/test_unit.py::TestToolParsing::test_parse_apostrophe_in_trailing_single_quoted_arg", "tests/test_unit.py::TestToolParsing::test_parse_bare_unquoted_json_value", "tests/test_unit.py::TestToolParsing::test_parse_choices_with_apostrophes", "tests/test_unit.py::TestToolParsing::test_parse_multiple_tools", "tests/test_unit.py::TestToolParsing::test_parse_offer_choices", "tests/test_unit.py::TestToolParsing::test_parse_save_checkpoint", "tests/test_unit.py::TestToolParsing::test_parse_set_expression", "tests/test_unit.py::TestToolRouting::test_advance_scene_mutation", "tests/test_unit.py::TestToolRouting::test_apply_choice_effects", "tests/test_unit.py::TestToolRouting::test_offer_choices_sets_state", "tests/test_unit.py::TestToolRouting::test_set_expression_invalid_character", "tests/test_unit.py::TestToolRouting::test_set_expression_valid", "tests/test_validate.py::TestNgramOverlap::test_disjoint_is_zero", "tests/test_validate.py::TestNgramOverlap::test_identical_is_one", "tests/test_validate.py::TestNgramOverlap::test_too_short_is_none", "tests/test_validate.py::TestPromptEnums::test_enums_injected_into_prompt", "tests/test_validate.py::TestRecentHistory::test_char_cap", "tests/test_validate.py::TestRecentHistory::test_empty_log", "tests/test_validate.py::TestRecentHistory::test_keeps_tail_turns", "tests/test_validate.py::TestRecentHistory::test_prompt_injection", "tests/test_validate.py::TestValidateTurn::test_bad_background", "tests/test_validate.py::TestValidateTurn::test_bad_choices_json", "tests/test_validate.py::TestValidateTurn::test_bad_mood_and_expression", "tests/test_validate.py::TestValidateTurn::test_cast_from_system_prompt", "tests/test_validate.py::TestValidateTurn::test_cast_violation_dialogue", "tests/test_validate.py::TestValidateTurn::test_cast_violation_tool_character", "tests/test_validate.py::TestValidateTurn::test_clean_turn_passes", "tests/test_validate.py::TestValidateTurn::test_clean_unicode_not_flagged", "tests/test_validate.py::TestValidateTurn::test_duplicate_choice_ids", "tests/test_validate.py::TestValidateTurn::test_empty_completion_rejected", "tests/test_validate.py::TestValidateTurn::test_malformed_tool_call", "tests/test_validate.py::TestValidateTurn::test_mojibake_rejected", "tests/test_validate.py::TestValidateTurn::test_no_choices_but_narration_ok", "tests/test_validate.py::TestValidateTurn::test_overlap_recorded_with_history", "tests/test_validate.py::TestValidateTurn::test_unknown_tool" ]