{
  "schemaVersion": 1,
  "templateStatus": "no-external-proof-submitted",
  "route": {
    "source": "map1_01a",
    "target": "map2_02d"
  },
  "purpose": "Fill one of these records when external evidence is available. The template is not proof by itself and must not change route promotion status.",
  "handoffUrl": "route_promotion_external_proof_handoff.html",
  "completionAuditUrl": "completion_audit.html",
  "validationCommand": "python3 tools/validate_route_promotion_external_proof.py <submitted-proof.json>",
  "requireAcceptedValidationCommand": "python3 tools/validate_route_promotion_external_proof.py <submitted-proof.json> --require-accepted",
  "validationRefreshCommand": "python3 tools/refresh_savedata_route_proof.py --proof-json <submitted-proof.json> --require-accepted-proof",
  "requiredInputs": [
    {
      "id": "real-selector-2-0-save",
      "proofPackageId": "captured-selector-2-0-savedata",
      "artifactKind": "captured gameplay savedat file or savedat zip",
      "acceptedSignal": "1274-byte save with 0x0002=0x02, 0x0003=0x00, selected pointer 0x00540714, and routeEvidenceProofFound == true",
      "submitBy": [
        "Place captured savedatN.dat or savedatN.zip under SAVEDATA/ or SaveData/",
        "or pass the file, directory, or zip with --search-root"
      ],
      "refreshCommand": "python3 tools/refresh_savedata_route_proof.py --search-root <file-or-dir-or-zip>",
      "requiredChecks": [
        "size == 1274",
        "offset 0x0002 == 0x02",
        "offset 0x0003 == 0x00",
        "selectedPointerHex == 0x00540714",
        "routeEvidenceProofFound == true",
        "syntheticDiagnostic == false"
      ],
      "expectedSelector": "2:0",
      "expectedSelectedPointerHex": "0x00540714",
      "expectedRouteMaps": [
        "map1_01a",
        "map2_02d"
      ],
      "exampleRecord": {
        "inputId": "real-selector-2-0-save",
        "path": "SAVEDATA/savedatN.dat",
        "capturedFromGameplay": true,
        "selector": "2:0",
        "selectedPointerHex": "0x00540714",
        "fieldMaps": [
          "map1_01a",
          "map2_02d"
        ],
        "syntheticDiagnostic": false,
        "notes": "Replace N/path with the captured save slot."
      }
    },
    {
      "id": "normal-route-runtime-trace",
      "proofPackageId": "runtime-trace-or-equivalent-selected-root-proof",
      "artifactKind": "runtime trace, watchpoint log, or equivalent selected-root execution proof",
      "acceptedSignal": "0x0059de30 becomes 0x00540714, or 0x00542b0c / 0x0040c675 is observed on a non-diagnostic route path",
      "submitBy": [
        "Attach a trace/log artifact that records the normal route path, not a constructed diagnostic",
        "Refresh selected-root and route-promotion reports after adding the artifact summary"
      ],
      "refreshCommands": [
        "python3 tools/summarize_selected_root_execution_external_proof_packet.py",
        "python3 tools/summarize_route_promotion_external_proof_handoff.py",
        "python3 tools/summarize_completion_audit.py",
        "python3 tools/verify_web_assets.py"
      ],
      "requiredChecks": [
        "normalRoutePath == true",
        "diagnosticRun == false",
        "selectedPointerGlobalVaHex == 0x0059de30",
        "selectedPointerValueHex == 0x00540714",
        "selectedRootExecutionRefFound == true or equivalent proof found",
        "trace reaches one accepted trace point on the route path"
      ],
      "acceptedTracePoints": [
        {
          "addressHex": "0x0059e348",
          "name": "mode1 source write watchpoint",
          "kind": "watch-write-byte",
          "purpose": "break on any runtime producer of opcode 0x24 mode1 source before the handler reads it"
        },
        {
          "addressHex": "0x0040c675",
          "name": "opcode24 mode1 read",
          "kind": "execute-breakpoint",
          "purpose": "confirm the value consumed by opcode 0x24 mode1 on the map1_01a->map2_02d path"
        },
        {
          "addressHex": "0x00542b0c",
          "name": "current blocker frontier reader",
          "kind": "execute-breakpoint",
          "purpose": "confirm the control path reaches the branch reader and capture selectionBuffer[0x20]"
        },
        {
          "addressHex": "0x005428c4",
          "name": "gate-time context base proof",
          "kind": "execute-breakpoint",
          "purpose": "capture context+0xa8 base and gate index before the first inherited gate"
        }
      ],
      "exampleRecord": {
        "inputId": "normal-route-runtime-trace",
        "traceTool": "external debugger/watchpoint environment",
        "normalRoutePath": true,
        "diagnosticRun": false,
        "selectedPointerGlobalVaHex": "0x0059de30",
        "selectedPointerValueHex": "0x00540714",
        "selectedRootHex": "0x00540714",
        "observedTracePoints": [
          {
            "addressHex": "0x0059de30",
            "event": "selected pointer observed as 0x00540714"
          },
          {
            "addressHex": "0x00542b0c",
            "event": "frontier reader executed on route path"
          }
        ]
      }
    },
    {
      "id": "strict-source-hotspot",
      "proofPackageId": "strict-source-hotspot-review",
      "artifactKind": "strict source coordinate, event row, tile hotspot review, or equivalent trigger proof",
      "acceptedSignal": "strictSourceHotspotProofFound == true and tileHotspotConfirmed == true for the same map1_01a -> map2_02d candidate",
      "submitBy": [
        "Attach the candidate side/source tile/target spawn and supporting review artifact",
        "Refresh strict-source hotspot and route-promotion reports after adding the review result"
      ],
      "refreshCommands": [
        "python3 tools/summarize_strict_source_hotspot_external_review_packet.py",
        "python3 tools/summarize_route_promotion_gate.py",
        "python3 tools/summarize_completion_audit.py",
        "python3 tools/verify_web_assets.py"
      ],
      "requiredChecks": [
        "sourceMap == map1_01a",
        "targetMap == map2_02d",
        "strictSourceHotspotProofFound == true",
        "tileHotspotConfirmed == true",
        "selector-only scene-list adjacency is not the only evidence"
      ],
      "candidateSides": [
        "top",
        "bottom",
        "left",
        "right"
      ],
      "exampleRecord": {
        "inputId": "strict-source-hotspot",
        "sourceMap": "map1_01a",
        "targetMap": "map2_02d",
        "candidateSide": "top|bottom|left|right",
        "sourceTile": {
          "x": null,
          "y": null
        },
        "targetSpawn": {
          "x": null,
          "y": null
        },
        "strictSourceHotspotProofFound": true,
        "tileHotspotConfirmed": true,
        "supportingArtifact": "manual-review-or-runtime-trigger-log"
      }
    }
  ],
  "notAcceptedEvidence": [
    "out/synthetic_savedat_selector_2_0.dat is constructed diagnostic data, not captured gameplay savedata",
    "out/runtime_patched_public_savedat_selector_2_0*.dat files are generated patched diagnostics, not captured gameplay savedata",
    "public editor/remaster pages are source refs only; they do not contain original selector 2:0 savedata",
    "patched selector/runtime diagnostic polls are non-promoting unless reproduced by real captured state"
  ]
}
