{
  "format": "shadowrun-matchbox-inventory-provenance-v1",
  "version": 1,
  "guideBehaviorVersion": "1.6.0",
  "baseGuideVersion": "1.1.0",
  "previousGuideBehaviorVersion": "1.5.0",
  "sourceRomSha256": "586551eadaff2693c0f21d9c47a697841989ae312d422fa4bf30823473a40fae",
  "romModified": false,
  "runtimeModified": false,
  "guideScript": {
    "file": "matchbox-guide.js",
    "bytes": 35136,
    "sha256": "beb0c0eaff97b2efa8c3e2ce10b02439a8e522c80ad5510c2d351c93f3409f1e"
  },
  "guideStyle": {
    "file": "matchbox-guide.css",
    "bytes": 2749,
    "sha256": "5afd8f21481a7c2d424ba17aaa8f8c54aa65933df3378a9589d72ad1210c79be"
  },
  "bridge": {
    "file": "ram-bridge.js",
    "bytes": 9025,
    "sha256": "8ad6968da3c32e8cfbbc8bce6ea8d6086b8dc887e80af901295b63d9c9fe3a21"
  },
  "writeAllowlistHex": [
    "1CDB",
    "1CDC",
    "2FA2",
    "2FA3",
    "3059",
    "305A"
  ],
  "nativeInventory": {
    "entityIdHex": "08C0",
    "scriptId": 294,
    "scriptBytecodeCpuHex": "9EE864",
    "nativeDescriptionTextId": 129,
    "englishReference": "The matchbox has a \"WASTELANDS club\" logo on the back.",
    "sourceBehavior": "Japanese item294 offers Examine/Exit and text129; it has no active Western debug-room trigger.",
    "statusRoot": {
      "scriptId": 474,
      "bytecodeCpuHex": "9BC4E1",
      "pc": 89,
      "wait": 0,
      "resumeHex": "F4D9",
      "nativeCallHex": "D8"
    },
    "selection": {
      "inventoryWindowAddressHex": "1F40",
      "inventoryWindow": 4,
      "selectedJakeEntityAddressHex": "1F4A",
      "selectedJakeSlotAddressHex": "1F4C",
      "selectedIndexAddressHex": "1F5E",
      "selectedEntityAddressHex": "1F60",
      "entityListBaseAddressHex": "1E1D",
      "indexRange": [
        0,
        64
      ],
      "selectedEntityHex": "08C0",
      "source": "ROM80E5A2..80E5AA selects1F5E, reads1E1D+index*2, stores1F60, then80E3F1 allocates the temporary original item actor."
    },
    "actions": {
      "currentWindowAddressHex": "0208",
      "currentWindow": 6,
      "descriptionWindowAddressHex": "0222",
      "descriptionWindow": 65535,
      "activeItemPc": 6,
      "itemWait": 0,
      "itemResume": 0
    },
    "description": {
      "currentWindow": 6,
      "descriptionWindow": 6,
      "itemVmAlreadyEnded": true
    },
    "guards": "Complete128KiB current RAM; valid original entry and native NMI80C281; dynamic Jake slot/equivalent selected Jake and owner08A4; idle native control/HUD/brightness/fade/conversation/room queue; exact unique CURRENT linked Jake inventory process; exact selected list entity. Actions additionally require unique CURRENT item294 process. Cached VM bytes do not qualify.",
    "eligibility": "Enhancement enabled plus actual owned selected Matchbox may offer explicit Use even if optional old guide-unlock metadata is absent. Merely inspecting never warps. Cancel leaves native menus and state unchanged.",
    "cancelLatch": {
      "presentationOnly": true,
      "semanticIdentity": [
        "entry",
        "Jake slot",
        "selected index",
        "selected entity"
      ],
      "retainedNativeWindows": [
        4,
        6
      ],
      "clearOn": [
        "status2",
        "field",
        "consistent different selection or entry",
        "restore",
        "toggle"
      ],
      "strictAuthorizationUnchanged": true,
      "sourceReason": "Actual Examine tears down actions6 through inventory4 for2 frames, then rebuilds6 with a6-frame strict-context gap before description; semantic selection and root identity remain unchanged."
    },
    "key": "entry:dynamicJakeSlot:linkedRootOffset:linkedRootContext:selectedIndex:phase"
  },
  "inputCloseProtocol": {
    "requiresExplicitAcceptedUse": true,
    "input": "Only original Player1 SNES B, libretro input0, through gameManager.simulateInput(0,0,1) and matching release0.",
    "initialNeutralNativeFrames": 30,
    "cachedJoypadWordsHex": [
      "01D0",
      "01D2",
      "01D4"
    ],
    "maxPulses": 3,
    "targetPressNativeFrames": 3,
    "releaseNativeFramesBetweenPulses": 30,
    "transientWaitOnly": [
      {
        "window": 4,
        "description": 6
      },
      {
        "window": 0,
        "description": 65535
      }
    ],
    "sourceObservedPhases": [
      "item6",
      "inventory4",
      "status2",
      "safeFieldFFFE"
    ],
    "maxNativeFrames": 180,
    "wallTimeoutMilliseconds": 6000,
    "rechecks": "Before each positive press require the same entry, ownership and valid current native inventory phase, selected Matchbox identity and linked Jake context. Stop/release on cancellation, hidden/blur, restore, changed state or timeout. Request a room only after fresh safeField succeeds.",
    "onlyRamWrites": "Existing four queue bytes2FA2/2FA3/1CDB/1CDC after native menus close. No menu/current-process/text writes; no loadState, helper285 or ROM patch."
  },
  "verification": {
    "nativeInventoryInteractionTested": true,
    "nativeRoundtripTested": true,
    "nativeBootWithoutFixtureImport": true,
    "productionGuideSha256": "beb0c0eaff97b2efa8c3e2ce10b02439a8e522c80ad5510c2d351c93f3409f1e",
    "unchangedBridgeSha256": "8ad6968da3c32e8cfbbc8bce6ea8d6086b8dc887e80af901295b63d9c9fe3a21",
    "sourceHelperTestsPassed": 9,
    "nativeExamineTransitionFrames": 94,
    "nativeExamineStrictContextGapFrames": 8,
    "nativeExamineTemporaryInventoryFrames": 2,
    "nativeExamineSemanticSelectionStable": true,
    "firstActionDebounceCases": 8,
    "recommendedInitialNeutralFrames": 30,
    "directProductionNativeCloseFrameComparisons": 396,
    "perNativeCloseFrameChecks": 396,
    "transientWaitFrames": 85,
    "directProductionComparisons": 549,
    "nativeRoutes": [
      {
        "origin": 3,
        "target": 210,
        "returned": true,
        "closePulses": 3,
        "entityRecordsCompared": 701,
        "entityRecordChanges": 0,
        "ownerUnchanged": true,
        "statsEqual": true,
        "storyEqual": true,
        "partyEqual": true
      },
      {
        "origin": 58,
        "target": 210,
        "returned": true,
        "closePulses": 3,
        "entityRecordsCompared": 701,
        "entityRecordChanges": 0,
        "ownerUnchanged": true,
        "statsEqual": true,
        "storyEqual": true,
        "partyEqual": true
      },
      {
        "origin": 69,
        "target": 210,
        "returned": true,
        "closePulses": 3,
        "entityRecordsCompared": 701,
        "entityRecordChanges": 0,
        "ownerUnchanged": true,
        "statsEqual": true,
        "storyEqual": true,
        "partyEqual": true
      },
      {
        "origin": 210,
        "target": 3,
        "returned": true,
        "closePulses": 3,
        "entityRecordsCompared": 701,
        "entityRecordChanges": 0,
        "ownerUnchanged": true,
        "statsEqual": true,
        "storyEqual": true,
        "partyEqual": true
      }
    ],
    "actualNegativePaperDescription": {
      "source": "Retained original Japanese native research capture, not user data and never loaded into the tested pinned-core runs.",
      "selectedEntityHex": "0222",
      "matchboxOwnerHex": "08A4",
      "sameNativeWindows": [
        6,
        6
      ],
      "detectorResult": null
    }
  },
  "sourceReceiptSha256": "e9ac06fad031439ad3e18dac432729fd6606be6ea56c4ec4a4f309decfb9ed6a",
  "uiProofSha256": "01c8bc7c51b2a8fa33c07c0de4b7222a2c77b992d5de9a3b419b131b5a5e23c8",
  "browserProofSha256": "aaf7c75efa66595749c65e5127339ef609d6640530a472a7dbefa981581c0e36",
  "presentation": "An optional browser enhancement observes the exact original Matchbox item interaction and offers explicit Use/Cancel. The original ROM bytes, artwork, title and other item descriptions stay unchanged.",
  "metadata": {
    "originalEnvelope": "cosom-shadowrun-original-state-v1",
    "guideVersion": 2,
    "acceptsVersion1": true
  },
  "limitations": [
    "The prior1.5 fix exposed separate toolbar/keyboard/controller controls; this1.6 update connects the native inventory interaction.",
    "No automatic warp occurs merely for inspecting the item. Native menus must close and a fresh source-verified safe field must be ready before the existing room request.",
    "Return uses the original entrance spawn, not the prior standing tile.",
    "Physical controller-button tests and a complete Japanese campaign are not claimed."
  ]
}
