From f08a77979c8a117cf8922b3cea26f5776ab603b8 Mon Sep 17 00:00:00 2001 From: 0xDevNinja Date: Thu, 2 Jul 2026 16:52:00 +0530 Subject: [PATCH] fix(schema): allow empty files[] in source_media_review artifact MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit review_source_media deliberately returns files:[] with a 'no source media — fully generated production' summary when no user media is supplied or none can be reviewed, but the schema declared files.minItems:1, so that intended artifact failed its own validation. Relax files.minItems to 0 to match the code's deliberate empty-media state (planning_implications still carries an entry, so its minItems:1 remains satisfied). Adds a regression test validating the no-source-media artifact. Closes #269 --- .../artifacts/source_media_review.schema.json | 3 +- tests/lib/test_source_media_review_empty.py | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 tests/lib/test_source_media_review_empty.py diff --git a/schemas/artifacts/source_media_review.schema.json b/schemas/artifacts/source_media_review.schema.json index 7e603502..0e89cdc8 100644 --- a/schemas/artifacts/source_media_review.schema.json +++ b/schemas/artifacts/source_media_review.schema.json @@ -9,6 +9,7 @@ "version": { "type": "string", "const": "1.0" }, "files": { "type": "array", + "description": "Reviewed source files. Empty when no user media was supplied (or none could be reviewed) — a valid 'fully generated production' state that review_source_media reports explicitly.", "items": { "type": "object", "required": ["path", "media_type", "reviewed"], @@ -64,7 +65,7 @@ }, "additionalProperties": false }, - "minItems": 1 + "minItems": 0 }, "summary": { "type": "string", diff --git a/tests/lib/test_source_media_review_empty.py b/tests/lib/test_source_media_review_empty.py new file mode 100644 index 00000000..54ed39fa --- /dev/null +++ b/tests/lib/test_source_media_review_empty.py @@ -0,0 +1,29 @@ +"""Regression test for source_media_review empty-files artifact validity. + +review_source_media deliberately returns an artifact with files:[] when no user +media was supplied (or none could be reviewed) — a valid "fully generated +production" state. The schema declared files.minItems: 1, so that intended +artifact failed its own schema validation. +""" + +import sys +from pathlib import Path + +PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent +sys.path.insert(0, str(PROJECT_ROOT)) + +from lib.source_media_review import review_source_media # noqa: E402 +from schemas.artifacts import validate_artifact # noqa: E402 + + +def test_no_source_media_produces_schema_valid_artifact(tmp_path): + art = review_source_media([tmp_path / "does-not-exist.mp4"], {}) + assert art["files"] == [] + # Must not raise — this is a legitimate no-source-media artifact. + validate_artifact("source_media_review", art) + + +def test_no_files_at_all_is_schema_valid(): + art = review_source_media([], {}) + assert art["files"] == [] + validate_artifact("source_media_review", art)