{
  "schema": "local-recipe-evidence/v2",
  "status": "PASS_WITH_EXPLICIT_LIMITS",
  "recordedAt": "2026-10-17T22:23:03+09:00",
  "scope": "Separate local sample, not original author or specified-model reproduction.",
  "runtime": {
    "node": {
      "node": "v24.13.1",
      "timezone": "Asia/Seoul"
    },
    "browser": "Ego Lite Chromium desktop viewport emulation",
    "servedOver": "localhost HTTP"
  },
  "unitChecks": [],
  "browserObservations": [
    {
      "id": "transit-A-D",
      "state": {
        "from": "A",
        "to": "D",
        "zoom": 1,
        "last": {
          "at": "D",
          "line": "R",
          "minutes": 7,
          "transfers": 0,
          "cost": 7,
          "path": [
            "A",
            "B",
            "C",
            "D"
          ],
          "segments": [
            {
              "from": "A",
              "to": "B",
              "line": "R",
              "minutes": 2
            },
            {
              "from": "B",
              "to": "C",
              "line": "R",
              "minutes": 3
            },
            {
              "from": "C",
              "to": "D",
              "line": "R",
              "minutes": 2
            }
          ]
        }
      }
    },
    {
      "id": "tutorial-step-1",
      "caption": "01 / 출발을 A 작은숲으로 선택합니다.",
      "state": {
        "from": "A",
        "to": "B",
        "zoom": 1,
        "last": null
      }
    },
    {
      "id": "tutorial-step-2",
      "caption": "02 / 도착을 D 바다정원으로 선택합니다.",
      "state": {
        "from": "A",
        "to": "D",
        "zoom": 1,
        "last": null
      }
    },
    {
      "id": "tutorial-step-3",
      "caption": "03 / 경로 찾기 → R선 이동 7분 · 환승 0회",
      "state": {
        "from": "A",
        "to": "D",
        "zoom": 1,
        "last": {
          "at": "D",
          "line": "R",
          "minutes": 7,
          "transfers": 0,
          "cost": 7,
          "path": [
            "A",
            "B",
            "C",
            "D"
          ],
          "segments": [
            {
              "from": "A",
              "to": "B",
              "line": "R",
              "minutes": 2
            },
            {
              "from": "B",
              "to": "C",
              "line": "R",
              "minutes": 3
            },
            {
              "from": "C",
              "to": "D",
              "line": "R",
              "minutes": 2
            }
          ]
        }
      }
    }
  ],
  "issues": [
    {
      "kind": "제작 방식의 명시",
      "observed": "정지 캡처 편집을 실제 30초 화면 녹화로 오인할 수 있습니다.",
      "change": "본문·영상 안내에 실제 캡처 3장 편집과 무음을 표시했습니다.",
      "result": "클릭 동작의 연속 녹화·음성 해설이 없다는 한계를 명시했습니다."
    },
    {
      "kind": "실제 파일 길이 보완",
      "observed": "최초 편집 파일은 ffprobe에서 29.933333초·449프레임이었습니다.",
      "change": "15fps·450프레임으로 마지막 화면을 보존해 다시 인코딩했습니다.",
      "result": "최종 파일은 ffprobe에서 30초·450프레임이며 브라우저에서 재생됐습니다."
    },
    {
      "kind": "실제 재생에서 발견한 자막 겹침",
      "observed": "기본 하단 VTT 자막이 캡처 화면의 조작 버튼 일부를 덮었습니다.",
      "change": "세 자막의 위치를 화면 위쪽 설명 영역(line 24%)으로 옮겼습니다.",
      "result": "새 VTT의 세 구간 위치와 실제 재생 화면에서 조작 영역을 덮지 않는 배치를 확인했습니다."
    }
  ],
  "mediaProbe": {
    "durationSeconds": 30.0,
    "bytes": 166647,
    "video": [
      {
        "codec_name": "h264",
        "codec_type": "video",
        "width": 1280,
        "height": 960,
        "pix_fmt": "yuv420p",
        "avg_frame_rate": "15/1"
      }
    ],
    "audioStreams": 0
  },
  "playbackObservation": {
    "currentTime": 2.116391,
    "duration": 30,
    "paused": false,
    "error": null,
    "videoWidth": 1280,
    "videoHeight": 960
  },
  "packageReproduction": {
    "id": "screen-tutorial-storyboard",
    "source": "freshly extracted sample-source.zip",
    "initialized": true,
    "details": {
      "from": "A",
      "to": "B",
      "zoom": 1,
      "last": null
    }
  },
  "captionPlacement": {
    "cues": [
      {
        "start": 0,
        "end": 10,
        "text": "1단계 · 출발 A 선택 (실제 캡처 편집)",
        "line": 24,
        "position": 4,
        "size": 92
      },
      {
        "start": 10,
        "end": 20,
        "text": "2단계 · 도착 D 선택",
        "line": 24,
        "position": 4,
        "size": 92
      },
      {
        "start": 20,
        "end": 30,
        "text": "3단계 · R선 7분, 환승 0회 (무음)",
        "line": 24,
        "position": 4,
        "size": 92
      }
    ],
    "mode": "showing",
    "currentTime": 1.088673
  },
  "scopeBoundaries": [
    "실제 조작 뒤 얻은 정지 캡처 3장을 편집한 30초 무음 영상입니다. 연속 마우스 녹화·음성 해설·실제 계정 로그인·파일 공유 기능은 범위 밖입니다.",
    "자막 구간과 로컬 재생 진행을 관측했습니다. 실제 모바일 단말의 자막 가독성과 초보자 이해도 조사는 별도 사용성 시험 대상입니다.",
    "직접 작성한 별도 로컬 샘플의 동작 기록입니다. 원작 재현이나 지정 AI 모델 간 성능 비교와 구분합니다.",
    "화면 폭 검사는 데스크톱 Chromium 뷰포트 에뮬레이션 기준입니다. 실제 단말·Safari·Firefox·장기 운영은 별도 환경 시험 대상입니다."
  ]
}
