{
  "selection": {
    "schema": "adfactory.angle-selection/v1",
    "campaignSha256": "978f5934ac5816e84b6adafae75a53b274c2d4941c8c5cae08ded42ba87e1086",
    "choicesSha256": "8f1d2a6f9cc3661aeac1de9249ff74c204baa59ba96442b7d0f465bc05dea281",
    "selections": [
      {
        "angleId": "forgot-neck",
        "take": 1,
        "source": "jobs/forgot-neck-v03/takes/take_song_1.mp3",
        "openingStem": "reviews/openings/forgot-neck-v03-take_song_1-vocals.wav",
        "listeningReview": "reviews/forgot-neck-v03-listening/evaluation.json",
        "selectionReason": "Third revision take 1 resolves the repeated story block and clears the audio reviewer’s brand-phonetic rejection using the actual English brand spelling. Retains the approved pop-rock groove and hook; completes all dialogue and CTA. Other third-revision take still loops story material.",
        "reviewedUncertainLineIndexes": [
          34,
          70,
          75
        ],
        "uncertainLineReview": [
          {
            "index": 34,
            "expected": "Go Pure, не забувай:",
            "asr": "комп 'ю не забувай",
            "assessment": "English brand in the script is transliterated into Cyrillic by Ukrainian ASR. The retained actual-audio review hears Go Pure and reports no missing words or critical failures; native-speaker pronunciation approval remains pending."
          },
          {
            "index": 70,
            "expected": "Go Pure, не забувай:",
            "asr": "коп 'юр не забувай",
            "assessment": "English brand in the script is transliterated into Cyrillic by Ukrainian ASR. The retained actual-audio review hears Go Pure and reports no missing words or critical failures; native-speaker pronunciation approval remains pending."
          },
          {
            "index": 75,
            "expected": "Go Pure — і в списку є ти!",
            "asr": "коп 'юр і в списку є ти",
            "assessment": "English brand in the script is transliterated into Cyrillic by Ukrainian ASR. The retained actual-audio review hears Go Pure and reports no missing words or critical failures; native-speaker pronunciation approval remains pending."
          }
        ],
        "sourceSha256": "9940f105b9b19e91735f4b13b805ec2c6b14e1108350718b37597b59d8878a59",
        "openingStemSha256": "8db123485800ae4bbe4ae4433e5b5376dad7d0adf7c0c85bf6fa8852d3bbaf6f",
        "vocalOnset": {
          "earliestSeconds": 0.01,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.01,
            0.01,
            0.02
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "trimStartSeconds": 0,
        "trimEndSeconds": 220.52,
        "estimatedFirstVocalSecondsAfterTrim": 0.01,
        "output": "exports/forgot-neck.mp3",
        "hook": "exports/forgot-neck-hook.mp3",
        "media": {
          "duration": 220.551837,
          "decodedDuration": 220.500658,
          "bytes": 5293915,
          "sha256": "4b0d3dae5053c96089ceaef15f5b72f6ad7367ae76cbd88a0365f24cfad533c2"
        },
        "hookMedia": {
          "duration": 3.030204,
          "decodedDuration": 2.979025,
          "bytes": 73395,
          "sha256": "523173fa73e155a3acd6a29322a87fd73aeeb064cb633da7193b0dff78b93279"
        },
        "loudness": {
          "input_i": "-14.47",
          "input_tp": "-1.23",
          "input_lra": "5.60",
          "input_thresh": "-24.51",
          "output_i": "-13.97",
          "output_tp": "-1.00",
          "output_lra": "5.10",
          "output_thresh": "-23.99",
          "normalization_type": "dynamic",
          "target_offset": "-0.23"
        },
        "sourceLoudness": {
          "input_i": "-14.71",
          "input_tp": "-0.47",
          "input_lra": "6.80",
          "input_thresh": "-24.75",
          "output_i": "-13.22",
          "output_tp": "-1.00",
          "output_lra": "5.40",
          "output_thresh": "-23.25",
          "normalization_type": "dynamic",
          "target_offset": "-0.98"
        },
        "asr": {
          "total": 76,
          "matched": 73,
          "uncertain": 3,
          "source": "jobs/forgot-neck-v03/takes/take_song_1.lines.json",
          "sha256": "9788b11b089fd0c7ef496194a39083fc2f426a081321a8d6bda8079db2671892"
        },
        "openingReviewCaveat": "Separated vocal activity measures timing, not word identity. Verify the first sung word separately on the final hook; broad model timing estimates are insufficient.",
        "status": "accepted-for-owner-narrative-validation",
        "ownerValidation": "pending; original musical style approved before expansion"
      },
      {
        "angleId": "scarf-holiday",
        "take": 1,
        "source": "jobs/scarf-holiday-v01/takes/take_song_1.mp3",
        "openingStem": "reviews/openings/scarf-holiday-v01-take_song_1-vocals.wav",
        "listeningReview": "reviews/scarf-holiday-listening-v03/evaluation.json",
        "selectionReason": "Complete narrative candidate retaining the approved disco groove; other take loses the opening in ASR. Extra final refrain retained as a musical reprise; remove instrumental intro and prolonged post-CTA tag. Brand and repeated-refrain alignment require retained review.",
        "reviewedUncertainLineIndexes": [
          29,
          71
        ],
        "uncertainLineReview": [
          {
            "index": 29,
            "expected": "«Гоу п’юр. Крем для зволоження».",
            "asr": "hope your крем для зволоження",
            "assessment": "Brand-name recognition differs from the written phonetics; actual-audio reviewer heard the intended product, native pronunciation remains for owner validation."
          },
          {
            "index": 71,
            "expected": "Роки зі мною. І всі вони рідні!",
            "asr": "руки зі мною і всі вони рідні шар у відпустку я танцювати челю люблю не мушу ховати го п 'юр у моєму ритмі руки зі мною і всі вони рідні",
            "assessment": "SequenceMatcher spans an extra final chorus reprise; all scripted words appear before the reprise, which does not repeat story actions."
          }
        ],
        "sourceSha256": "362643021b55636c820ad6970019b2ee28412bf61a1713dbd5cc6ed65a85c608",
        "openingStemSha256": "b04492a72a9eb5bcf1a3f49ae05bfe3cebceddcc415a7503d38f7f690f815c92",
        "vocalOnset": {
          "earliestSeconds": 1.96,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            1.96,
            1.97,
            1.97
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "trimStartSeconds": 1.92,
        "trimEndSeconds": 247.64,
        "estimatedFirstVocalSecondsAfterTrim": 0.040000000000000036,
        "output": "exports/scarf-holiday.mp3",
        "hook": "exports/scarf-holiday-hook.mp3",
        "media": {
          "duration": 245.76,
          "decodedDuration": 245.708821,
          "bytes": 5898911,
          "sha256": "63b08157b8d805e8bab0d10ddf11fb4d78eb14c74d23f980ee863acecff60b2d"
        },
        "hookMedia": {
          "duration": 3.030204,
          "decodedDuration": 2.979025,
          "bytes": 73395,
          "sha256": "6e91e20306ddf1b8b962013563184deabff7148464f85890481973771ba617ce"
        },
        "loudness": {
          "input_i": "-14.45",
          "input_tp": "-0.94",
          "input_lra": "5.50",
          "input_thresh": "-24.53",
          "output_i": "-14.04",
          "output_tp": "-1.00",
          "output_lra": "5.40",
          "output_thresh": "-24.09",
          "normalization_type": "dynamic",
          "target_offset": "-0.16"
        },
        "sourceLoudness": {
          "input_i": "-14.71",
          "input_tp": "-0.32",
          "input_lra": "6.00",
          "input_thresh": "-24.82",
          "output_i": "-13.47",
          "output_tp": "-1.00",
          "output_lra": "5.40",
          "output_thresh": "-23.54",
          "normalization_type": "dynamic",
          "target_offset": "-0.73"
        },
        "asr": {
          "total": 76,
          "matched": 74,
          "uncertain": 2,
          "source": "jobs/scarf-holiday-v01/takes/take_song_1.lines.json",
          "sha256": "359cdd443c8c21a01de812c6488017cf79ee7b585e64e46c3ae8db233f9e0820"
        },
        "openingReviewCaveat": "Separated vocal activity measures timing, not word identity. Verify the first sung word separately on the final hook; broad model timing estimates are insufficient.",
        "status": "accepted-for-owner-narrative-validation",
        "ownerValidation": "pending; original musical style approved before expansion"
      },
      {
        "angleId": "mum-in-frame",
        "take": 2,
        "source": "jobs/mum-in-frame-v01/takes/take_song_2.mp3",
        "openingStem": "reviews/openings/mum-in-frame-v01-take_song_2-vocals.wav",
        "listeningReview": "reviews/mum-in-frame-listening-v01/evaluation.json",
        "selectionReason": "All 76 scripted lines independently matched; reviewer preferred the clearer character entrance and complete sung ending. Approved acoustic musical lane retained.",
        "reviewedUncertainLineIndexes": [],
        "uncertainLineReview": [],
        "sourceSha256": "17db672ef11868465d3de468552b88166f11ab6e2261c1e5e69571552a9855fb",
        "openingStemSha256": "666bc546f9867644cf7dd7a31a1ff7e37e07b0dca0da243c663e9bad020add47",
        "vocalOnset": {
          "earliestSeconds": 0.3,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.3,
            0.3,
            0.31
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "trimStartSeconds": 0.26,
        "trimEndSeconds": 227.36,
        "estimatedFirstVocalSecondsAfterTrim": 0.03999999999999998,
        "output": "exports/mum-in-frame.mp3",
        "hook": "exports/mum-in-frame-hook.mp3",
        "media": {
          "duration": 227.134694,
          "decodedDuration": 227.083515,
          "bytes": 5451903,
          "sha256": "bc4cf45053097089906cf82e5d68098ff9387c5c3b17d5ce29ec70287e43d905"
        },
        "hookMedia": {
          "duration": 3.030204,
          "decodedDuration": 2.979025,
          "bytes": 73395,
          "sha256": "730c2ab2263cf993357493e88e8094e85f013d2447933a21fe35d6be71d2077e"
        },
        "loudness": {
          "input_i": "-14.45",
          "input_tp": "-0.61",
          "input_lra": "7.20",
          "input_thresh": "-24.62",
          "output_i": "-14.40",
          "output_tp": "-1.00",
          "output_lra": "6.60",
          "output_thresh": "-24.55",
          "normalization_type": "dynamic",
          "target_offset": "0.20"
        },
        "sourceLoudness": {
          "input_i": "-14.65",
          "input_tp": "0.01",
          "input_lra": "7.40",
          "input_thresh": "-24.82",
          "output_i": "-13.70",
          "output_tp": "-1.00",
          "output_lra": "7.00",
          "output_thresh": "-23.86",
          "normalization_type": "dynamic",
          "target_offset": "-0.50"
        },
        "asr": {
          "total": 76,
          "matched": 76,
          "uncertain": 0,
          "source": "jobs/mum-in-frame-v01/takes/take_song_2.lines.json",
          "sha256": "8490198924115c6e744a42bda901704943a54dcd477701dcc481ad9d5c0dce6b"
        },
        "openingReviewCaveat": "Separated vocal activity measures timing, not word identity. Verify the first sung word separately on the final hook; broad model timing estimates are insufficient.",
        "status": "accepted-for-owner-narrative-validation",
        "ownerValidation": "pending; original musical style approved before expansion"
      },
      {
        "angleId": "no-fairy-tales",
        "take": 2,
        "source": "jobs/no-fairy-tales-v01/takes/take_song_2.mp3",
        "openingStem": "reviews/openings/no-fairy-tales-v01-take_song_2-vocals.wav",
        "listeningReview": "reviews/no-fairy-tales-listening-v01/evaluation.json",
        "selectionReason": "Complete story and concise ending without the first take’s repeated CTA; reviewer confirms core approved groove. One brand ASR reading remains ambiguous.",
        "reviewedUncertainLineIndexes": [
          38
        ],
        "uncertainLineReview": [
          {
            "index": 38,
            "expected": "Гоу п’юр — для зволоження шкіри.",
            "asr": "hope you're для зболоження шкіри",
            "assessment": "Brand-name recognition differs from the written phonetics; actual-audio reviewer heard the intended product, native pronunciation remains for owner validation."
          }
        ],
        "onsetResolution": {
          "stemSha256": "899dbfea681c374bb7bfb35997baec1a91e9b1d8c1b60a39f914584aec035a00",
          "thresholdsDbfs": [
            -50,
            -45,
            -40
          ],
          "rationale": "Initial Баночко syllable is quieter than the next vowel. Sustained activity at 1.14/1.15/1.18s agrees with independent ASR word onset 1.14s; default -35dB detects the later vowel at 1.43s. Preserve the quiet first syllable. Preceding stem level is below -70dBFS except the onset ramp."
        },
        "sourceSha256": "9a7ee3fa258bb76f437ac24080cb3c9fdc5f5a38b5b30a122da6dc2f40e460aa",
        "openingStemSha256": "899dbfea681c374bb7bfb35997baec1a91e9b1d8c1b60a39f914584aec035a00",
        "vocalOnset": {
          "earliestSeconds": 1.1400000000000001,
          "thresholdsDbfs": [
            -50,
            -45,
            -40
          ],
          "detectedSeconds": [
            1.1400000000000001,
            1.1500000000000001,
            1.18
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "trimStartSeconds": 1.1,
        "trimEndSeconds": 240.32,
        "estimatedFirstVocalSecondsAfterTrim": 0.040000000000000036,
        "output": "exports/no-fairy-tales.mp3",
        "hook": "exports/no-fairy-tales-hook.mp3",
        "media": {
          "duration": 239.25551,
          "decodedDuration": 239.204331,
          "bytes": 5742803,
          "sha256": "ac9d0159dd8d749cba1013181d51a231cff388c730f2bac2c5144c5aa095be71"
        },
        "hookMedia": {
          "duration": 3.030204,
          "decodedDuration": 2.979025,
          "bytes": 73395,
          "sha256": "1bbd343bb86079294988b0c6fd10a2fd54d0f5dc6164c7e85a4b5e5a1486f67f"
        },
        "loudness": {
          "input_i": "-14.46",
          "input_tp": "-0.98",
          "input_lra": "6.30",
          "input_thresh": "-24.55",
          "output_i": "-14.23",
          "output_tp": "-1.00",
          "output_lra": "6.20",
          "output_thresh": "-24.31",
          "normalization_type": "dynamic",
          "target_offset": "0.03"
        },
        "sourceLoudness": {
          "input_i": "-14.66",
          "input_tp": "-0.28",
          "input_lra": "7.20",
          "input_thresh": "-24.78",
          "output_i": "-13.52",
          "output_tp": "-1.00",
          "output_lra": "6.10",
          "output_thresh": "-23.61",
          "normalization_type": "dynamic",
          "target_offset": "-0.68"
        },
        "asr": {
          "total": 76,
          "matched": 75,
          "uncertain": 1,
          "source": "jobs/no-fairy-tales-v01/takes/take_song_2.lines.json",
          "sha256": "4904e9899b3835e9725d3a209d95d50ee1d94850a80287e000d907a5138dbd95"
        },
        "openingReviewCaveat": "Separated vocal activity measures timing, not word identity. Verify the first sung word separately on the final hook; broad model timing estimates are insufficient.",
        "status": "accepted-for-owner-narrative-validation",
        "ownerValidation": "pending; original musical style approved before expansion"
      }
    ],
    "videoGeneration": false
  },
  "openings": {
    "ok": true,
    "checks": [
      {
        "angleId": "forgot-neck",
        "exportSha256": "4b0d3dae5053c96089ceaef15f5b72f6ad7367ae76cbd88a0365f24cfad533c2",
        "hookSha256": "523173fa73e155a3acd6a29322a87fd73aeeb064cb633da7193b0dff78b93279",
        "openingStemSha256": "9c84f6a3870f1273a23f41d0962f3503a1bb9d4c7eda8823f40ea1550a7c9726",
        "finalVocalOnset": {
          "earliestSeconds": 0.0,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.0,
            0.01,
            0.02
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "firstExpectedWord": "стоп",
        "firstTranscribedWord": "стоп",
        "hookTranscript": " Стоп, а шею хтось?",
        "wordCheck": true,
        "pass": true,
        "limitation": "Vocal activity measures timing; ASR supports the first-word identity. Neither certifies native pronunciation, emotion or audience retention."
      },
      {
        "angleId": "scarf-holiday",
        "exportSha256": "63b08157b8d805e8bab0d10ddf11fb4d78eb14c74d23f980ee863acecff60b2d",
        "hookSha256": "6e91e20306ddf1b8b962013563184deabff7148464f85890481973771ba617ce",
        "openingStemSha256": "d43e7c9570654ac8ab2600f1cd33c23af22f9fa79dfb9cb0ccded7d76b860480",
        "finalVocalOnset": {
          "earliestSeconds": 0.04,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.04,
            0.05,
            0.06
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "firstExpectedWord": "мій",
        "firstTranscribedWord": "мій",
        "hookTranscript": " Мій шарф йде у відпустку",
        "wordCheck": true,
        "pass": true,
        "limitation": "Vocal activity measures timing; ASR supports the first-word identity. Neither certifies native pronunciation, emotion or audience retention."
      },
      {
        "angleId": "mum-in-frame",
        "exportSha256": "bc4cf45053097089906cf82e5d68098ff9387c5c3b17d5ce29ec70287e43d905",
        "hookSha256": "730c2ab2263cf993357493e88e8094e85f013d2447933a21fe35d6be71d2077e",
        "openingStemSha256": "a6697e32c5186a2395c0fd6171ec0c1f341f2be9460f13e3d8854c1716fa2d80",
        "finalVocalOnset": {
          "earliestSeconds": 0.03,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.03,
            0.04,
            0.05
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "firstExpectedWord": "мамо",
        "firstTranscribedWord": "мамо",
        "hookTranscript": " Мамо, дете на фото",
        "wordCheck": true,
        "pass": true,
        "limitation": "Vocal activity measures timing; ASR supports the first-word identity. Neither certifies native pronunciation, emotion or audience retention."
      },
      {
        "angleId": "no-fairy-tales",
        "exportSha256": "ac9d0159dd8d749cba1013181d51a231cff388c730f2bac2c5144c5aa095be71",
        "hookSha256": "1bbd343bb86079294988b0c6fd10a2fd54d0f5dc6164c7e85a4b5e5a1486f67f",
        "openingStemSha256": "c85248da7f39e1b10ea23c9f7ed2ad3d34ee0482007bdabc7864fa4151746a5b",
        "finalVocalOnset": {
          "earliestSeconds": 0.04,
          "thresholdsDbfs": [
            -50,
            -45,
            -40
          ],
          "detectedSeconds": [
            0.04,
            0.05,
            0.07
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "firstExpectedWord": "баночко",
        "firstTranscribedWord": "баночко",
        "hookTranscript": " Баночко тільки без кази",
        "wordCheck": true,
        "pass": true,
        "limitation": "Vocal activity measures timing; ASR supports the first-word identity. Neither certifies native pronunciation, emotion or audience retention."
      }
    ]
  },
  "portraits": [
    {
      "characterId": "vira",
      "path": "passports/vira-v01.png",
      "sha256": "d7615e895425830dee3425df649999780b4c9f77c1cccec16f993104b3439a63",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.027182+00:00",
      "method": "Prior inspected lead reused byte-for-byte",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": "../gopure-angles/passports/inspection.json"
    },
    {
      "characterId": "sofiia",
      "path": "passports/sofiia-v01.png",
      "sha256": "0215193cfb86794386cb082f19741504f934fd49fd82c20fd02e9898fec7262a",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.032896+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "taras",
      "path": "passports/taras-v01.png",
      "sha256": "e47349adc103836c0fa9d42e2155542999c3403b11d1ce102a601674d058b684",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.038495+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "nadiia",
      "path": "passports/nadiia-v01.png",
      "sha256": "e5d98dcfa5e552366bcf436c300fc0c89a36bd6cc198142c60ef4b739f422d89",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.043768+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "lada",
      "path": "passports/lada-v01.png",
      "sha256": "d0e162f2edf12ed55d41a4f43af885bdcb8d9bb1a3b9ee27afaba383a2a0d188",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.049557+00:00",
      "method": "Prior inspected lead reused byte-for-byte",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": "../gopure-angles/passports/inspection.json"
    },
    {
      "characterId": "marta",
      "path": "passports/marta-v01.png",
      "sha256": "b7156bfafcabdfe90f1d480b3c614afed836b1af659faaf3a12e1ac8d45e775d",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.053849+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "daryna",
      "path": "passports/daryna-v01.png",
      "sha256": "f8ccc49fde68b622ed8b6ea5af3ea8dee5b655276f5eec108d3954b890ecbd1d",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.058144+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "zoia",
      "path": "passports/zoia-v01.png",
      "sha256": "49f0b4bff6a75ef0779c900b1c3b7d52102b7f1230eef0bc30f0b6af4bc5001a",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.062801+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "orysia",
      "path": "passports/orysia-v01.png",
      "sha256": "084b4eb66eab344864fe5d3bf34dec978610f87fe6f5e5b7b079058953a6db06",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.067874+00:00",
      "method": "Prior inspected lead reused byte-for-byte",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": "../gopure-angles/passports/inspection.json"
    },
    {
      "characterId": "solomiia",
      "path": "passports/solomiia-v01.png",
      "sha256": "281792b5a32428c3f62f1902650c2c741249ceb68cd22ab23557c3ef74611b05",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.072550+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "petro",
      "path": "passports/petro-v01.png",
      "sha256": "d8fe73224117516fad29027517383ad5a24ff527c6119229740a58ca120324fd",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.077038+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "halyna",
      "path": "passports/halyna-v01.png",
      "sha256": "1027b54f79f2a2ce8ca54c7a0cbef91336b3cb9acef9afd70b2e591b110dcda4",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.082771+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "iryna",
      "path": "passports/iryna-v01.png",
      "sha256": "c50d3958451c179fa1502e5492b6964228daec50874b261f92d86feebf864539",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.087576+00:00",
      "method": "Prior inspected lead reused byte-for-byte",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": "../gopure-angles/passports/inspection.json"
    },
    {
      "characterId": "oksana",
      "path": "passports/oksana-v01.png",
      "sha256": "ca21abfb284479a164ac302708c6fc7468a824f81960845720aa2ae12f442071",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.089669+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "maksym",
      "path": "passports/maksym-v01.png",
      "sha256": "d8b90f19919ce9a8eb1886b21db575ba21a5582e63170bffe6204fc458ae9450",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.091684+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    },
    {
      "characterId": "bohdana",
      "path": "passports/bohdana-v01.png",
      "sha256": "22d56eba4b640a01c650092f028523f5db4e7074f479be316417192ac2ad5650",
      "width": 1024,
      "height": 1536,
      "status": "accepted-for-owner-validation",
      "inspectedAt": "2026-09-10T04:39:57.093630+00:00",
      "method": "Primary agent visually inspected the generated portrait in the image tool result",
      "observed": "One adult, closed mouth, neutral gray background, natural age texture, intended hair, wardrobe and accessories; consistent editorial portrait framing.",
      "limits": "Age is an appearance target, not a biometric measurement. No multi-scene continuity or animated performance tested.",
      "priorInspection": null
    }
  ],
  "approvedMusic": [
    {
      "angleId": "forgot-neck",
      "originalPath": "runs/gopure-angles/exports/forgot-neck.mp3",
      "sha256": "c77492207c5ddf02cbe40731e78b37137c04514e83d965519607571e67d03c84",
      "originalReviewUrl": "https://gopure-angles-fa903fec6b.pages.dev/#forgot-neck",
      "approval": "Owner explicitly approved music before this expansion."
    },
    {
      "angleId": "scarf-holiday",
      "originalPath": "runs/gopure-angles/exports/scarf-holiday.mp3",
      "sha256": "342bb44dc79905f491fd29eb20594d2351d4a585afc16af0c5fbde98ec255597",
      "originalReviewUrl": "https://gopure-angles-fa903fec6b.pages.dev/#scarf-holiday",
      "approval": "Owner explicitly approved music before this expansion."
    },
    {
      "angleId": "mum-in-frame",
      "originalPath": "runs/gopure-angles/exports/mum-in-frame.mp3",
      "sha256": "0d8cfccadfab883971e38d023c43823d6fb69bd16eb8ceb7cc0841c72e05da5c",
      "originalReviewUrl": "https://gopure-angles-fa903fec6b.pages.dev/#mum-in-frame",
      "approval": "Owner explicitly approved music before this expansion."
    },
    {
      "angleId": "no-fairy-tales",
      "originalPath": "runs/gopure-angles/exports/no-fairy-tales.mp3",
      "sha256": "bbbe75f113492b7de568d269c9f7188e86791b225714272652262f97cfef48bd",
      "originalReviewUrl": "https://gopure-angles-fa903fec6b.pages.dev/#no-fairy-tales",
      "approval": "Owner explicitly approved music before this expansion."
    }
  ],
  "ownerNarrativeValidation": "pending"
}