{
  "schemaVersion": 1,
  "kind": "wonder-boy-gamepad-time-controls-provenance",
  "updatedAtUtc": "2026-10-28T22:06:16.081Z",
  "implementation": {
    "path": "time-controls.mjs",
    "sha256": "4cc3db6bdce07c1b29bb337938bdd4e4aa815963fbd27f62df53236d47a0cdd7",
    "scope": "Game-specific application controls. Original ROM, native core, retained vendor files and the shared reconnect adapter are unchanged."
  },
  "standardMapping": {
    "source": {
      "title": "W3C Gamepad API — Standard Gamepad mapping",
      "url": "https://w3c.github.io/gamepad/"
    },
    "leftTrigger": {
      "buttonIndex": 6,
      "action": "rewind"
    },
    "rightTrigger": {
      "buttonIndex": 7,
      "action": "fast-forward"
    }
  },
  "selection": {
    "player": 1,
    "requiredMapping": "standard",
    "identity": "The connected browser Gamepad id and index must match the emulator’s Player1 assignment.",
    "fallbackToOtherPads": false
  },
  "activation": {
    "pressThreshold": 0.6,
    "releaseThreshold": 0.25,
    "valueRange": [
      0,
      1
    ],
    "initialAndBoundaryRearm": "Both triggers must be released before a new hold can begin.",
    "simultaneousTriggers": "Rewind takes priority when history is available.",
    "emptyHistory": "A left-trigger hold begun without history remains inactive until released and pressed again.",
    "exhaustedHistory": "Both triggers must be released before time control can resume."
  },
  "preservedControls": {
    "keyboard": "Existing F/R holds retain their keyboard-binding conflict checks.",
    "buttons": "Existing on-screen pointer and keyboard button holds remain available.",
    "fastForwardTargets": [
      2,
      3,
      4,
      8
    ],
    "rewindTargets": [
      1,
      2,
      4,
      8
    ],
    "speedMeaning": "Fast-forward is a target native ratio; rewind consumes selected elapsed game time from the recent snapshot journal."
  },
  "boundaries": [
    "blur",
    "hidden page",
    "pagehide",
    "pause",
    "busy file or player action",
    "load",
    "reset or history clear",
    "controller disconnect or reassignment",
    "controller reconnect adapter reset",
    "settings and control menus",
    "focus outside the game",
    "speed selection change"
  ],
  "reservedTriggerInputs": "Only Player1 nonzero ordinary or hotkey emissions originating from physical trigger button events are suppressed. Releases, other players, other buttons and axes keep their existing path.",
  "verification": {
    "kind": "Mock Gamepad/DOM/RAF and lifecycle tests, with actual retained vendor callbacks and the local shared-adapter implementation.",
    "passed": true,
    "evidenceSha256": "036861d301690e25419c870478b022d85867fa4abd8c93e50ab7df5300709f29",
    "checkGroups": 31,
    "lifecycleBoundaryCases": 13,
    "adapterOrderCases": 2,
    "physicalHardwareVerified": false,
    "physicalHardwareTests": 0
  },
  "limits": [
    "This evidence does not establish physical controller behavior or browser Gamepad availability.",
    "Native scheduling and device performance can differ from the selected fast-forward target."
  ]
}
