@@ -4912,6 +4912,53 @@ def test_save_profile_action_allows_explicit_size_tradeoff_approval(self) -> Non
49124912 self.assertEqual(saved_payloads[0]["accepted_at"], "2026-05-24T04:40:00+00:00")
49134913 self.assertTrue(merged_advice[0]["operator_approved_size_tradeoff"])
49144914
4915+ def test_save_profile_action_allows_under_target_quality_increase_without_tradeoff_confirmation(self) -> None:
4916+ saved_payloads: list[folder_actions_runtime.ActionPayload] = []
4917+ merged_advice: list[folder_actions_runtime.ActionPayload] = []
4918+ calibration_payload: folder_actions_runtime.ActionPayload = {
4919+ "mode": "sample",
4920+ "job_id": "sample-1",
4921+ "action": "ai_tune",
4922+ "review_media_ready": True,
4923+ "policy": {"video": {"target_vmaf": 95.0, "max_encoded_percent": 80}},
4924+ "sample_item": {
4925+ "library_item_id": 1,
4926+ "resolved_policy": {"video": {"target_vmaf": 92.0, "max_encoded_percent": 80}},
4927+ },
4928+ "sample_result": {"predicted_total_size_bytes": 250 * 1024 * 1024},
4929+ }
4930+
4931+ result = folder_actions_runtime.save_profile_action(
4932+ self.config,
4933+ "tv/show",
4934+ now_iso=lambda: "2026-05-24T04:40:00+00:00",
4935+ load_sample_item=lambda *_args, **_kwargs: None,
4936+ load_calibration_state=lambda *_args, **_kwargs: dict(calibration_payload),
4937+ calibration_draft_hash=web_app._calibration_draft_hash,
4938+ save_calibration_state=lambda _config, _prefix, payload: saved_payloads.append(dict(payload)),
4939+ load_advice_state=lambda *_args, **_kwargs: {
4940+ "request_disposition": "honored",
4941+ "operator_request": {
4942+ "operator_confirmed": True,
4943+ "request_type": "size_budget",
4944+ "budget_bytes": 300 * 1024 * 1024,
4945+ "budget_label": "300 MB per episode",
4946+ "applied_policy": None,
4947+ },
4948+ },
4949+ record_visual_approval_artifact=lambda *_args, **_kwargs: {"artifact_id": "approval-1"},
4950+ merge_advice_state=lambda _config, _prefix, payload: merged_advice.append(dict(payload)),
4951+ upsert_override=lambda *_args, **_kwargs: None,
4952+ auto_queue_folder_encode=lambda *_args, **_kwargs: {"ok": True, "message": "Queued folder encode."},
4953+ confirm_high_impact=True,
4954+ reviewed_draft_hash=web_app._calibration_draft_hash(calibration_payload),
4955+ )
4956+
4957+ self.assertTrue(result["ok"])
4958+ self.assertTrue(result["queued"])
4959+ self.assertEqual(saved_payloads[0]["accepted_at"], "2026-05-24T04:40:00+00:00")
4960+ self.assertFalse(merged_advice[0]["operator_approved_size_tradeoff"])
4961+
49154962 def test_run_sampled_calibration_keeps_review_directory_for_approval(self) -> None:
49164963 source_path = self._create_source_file("episode-review.mkv")
49174964 preview_dir = self.config.paths.review_dir / "run-123" / "item-00"
0 commit comments