{
  "caseId": "circulation",
  "assessmentType": "AI independent qualitative observations plus executable geometry/math/media checks; not human blind scoring",
  "status": "independent-audit-complete",
  "summaryZh": "90秒视频的三圈次序、主要闭合流向及Ferrel间接驱动表述基本正确；Coriolis段南北半球却沿同一有向曲线运动，未画对北右南左，属于科学动画失败。",
  "summaryEn": "The 90-second film largely gets cell order, closed circulation and indirect Ferrel driving right, but both hemisphere panels follow the same oriented Coriolis curve. It fails to depict northern-right/southern-left deflection.",
  "assessmentZh": [
    "0/约30/约60/90的次序与三圈升降/地表/高空方向成立；说明每半球三圈、边界移动及理想多年平均。",
    "58–69秒南北面板只改文字颜色，同一曲线/气团方向；南半球说向南却也向画面上方运动。正确旁白不能修正错误路径。",
    "三圈路径闭合连续；另一个开放Coriolis演示约64.25秒回跳。曲线低支在地面基线下约51px，示意清晰度仍有问题。",
    "中英字幕抽样在画内；英文22px在手机上偏小。未宣称逐词全面试听。公开配音替换保留画面和科学错误。"
  ],
  "assessmentEn": [
    "The 0/about30/about60/90 order and cell rising/sinking/surface/upper directions are consistent; the script states three cells per hemisphere, shifting boundaries and a long-term-average idealization.",
    "At 58–69s both hemisphere panels reuse the same path/traversal with changed labels/colors; the southern example says southward while moving upward. Correct words do not repair the trajectory.",
    "Three cell routes close continuously; a separate open Coriolis path jumps back near 64.25s. Lower branches extend about 51px below the drawn ground line.",
    "Sampled bilingual captions remain on screen, though 22px English can be small on phones. No exhaustive word-level listening is claimed. Public replacement narration preserves picture/scientific errors."
  ],
  "checks": [
    {
      "labelZh": "三圈流向与解释边界",
      "labelEn": "Cell flow and explanatory limits",
      "status": "pass",
      "detailZh": "三圈主要路径、次序、Ferrel间接驱动和理想化边界说明成立。",
      "detailEn": "Main cell directions/order, indirect Ferrel driving and idealization caveats are supported."
    },
    {
      "labelZh": "Coriolis运动",
      "labelEn": "Coriolis animation",
      "status": "fail",
      "detailZh": "北右南左文字正确，但南北气团使用同一有向曲线。",
      "detailEn": "Correct north-right/south-left wording but identical oriented curves for both hemispheres."
    }
  ],
  "independentAudit": {
    "status": "technical-pass-coriolis-animation-fail",
    "criteria": [
      {
        "criterion": 1,
        "status": "pass",
        "detail": "Left-to-right northern meridional section is labeled 0/about30/about60/90, with an explicit north-to-the-right label. Script and ending say three cells in each hemisphere."
      },
      {
        "criterion": 2,
        "status": "pass-with-diagram-warning",
        "detail": "Ordered Hadley, Ferrel and Polar control-point traversal has the required rising/sinking and surface/upper branch directions. Rounded lower branches overshoot the source-defined ground baseline; see secondary note."
      },
      {
        "criterion": 3,
        "status": "pass-with-scope-limit",
        "detail": "NE trades, westerlies and polar easterlies are named correctly and wind names are explicitly by origin. Surface arrows show meridional components only; this is not a quantitative zonal-wind visualization."
      },
      {
        "criterion": 4,
        "status": "fail",
        "detail": "The Coriolis words are correct but both hemisphere panels reuse the same oriented curve and particle traversal, despite opposing deflection labels. The southern example says southward but animates toward the top like the northern example; neither panel supplies a compass reference to resolve it."
      },
      {
        "criterion": 5,
        "status": "pass",
        "detail": "Narration explicitly describes Ferrel as influenced by adjacent circulation/baroclinic processes, not an independent thermal convection cell. Long-term-average idealization, shifting boundaries and three cells per hemisphere are stated."
      },
      {
        "criterion": 6,
        "status": "pass-for-three-cells",
        "detail": "The three cell paths close with an ordinary-sized adjacent step and particles wrap continuously. A different, open Coriolis demonstration resets at the end; do not describe all particles in the whole film as continuous closed loops."
      },
      {
        "criterion": 7,
        "status": "partial",
        "detail": "Sampled Chinese/English text is readable and within the encoded frame; all English caption boxes fit. Scientific agreement between picture and narration fails in the Coriolis segment. No complete subjective listening/word-level audio synchronization audit was performed."
      },
      {
        "criterion": 8,
        "status": "delivery-observed-not-rebuilt-by-reviewer",
        "detail": "Standalone Pillow/NumPy/FFmpeg source and an encoded MP4 exist. This reviewer did not execute a full rebuild or independently prove originality from provenance; API/tool provenance is audited separately."
      }
    ],
    "confirmedIssues": [
      {
        "id": "coriolis-identical-oriented-curves",
        "severity": "major",
        "type": "scientific-animation-and-narration-mismatch",
        "timeSeconds": [
          58,
          69
        ],
        "descriptionZh": "南北半球面板只换标题和颜色，使用同一条有向曲线与同向气团，不能表现北右南左；南半球文字说向南，气团却同样向画面上方移动。按北向上解释，曲线切线还从东北转向偏西北，属于向左转而非北半球所称向右偏。",
        "descriptionEn": "Both hemisphere panels use the same oriented curve and parcel traversal, with only labels/colors changed. The southern panel says southward while moving upward like the northern example. Under a north-up reading, its tangent also turns counterclockwise/left rather than illustrating the claimed northern right deflection.",
        "codeEvidence": {
          "path": "cases/circulation/src/render.py",
          "lines": [
            122,
            125,
            126,
            129,
            131,
            133
          ],
          "normalizedFormula": "x-cx=-100+200q+85sin(pi*q); y=650-260q, identical for both hemisphere values; north is not used in the coordinate formula",
          "tangentHeadingDegreesFromEastNorthUp": [
            29.104818253101584,
            104.45760787667339
          ],
          "headingChangeDegreesCounterclockwise": 75.35278962357181
        },
        "encodedEvidence": [
          "qa/circulation/coriolis-60.00s.png",
          "qa/circulation/coriolis-61.50s.png",
          "qa/circulation/coriolis-63.50s.png"
        ],
        "measuredExample": "At60.0s parcel centers are approximately(545,570) and(1435,570); at63.5s approximately(623,425) and(1512,427). After subtracting panel centers, they follow the same upward path.",
        "implication": "Retain this as a failed scientific-animation check. A narration-only public derivative will not repair the trajectory."
      }
    ],
    "secondaryNotes": [
      {
        "id": "schematic-ground-overshoot",
        "severity": "minor-diagram-quality",
        "description": "The renderer defines G=748 as the ground line, but Catmull-Rom lower branches reach y≈799.21, about51.21pixels below it. Direction ordering remains right, but near-surface return flow is visibly drawn beneath the black ground line. This is a schematic clarity issue, separate from the Coriolis failure.",
        "evidence": "qa/circulation/frame-02-20.000s.jpg"
      },
      {
        "id": "open-demo-particle-reset",
        "severity": "minor-animation-quality",
        "description": "The separate Coriolis particle uses modulo on an open trajectory and jumps from the end back to the start near64.25s. This does not invalidate continuity of the three closed cell routes.",
        "evidence": [
          "qa/circulation/coriolis-64.00s.png",
          "qa/circulation/coriolis-64.30s.png"
        ]
      },
      {
        "id": "caption-layout",
        "severity": "minor-typography",
        "description": "Fixed49-character Chinese splitting leaves an isolated punctuation mark in the Hadley caption. Text remains on screen; English subtitles are22px at1080p and may require full-screen viewing. No clipping failure was confirmed.",
        "evidence": "qa/circulation/frame-02-20.000s.jpg"
      }
    ]
  },
  "localIndependentAudit": {
    "path": "qa/circulation/content-audit.json",
    "sha256": "c8648a7b7409b48f476d483cbd139e3ab15d29fa52185826fde422cf0dfa0cf3"
  },
  "technicalEvidence": {
    "caseId": "circulation",
    "checkedAt": "2026-10-26T17:41:27.907013+00:00",
    "sourceVideo": "cases/circulation/deliverables/atmospheric_circulation.mp4",
    "sha256": "99acfa844c97c33ad2e7f820c6acc3a792d26c912230120e52f3072f505595a5",
    "immutableSnapshot": "qa/circulation/video-99acfa844c97.mp4",
    "width": 1920,
    "height": 1080,
    "fps": 30.0,
    "durationSeconds": 90.0,
    "frameCount": "2700",
    "audioStreams": [
      {
        "index": 1,
        "codec_name": "aac",
        "codec_long_name": "AAC (Advanced Audio Coding)",
        "profile": "LC",
        "codec_type": "audio",
        "codec_tag_string": "mp4a",
        "codec_tag": "0x6134706d",
        "mime_codec_string": "mp4a.40.2",
        "sample_fmt": "fltp",
        "sample_rate": "44100",
        "channels": 1,
        "channel_layout": "mono",
        "bits_per_sample": 0,
        "initial_padding": 0,
        "id": "0x2",
        "r_frame_rate": "0/0",
        "avg_frame_rate": "0/0",
        "time_base": "1/44100",
        "start_pts": 0,
        "start_time": "0.000000",
        "duration_ts": 3969000,
        "duration": "90.000000",
        "bit_rate": "175382",
        "nb_frames": "3877",
        "extradata_size": 5,
        "disposition": {
          "default": 1,
          "dub": 0,
          "original": 0,
          "comment": 0,
          "lyrics": 0,
          "karaoke": 0,
          "forced": 0,
          "hearing_impaired": 0,
          "visual_impaired": 0,
          "clean_effects": 0,
          "attached_pic": 0,
          "timed_thumbnails": 0,
          "non_diegetic": 0,
          "captions": 0,
          "descriptions": 0,
          "metadata": 0,
          "dependent": 0,
          "still_image": 0,
          "multilayer": 0
        },
        "tags": {
          "language": "und",
          "handler_name": "SoundHandler"
        }
      }
    ],
    "checks": {
      "durationWithinFrozenRange": true,
      "fullVideoAudioDecode": true,
      "dimensions": true,
      "frameRate": true,
      "motionObservedInSamples": true,
      "audioTrack": true,
      "captionsPresentAndTimed": true
    },
    "allTechnicalChecksPass": true,
    "captions": [
      {
        "path": "cases/circulation/deliverables/subtitles.srt",
        "cueCount": 10,
        "validTimes": true,
        "lastEndSeconds": 89.85
      }
    ],
    "frames": [
      {
        "timeSeconds": 0.1,
        "path": "qa/circulation/frame-00-0.100s.jpg",
        "sha256": "8347187d838a2c3df6bd8b395aaaa8dec61f368f6bd7add79b80f0dbcca8e7b0"
      },
      {
        "timeSeconds": 10.0,
        "path": "qa/circulation/frame-01-10.000s.jpg",
        "sha256": "c5f5e5f0bac61d9039767e043e6383302679ab32fbb99c6014c61a03d0c0c22d"
      },
      {
        "timeSeconds": 20.0,
        "path": "qa/circulation/frame-02-20.000s.jpg",
        "sha256": "f226b0548b6d033d0c71ac2018a16d56c097b7d97bd818ce26ae3edccbaafcfb"
      },
      {
        "timeSeconds": 30.0,
        "path": "qa/circulation/frame-03-30.000s.jpg",
        "sha256": "9dcc137135974535239dbad0a90976c92efa3fd8b0f534ba50252e318cd5f5aa"
      },
      {
        "timeSeconds": 40.0,
        "path": "qa/circulation/frame-04-40.000s.jpg",
        "sha256": "9768fc01e6ba150ac170008883494f89217a2793d8fad264daf83cc777af824f"
      },
      {
        "timeSeconds": 50.0,
        "path": "qa/circulation/frame-05-50.000s.jpg",
        "sha256": "2584697674c3856bf05059251c061a73d9784f2a3847985c91a1c0d3362fb0f7"
      },
      {
        "timeSeconds": 60.0,
        "path": "qa/circulation/frame-06-60.000s.jpg",
        "sha256": "25b5fb4309f681e0a57b828116e2d0a1dd056a27e782eb8a1fff312a08632443"
      },
      {
        "timeSeconds": 70.0,
        "path": "qa/circulation/frame-07-70.000s.jpg",
        "sha256": "842e3c629c7ce88e658a2dc1a30bae3fd119ed4527fe441b298e1b22d5055d46"
      },
      {
        "timeSeconds": 80.0,
        "path": "qa/circulation/frame-08-80.000s.jpg",
        "sha256": "5ffae538a87d799e8bc18236de6b20b8efd7a1585cdb8e57f3b5fe6d1361b1f9"
      },
      {
        "timeSeconds": 89.9,
        "path": "qa/circulation/frame-09-89.900s.jpg",
        "sha256": "244cf2b0e9b70b323a55c2a61c45852fbe232a3aeae3fb48964d37faa15a304f"
      }
    ],
    "contactSheets": [
      "qa/circulation/contact-01.jpg",
      "qa/circulation/contact-02.jpg",
      "qa/circulation/contact-03.jpg"
    ],
    "assessmentScope": "Container,decode,timing and sampled motion only; geometry/science/visual checks are separately reported"
  },
  "requestEvidence": [
    "/evaluations/kimi-k3-1-pro-creative/circulation/attempt-01.json"
  ],
  "originalCompleteInputSha256": "54e042555ee878d98e39535585e04fec643e0ce62c3f1b824df591978061fc52",
  "sourcePromptSha256": "b021ced84260e927afb5f3cc86e16892c9957aa363def7c92ee2f5b012d3e897",
  "billing": {
    "basis": "subscription quota",
    "actualMonetaryCost": null
  },
  "officialBenchmarkScore": false,
  "reviewLimits": "No official benchmark score, blind human quality score, manufacturing/load certification or exhaustive subjective listening is claimed."
}
