{
  "schemaVersion": 3,
  "role": "Browser replay derivatives; never archival masters",
  "timelineOriginLocal": "2026-08-12T18:29:57+01:00",
  "syncStatus": "network-synchronized working alignment",
  "syncCaveat": "Acquisition devices were operating with network-synchronized system time. Source filenames provide nominal first-frame WEST timestamps. Alignment is operationally reliable for event reconstruction but was not independently verified against a dedicated precision timing reference.",
  "witnessProvenance": {
    "observer": "CosmoNutz",
    "system": "Seestar telescope acquisition system",
    "locationPublic": "Vila Praia de Âncora area, northern Portugal",
    "locationPrecision": "locality",
    "exactLocationPublished": false,
    "responsibility": "Teófilo Couto · telescope acquisition, replay engineering, and archive preservation"
  },
  "referenceEvents": {
    "espinhoFirstContact": "2026-08-12T18:35:08+01:00",
    "firstEdsObservation": "2026-08-12T18:35:22+01:00",
    "espinhoPredictedMaximum": "2026-08-12T19:32:14+01:00",
    "edsMinimum": "2026-08-12T19:32:22+01:00",
    "cameraEnd": "2026-08-12T19:55:38+01:00",
    "scope": "Astronomical contacts and predicted maximum describe EDS / Espinho circumstances; no telescope-local maximum is claimed."
  },
  "sourcePolicy": {
    "originalsPublishedHere": false,
    "originalsImmutable": true,
    "sourcePathsPublished": false,
    "maximumSourceRescue": "A separately preserved lossless FFV1/Matroska rescue remains the required input for future Maximum regeneration. The Phase 4 read-only forensic inspection used the available uncompressed 8-bit grayscale AVI because the rescue file was not locally available; no web candidate was generated from that AVI."
  },
  "mediaContract": {
    "container": "MP4 with moov before mdat",
    "video": "H.264/AVC High profile, level 4.1 or lower, yuv420p, 720×1280",
    "audioStreams": 0,
    "cadence": {
      "approach": "30 fps CFR derived from a nominal-30 source with sub-frame acquisition jitter; no interpolation",
      "maximum": "Preserve native 10000000/870557 CFR (approximately 11.4869 fps); never manufacture 30 fps",
      "recovery": "30 fps CFR derived from a nominal-30 source with sub-frame acquisition jitter; no interpolation"
    },
    "maximumKeyframeGapSeconds": {"approach": 2.05, "maximum": 2.1, "recovery": 2.05},
    "durationToleranceSeconds": {"approach": 0.05, "maximum": 0.01, "recovery": 0.05},
    "frameCountTolerance": {"approach": 1, "maximum": 0, "recovery": 1},
    "eventFrameTolerance": "nearest output frame plus 2 ms; no astronomical precision claim",
    "seekAcceptance": "20 deterministic forward/backward positions per proxy, cold and warm cache, with no failures, no stale frame at completion, reliable resume, and measurable browser responsiveness",
    "posterPolicy": "No crop or aspect-ratio change; event posters must remain visually consistent with the aligned output frame."
  },
  "currentFiles": [
    {
      "id": "approach",
      "path": "approach-web.mp4",
      "sourceLineage": {
        "publicId": "approach-archival-master",
        "sha256": "e1c4491269c74511f31a36aa5ceea82de58441935ec572a913c71fb408abd73e",
        "nativeCadence": "nominal 30 fps with bounded timestamp jitter; observed VFR intervals 0.031456–0.035233 s",
        "durationSeconds": 3457.598156,
        "frameCount": 103730
      },
      "container": "MP4",
      "codec": "H.264/AVC (avc1)",
      "profile": "High",
      "level": "4.1",
      "pixelFormat": "yuv420p",
      "dimensions": "720×1280",
      "colorMetadata": "not signaled",
      "timeBase": "1/15360",
      "rFrameRate": "30/1",
      "avgFrameRate": "30/1",
      "cadenceStatus": "CFR",
      "frameCount": 103729,
      "startTimeSeconds": 0.0,
      "durationSeconds": 3457.633333,
      "timelineMapping": {"masterStartSeconds": 0.0, "masterEndFromSourceSeconds": 3457.598156, "followingCameraGapSeconds": 2.401844},
      "keyframes": {"count": 1729, "minimumGapSeconds": 2.0, "medianGapSeconds": 2.0, "p95GapSeconds": 2.0, "maximumGapSeconds": 2.0, "tailSeconds": 1.633333},
      "fastStart": true,
      "audioStreams": 0,
      "bytes": 187304550,
      "sha256": "5cc43c00f23a4cafcef6c6c049e9cbb397c5bd4623f0d413f207a0ac46bbaf58",
      "generation": {
        "exactCommandAvailable": true,
        "commandPublicSafe": "ffmpeg -hide_banner -nostdin -n -fflags +bitexact -i '{source:approach}' -map 0:v:0 -map_metadata -1 -map_chapters -1 -an -vf fps=30,scale=720:1280:flags=lanczos,format=yuv420p -c:v libx264 -preset slow -crf 20 -profile:v high -level:v 4.1 -g 60 -keyint_min 60 -sc_threshold 0 -flags:v +cgop+bitexact -force_key_frames 'expr:gte(t,n_forced*2)' -movflags +faststart -fps_mode cfr '{review-output:approach-web-candidate.mp4}'",
        "ffmpegVersion": "8.1.2",
        "ffprobeVersion": "8.1.2",
        "candidateManifestSha256": "e7968f0d92090694c6d04a0435fa3ab545d291875fefa8e5953e277a2b56755a",
        "publishedReplacementLineage": "Phase 4 approved candidate published selectively to the stable Approach web-derivative path in Phase 4.1"
      },
      "validation": {
        "status": "passed",
        "reason": "duration, frame count, 30 fps CFR cadence, two-second GOP, fast-start, silent playback, event-frame mapping, and browser seeking verified",
        "phase4CandidateContract": true,
        "phase4_1PrepublicationReinspection": true
      },
      "publicationHistory": [
        {
          "status": "previous-public-proxy",
          "bytes": 163420175,
          "sha256": "969d11f4335a966cde6035a842c85c51e17fb37a82e000e6a7290f1e0e5593b1",
          "level": "3.1",
          "keyframes": {"count": 642, "medianGapSeconds": 5.0, "p95GapSeconds": 8.333334, "maximumGapSeconds": 8.333334, "tailSeconds": 2.1},
          "rollback": "Preserved outside the public runtime artifact; storage path intentionally not published"
        },
        {
          "status": "current-published-web-derivative",
          "publishedOn": "2026-08-21",
          "bytes": 187304550,
          "sha256": "5cc43c00f23a4cafcef6c6c049e9cbb397c5bd4623f0d413f207a0ac46bbaf58",
          "maximumKeyframeGapSeconds": 2.0
        }
      ]
    },
    {
      "id": "maximum",
      "path": "maximum-web.mp4",
      "sourceLineage": {
        "publicId": "maximum-uncompressed-grayscale-master",
        "sha256": "38aa12f0327271b01616d94ab2af718890c014401db7439e01bd7ae60f259975",
        "nativeCadence": "fixed 870557/10000000-second frame tick (approximately 11.4869 fps)",
        "durationSeconds": 600.07494,
        "frameCount": 6893
      },
      "container": "MP4",
      "codec": "H.264/AVC (avc1)",
      "profile": "High",
      "level": "3.1",
      "pixelFormat": "yuv420p",
      "dimensions": "720×1280",
      "colorMetadata": "not signaled",
      "timeBase": "1/636535",
      "rFrameRate": "636535/55414",
      "avgFrameRate": "636535/55414",
      "cadenceStatus": "CFR",
      "frameCount": 6893,
      "startTimeSeconds": 0.0,
      "durationSeconds": 600.07494,
      "timelineMapping": {"masterStartSeconds": 3460.0, "masterEndSeconds": 4060.07494, "precedingCameraGapSeconds": 2.401844, "followingCameraGapSeconds": 6.92506},
      "keyframes": {"count": 288, "minimumGapSeconds": 2.089336, "medianGapSeconds": 2.089337, "p95GapSeconds": 2.089337, "maximumGapSeconds": 2.089337, "tailSeconds": 0.435278},
      "fastStart": true,
      "audioStreams": 0,
      "bytes": 139323981,
      "sha256": "d8874fd38df739296b7147730f2993949e6bfda8e9d4334b8bbf9665cafc226b",
      "generation": {"exactCommandAvailable": false, "cadenceExplanation": "The MP4 muxer represents the preserved native cadence as 636535/55414. This equals 6893 frames over 600.074940 seconds and is not malformed or VFR."},
      "validation": {"status": "passed", "reason": "native cadence, duration, frame count, two-second-class GOP, fast-start, and browser decoding verified"}
    },
    {
      "id": "recovery",
      "path": "recovery-web.mp4",
      "sourceLineage": {
        "publicId": "recovery-archival-master",
        "sha256": "03d608bf1657e904b46e27d586cdca2caa6596df9e1304ea4a204e28a9cd5103",
        "nativeCadence": "nominal 30 fps with bounded timestamp jitter; observed VFR intervals 0.031622–0.035056 s",
        "durationSeconds": 1074.789844,
        "frameCount": 32245
      },
      "container": "MP4",
      "codec": "H.264/AVC (avc1)",
      "profile": "High",
      "level": "3.1",
      "pixelFormat": "yuv420p",
      "dimensions": "720×1280",
      "colorMetadata": "not signaled",
      "timeBase": "1/15360",
      "rFrameRate": "30/1",
      "avgFrameRate": "30/1",
      "cadenceStatus": "CFR",
      "frameCount": 32245,
      "startTimeSeconds": 0.0,
      "durationSeconds": 1074.833333,
      "timelineMapping": {"masterStartSeconds": 4067.0, "masterEndFromSourceSeconds": 5141.789844, "precedingCameraGapSeconds": 6.92506},
      "keyframes": {"count": 538, "minimumGapSeconds": 2.0, "medianGapSeconds": 2.0, "p95GapSeconds": 2.0, "maximumGapSeconds": 2.0, "tailSeconds": 0.833333},
      "fastStart": true,
      "audioStreams": 0,
      "bytes": 30678278,
      "sha256": "7047b853950660685991535298d71c916aa37b59b4cbc2b82a1b31861f3041e2",
      "generation": {"exactCommandAvailable": false, "containerEncoderTag": "Lavf63.6.100", "videoEncoderTag": "Lavc63.8.101 libx264"},
      "validation": {"status": "passed", "reason": "duration, frame count, two-second GOP, fast-start, and browser decoding verified"}
    }
  ],
  "generation": {
    "script": "/scripts/generate_replay_proxies.py",
    "toolingValidatedWith": "FFmpeg and FFprobe 8.1.2",
    "outputPolicy": "Candidates only in an absent or empty non-public review directory; source paths and approved public proxies are denied as destinations; no overwrite is permitted.",
    "validationPolicy": "Generation fails on codec/profile/level, pixel format, dimensions, audio, fast-start, cadence, duration, frame-count, keyframe-gap, timestamp-order, or event-frame contract violations."
  },
  "replacementReview": {
    "status": "selective-replacement-approved-and-published-to-release-candidate",
    "approvedOn": "2026-08-21",
    "humanReviewCompleted": true,
    "published": {
      "id": "approach",
      "path": "approach-web.mp4",
      "sha256": "5cc43c00f23a4cafcef6c6c049e9cbb397c5bd4623f0d413f207a0ac46bbaf58",
      "bytes": 187304550,
      "maximumKeyframeGapSeconds": 2.0,
      "validation": "passed"
    },
    "retained": {
      "maximum": "Retained because its approximately 11.4869 fps value is genuine native constant cadence and its two-second-class GOP already complies",
      "recovery": "Retained because it already complies with the 30 fps CFR and exact two-second-GOP contract"
    },
    "previousApproach": {
      "sha256": "969d11f4335a966cde6035a842c85c51e17fb37a82e000e6a7290f1e0e5593b1",
      "bytes": 163420175,
      "rollbackPreservedOutsidePublicArtifact": true
    },
    "productionDeploymentPerformed": false
  }
}
