{
  "contract": "control-options",
  "version": 2,
  "templates": [
    {
      "id": "control-options-vocabulary",
      "title": "control options uses control sets, presets, bindings, action inputs, and demanding inputs",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and its cited control rules",
        "when": [
          "the control path is identified from platform selection through physical activation"
        ],
        "then": [
          "a control set is the complete current mapping for one platform and input method",
          "a preset is an immutable named source set that can become current",
          "a binding joins one physical input and press style to one candidate action",
          "one physical activation emits one action input carrying every matched binding's action",
          "a demanding input is a timed, held, rapid, repeated, double, simultaneous, input-sequence, or required-device-motion input"
        ],
        "diagnostics": [
          "{{instance}}-current-set",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "A control set is the complete current mapping for one platform and input method. A preset is an immutable named source set that can become current. A binding joins one physical input and press style to one candidate action. One physical activation emits one action input carrying every matched binding's action. A demanding input is a timed, held, rapid, repeated, double, simultaneous, input-sequence, or required-device-motion input."
    },
    {
      "id": "platform-row-selects-exactly-when-cited",
      "title": "{{row.id}} is selected exactly for its cited platform and devices",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "platform-control-set row {{row.id}} and the Fixed platform rule at {{row.platform-declared-in}}",
        "when": [
          "the game runs on each cited platform, edition, and supported device combination and on the nearest combination the citation excludes"
        ],
        "then": [
          "{{row.id}} is the one selected row for every combination the citation covers",
          "{{row.id}} is not selected for a combination the citation excludes",
          "the test leaves the covered combinations to {{row.platform-declared-in}} and restates nothing from it"
        ],
        "diagnostics": [
          "{{instance}}-platform-selection"
        ]
      },
      "text": "Platform row {{row.id}} is the one selected row exactly on the platform, edition, and supported devices at {{row.platform-declared-in}}. It is not selected where that citation excludes it. The test names the address and restates nothing from it."
    },
    {
      "id": "starting-control-set-follows-platform-rule",
      "title": "{{row.id}} starts with the control set chosen by its cited rule",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "a first play on platform row {{row.id}} and the Fixed settings rule at {{row.settings-rule-declared-in}}",
        "when": [
          "the current set is first established"
        ],
        "then": [
          "the complete starting control set is the one selected through {{row.settings-rule-declared-in}}",
          "every first binding lookup reads that current set",
          "the test restates nothing from the cited rule"
        ],
        "diagnostics": [
          "{{instance}}-current-set"
        ]
      },
      "text": "On first play for {{row.id}}, the complete starting control set comes from {{row.settings-rule-declared-in}}, and every first binding lookup reads it as current. The test names the address and restates nothing from it."
    },
    {
      "id": "preset-selection-copies-complete-set",
      "title": "preset {{row.id}} becomes current through its cited route",
      "type": "scenario",
      "expand": "per-row",
      "collection": "control-presets",
      "bindings": {
        "availability-result": {
          "row_field": "availability",
          "map": {
            "starting-and-selectable": "is current on first play and remains selectable afterward",
            "player-selectable": "does not become current before selection and becomes current when the player selects it",
            "mode-selected": "becomes current when the cited player mode is entered and not before that cited selection"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "preset {{row.id}} labeled {{row.label}} for platform row {{row.platform-control-set}} and the Fixed route at {{row.selection-rule-declared-in}}",
        "when": [
          "the cited route is used and the current set is inspected before and after selection"
        ],
        "then": [
          "{{row.id}} {{bind:availability-result}}",
          "selection copies every matching action-binding row into one complete current set",
          "the source preset remains unchanged",
          "the test restates nothing from {{row.selection-rule-declared-in}}"
        ],
        "diagnostics": [
          "{{instance}}-current-set",
          "{{instance}}-change-log"
        ]
      },
      "text": "Preset {{row.id}}, labeled {{row.label}}, belongs to {{row.platform-control-set}}. Through {{row.selection-rule-declared-in}}, it {{bind:availability-result}}. Selection copies every matching binding into one complete current set and leaves the source preset unchanged. The test names the address and restates nothing from it."
    },
    {
      "id": "input-method-coverage-holds",
      "title": "{{row.id}} input methods cover its actions as promised",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "bindings": {
        "coverage-procedure": {
          "row_field": "input-method-coverage",
          "map": {
            "one-method-covers-all": "the one complete method named by the citation performs every action bound on the platform without another method",
            "player-chooses-method": "each complete method named by the citation separately performs every action bound on the platform without switching to another method",
            "mixed-methods-needed": "all named methods together perform every action bound on the platform in that set; where at least one bound action in that set requires the cited switch, the switch occurs where the citation places it; where none does, this test checks nothing about the switch"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "platform row {{row.id}}, every action bound on that platform, and the complete methods and any required switch at {{row.methods-declared-in}}",
        "when": [
          "in each preset-derived current set the platform can make current, an observer performs every action bound on the platform using the named method or methods"
        ],
        "then": [
          "{{bind:coverage-procedure}}",
          "an observer, not the running game, judges this",
          "the test restates nothing from the cited rule"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this in each preset-derived current set {{row.id}} can make current. For every action bound on the platform, under the complete methods and any required switch at {{row.methods-declared-in}}: {{bind:coverage-procedure}}. The test names the address and restates nothing from it."
    },
    {
      "id": "remapping-fixed-override",
      "title": "{{row.id}} keeps fixed bindings by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "row": {
          "remapping": [
            "fixed-bindings"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the current set for {{row.id}} and its control setting route at {{row.settings-rule-declared-in}}",
        "when": [
          "an observer attempts to change an action's physical input and press style, then performs the action"
        ],
        "then": [
          "every control change is refused and the current set is unchanged",
          "the existing binding still performs the action",
          "where this platform has a movable or resizable touch control, changing its layout while keeping its action is not a control change; where it has none, this test checks nothing about a touch control",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-current-set"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: every attempted change to an action's physical input or press style is refused, the current set stays unchanged, and the existing binding performs the action. Where this platform has a movable or resizable touch control, changing its layout while keeping its action is not a control change; where it has none, this test checks nothing about a touch control. The route is at {{row.settings-rule-declared-in}}; the test restates nothing from it."
    },
    {
      "id": "remapping-fixed-default",
      "title": "{{row.id}} keeps fixed bindings by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "flag": {
          "remapping-default": [
            "fixed-bindings"
          ]
        },
        "row": {
          "remapping": [
            "use-game-default"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the current set for {{row.id}} and its control setting route at {{row.settings-rule-declared-in}}",
        "when": [
          "an observer attempts to change an action's physical input and press style, then performs the action"
        ],
        "then": [
          "every control change is refused and the current set is unchanged",
          "the existing binding still performs the action",
          "where this platform has a movable or resizable touch control, changing its layout while keeping its action is not a control change; where it has none, this test checks nothing about a touch control",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-current-set"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: every attempted change to an action's physical input or press style is refused, the current set stays unchanged, and the existing binding performs the action. Where this platform has a movable or resizable touch control, changing its layout while keeping its action is not a control change; where it has none, this test checks nothing about a touch control. The route is at {{row.settings-rule-declared-in}}; the test restates nothing from it."
    },
    {
      "id": "remapping-swap-override",
      "title": "{{row.id}} permits only exchanges by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "row": {
          "remapping": [
            "swap-only"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "two supported existing assignments and one otherwise unused supported input in {{row.id}}, changed through {{row.settings-rule-declared-in}}",
        "when": [
          "an observer exchanges the two assignments, performs both actions, and then tries to move one action independently to the unused input"
        ],
        "then": [
          "the exchange is accepted as one swap and the resulting complete set becomes current",
          "each new binding performs its exchanged action and each old binding no longer performs the action moved away from it",
          "the independent move is refused and leaves the current set unchanged",
          "every later binding lookup reads the new current set",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-current-set",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: an exchange of two existing assignments is accepted, each new binding performs its exchanged action, and each old binding stops performing the action moved away from it. An independent move to an unused input is refused. The complete result becomes current for every later lookup. The route is at {{row.settings-rule-declared-in}}; the test restates nothing from it."
    },
    {
      "id": "remapping-swap-default",
      "title": "{{row.id}} permits only exchanges by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "flag": {
          "remapping-default": [
            "swap-only"
          ]
        },
        "row": {
          "remapping": [
            "use-game-default"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "two supported existing assignments and one otherwise unused supported input in {{row.id}}, changed through {{row.settings-rule-declared-in}}",
        "when": [
          "an observer exchanges the two assignments, performs both actions, and then tries to move one action independently to the unused input"
        ],
        "then": [
          "the exchange is accepted as one swap and the resulting complete set becomes current",
          "each new binding performs its exchanged action and each old binding no longer performs the action moved away from it",
          "the independent move is refused and leaves the current set unchanged",
          "every later binding lookup reads the new current set",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-current-set",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: an exchange of two existing assignments is accepted, each new binding performs its exchanged action, and each old binding stops performing the action moved away from it. An independent move to an unused input is refused. The complete result becomes current for every later lookup. The route is at {{row.settings-rule-declared-in}}; the test restates nothing from it."
    },
    {
      "id": "remapping-presets-override",
      "title": "{{row.id}} permits only preset selection by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "row": {
          "remapping": [
            "presets-only"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "two complete selectable declared presets for {{row.id}} and the settings route at {{row.settings-rule-declared-in}}",
        "when": [
          "an observer selects another starting-and-selectable or player-selectable preset through the settings route, performs an action whose binding differs, and then tries to change one binding through that route"
        ],
        "then": [
          "preset selection is accepted and its complete copy becomes current",
          "the new binding performs the action and the old binding does not",
          "the individual binding change is refused and leaves the current set unchanged",
          "every later binding lookup reads the new current set",
          "a mode-selected preset is entered through its cited mode, and this test checks nothing about such a preset",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-current-set",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: selecting another starting-and-selectable or player-selectable preset through {{row.settings-rule-declared-in}} is accepted, its complete copy becomes current, its new binding performs the action, and the old binding does not. An individual binding change through that route is refused. Every later lookup reads the new current set. A mode-selected preset is entered through its cited mode, and this test checks nothing about such a preset. The test names the address and restates nothing from it."
    },
    {
      "id": "remapping-presets-default",
      "title": "{{row.id}} permits only preset selection by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "flag": {
          "remapping-default": [
            "presets-only"
          ]
        },
        "row": {
          "remapping": [
            "use-game-default"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "two complete selectable declared presets for {{row.id}} and the settings route at {{row.settings-rule-declared-in}}",
        "when": [
          "an observer selects another starting-and-selectable or player-selectable preset through the settings route, performs an action whose binding differs, and then tries to change one binding through that route"
        ],
        "then": [
          "preset selection is accepted and its complete copy becomes current",
          "the new binding performs the action and the old binding does not",
          "the individual binding change is refused and leaves the current set unchanged",
          "every later binding lookup reads the new current set",
          "a mode-selected preset is entered through its cited mode, and this test checks nothing about such a preset",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-current-set",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: selecting another starting-and-selectable or player-selectable preset through {{row.settings-rule-declared-in}} is accepted, its complete copy becomes current, its new binding performs the action, and the old binding does not. An individual binding change through that route is refused. Every later lookup reads the new current set. A mode-selected preset is entered through its cited mode, and this test checks nothing about such a preset. The test names the address and restates nothing from it."
    },
    {
      "id": "remapping-free-override",
      "title": "{{row.id}} permits free assignment by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "row": {
          "remapping": [
            "any-action-any-input"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "each covered action, each supported remappable input including an unused one, and {{row.settings-rule-declared-in}} for {{row.id}}",
        "when": [
          "an observer independently assigns an action to each supported input, resolves a conflicting assignment, performs the action, and attempts one unsupported assignment"
        ],
        "then": [
          "every supported independent assignment is accepted, including assignment to the unused input",
          "a conflict is resolved visibly before use",
          "the new binding performs the action and the old binding does not",
          "after an accepted change, each binding row's promises follow its action to the input the current set assigns",
          "the unsupported assignment is refused and leaves the current set unchanged",
          "every accepted complete result becomes current for every later lookup",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-current-set",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: every covered action can move independently to every supported remappable input, including an unused one; conflicts resolve visibly before use; the new binding performs the action and the old one does not. After an accepted change, the contract makes each binding row's promises follow its action to the input the current set assigns. An unsupported assignment is refused. Each accepted complete result becomes current for every later lookup. The route is at {{row.settings-rule-declared-in}}; the test restates nothing from it."
    },
    {
      "id": "remapping-free-default",
      "title": "{{row.id}} permits free assignment by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "flag": {
          "remapping-default": [
            "any-action-any-input"
          ]
        },
        "row": {
          "remapping": [
            "use-game-default"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "each covered action, each supported remappable input including an unused one, and {{row.settings-rule-declared-in}} for {{row.id}}",
        "when": [
          "an observer independently assigns an action to each supported input, resolves a conflicting assignment, performs the action, and attempts one unsupported assignment"
        ],
        "then": [
          "every supported independent assignment is accepted, including assignment to the unused input",
          "a conflict is resolved visibly before use",
          "the new binding performs the action and the old binding does not",
          "after an accepted change, each binding row's promises follow its action to the input the current set assigns",
          "the unsupported assignment is refused and leaves the current set unchanged",
          "every accepted complete result becomes current for every later lookup",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-current-set",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: every covered action can move independently to every supported remappable input, including an unused one; conflicts resolve visibly before use; the new binding performs the action and the old one does not. After an accepted change, the contract makes each binding row's promises follow its action to the input the current set assigns. An unsupported assignment is refused. Each accepted complete result becomes current for every later lookup. The route is at {{row.settings-rule-declared-in}}; the test restates nothing from it."
    },
    {
      "id": "remapping-press-style-override",
      "title": "{{row.id}} permits input and press-style changes by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "row": {
          "remapping": [
            "action-and-press-style"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "each covered action, each supported remappable input, each press style offered for that action by {{row.settings-rule-declared-in}}, and one unsupported choice",
        "when": [
          "an observer changes the input and offered press style, performs the action with the new combination, then attempts the unsupported choice"
        ],
        "then": [
          "every supported input change and every offered press-style change is accepted",
          "the new binding and press style perform the action and the old combination does not",
          "after an accepted change, each binding row's promises follow its action to the input the current set assigns",
          "the unsupported choice is refused and leaves the current set unchanged",
          "every accepted complete result becomes current for every later lookup",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-setting-state",
          "{{instance}}-current-set",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: every covered action can move to every supported remappable input and use every press style offered for it; the new combination performs the action and the old one does not. After an accepted change, the contract makes each binding row's promises follow its action to the input the current set assigns. An unsupported choice is refused. Each accepted complete result becomes current for every later lookup. Offered choices and the route stay at {{row.settings-rule-declared-in}}; the test restates nothing from it."
    },
    {
      "id": "remapping-press-style-default",
      "title": "{{row.id}} permits input and press-style changes by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "when": {
        "flag": {
          "remapping-default": [
            "action-and-press-style"
          ]
        },
        "row": {
          "remapping": [
            "use-game-default"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "each covered action, each supported remappable input, each press style offered for that action by {{row.settings-rule-declared-in}}, and one unsupported choice",
        "when": [
          "an observer changes the input and offered press style, performs the action with the new combination, then attempts the unsupported choice"
        ],
        "then": [
          "every supported input change and every offered press-style change is accepted",
          "the new binding and press style perform the action and the old combination does not",
          "after an accepted change, each binding row's promises follow its action to the input the current set assigns",
          "the unsupported choice is refused and leaves the current set unchanged",
          "every accepted complete result becomes current for every later lookup",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-change-log",
          "{{instance}}-setting-state",
          "{{instance}}-current-set",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: every covered action can move to every supported remappable input and use every press style offered for it; the new combination performs the action and the old one does not. After an accepted change, the contract makes each binding row's promises follow its action to the input the current set assigns. An unsupported choice is refused. Each accepted complete result becomes current for every later lookup. Offered choices and the route stay at {{row.settings-rule-declared-in}}; the test restates nothing from it."
    },
    {
      "id": "binding-scope-follows-current-set",
      "title": "{{row.id}} exists in its declared control-set scope",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}} on platform row {{row.platform-control-set}}",
        "when": [
          "the current set is inspected across its reachable control-set and play contexts"
        ],
        "then": [
          "the binding belongs to its named preset while that preset is current, where the row names one; otherwise it belongs to the platform's base or freely remappable set",
          "the binding exists throughout the selected control set, or only in the cited context where the row names one",
          "for a preset or context that the row does not name, this test checks nothing"
        ],
        "diagnostics": [
          "{{instance}}-current-set",
          "{{instance}}-match-trace"
        ]
      },
      "text": "Binding {{row.id}} belongs to its named preset while that preset is current, where the row names one; otherwise it belongs to {{row.platform-control-set}}'s base or freely remappable set. It exists throughout the selected control set, or only in the cited context where the row names one. For a preset or context that the row does not name, this test checks nothing."
    },
    {
      "id": "binding-matches-cited-performance",
      "title": "{{row.id}} matches only its cited {{row.press-style}} performance",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {
        "performance": {
          "row_field": "press-style",
          "map": {
            "press": "the cited input is pressed",
            "release": "the cited input is released",
            "timed-press": "the cited input is pressed at its cited target moment",
            "hold": "the cited input is held for its cited completion",
            "rapid-presses": "the cited input is pressed at its cited rate",
            "repeated-presses": "the cited input reaches its cited activation count",
            "double-press": "the cited input completes its cited double activation",
            "simultaneous-inputs": "the cited input group is performed simultaneously",
            "continuous-axis": "the cited axis is performed in its cited range and direction",
            "gesture": "the cited gesture completes",
            "input-sequence": "the cited directional sequence is completed by its press"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}}, action {{row.action-declared-in}}, and the physical input, device, and performance at {{row.physical-input-declared-in}}",
        "when": [
          "{{bind:performance}} in the current platform, device, method, and set, then the nearest non-matching performance is attempted"
        ],
        "then": [
          "the matching performance emits one action input carrying the action at {{row.action-declared-in}}",
          "the non-matching performance emits nothing from this binding",
          "the test leaves the physical details to {{row.physical-input-declared-in}} and restates nothing from it"
        ],
        "diagnostics": [
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "For {{row.id}}, when {{bind:performance}} under {{row.physical-input-declared-in}}, one action input carries the action at {{row.action-declared-in}}. The nearest non-matching performance emits nothing from this binding. The test names both addresses and restates nothing from them."
    },
    {
      "id": "binding-context-settles-at-accepted-moment",
      "title": "the context of {{row.id}} is decided at the accepted moment",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {
        "context": {
          "row_field": "press-style",
          "map": {
            "press": "{{row.context-declared-in}}",
            "release": "{{row.context-declared-in}}",
            "timed-press": "{{row.context-declared-in}}",
            "hold": "{{row.context-declared-in}}",
            "rapid-presses": "{{row.context-declared-in}}",
            "repeated-presses": "{{row.context-declared-in}}",
            "double-press": "{{row.context-declared-in}}",
            "simultaneous-inputs": "{{row.context-declared-in}}",
            "continuous-axis": "{{row.context-declared-in}}",
            "gesture": "{{row.context-declared-in}}",
            "input-sequence": "{{row.context-declared-in}}"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "a physical performance matching {{row.id}} whose context is cited at {{bind:context}}",
        "when": [
          "the input is accepted once while the cited context holds and once while it does not"
        ],
        "then": [
          "the match remains provisional until the accepted moment",
          "the action at {{row.action-declared-in}} is a candidate only when the cited context holds at that moment",
          "this test restates nothing from {{bind:context}} and checks nothing about how an accepted moment is shifted"
        ],
        "diagnostics": [
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "For {{row.id}}, the physical match remains provisional until the accepted moment. Its action is a candidate only when the context at {{bind:context}} holds then. This test names the address, restates nothing from it, and checks nothing about how an accepted moment is shifted."
    },
    {
      "id": "binding-preset-is-current",
      "title": "{{row.id}} exists only while preset {{bind:preset}} is current",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {
        "preset": {
          "row_field": "press-style",
          "map": {
            "press": "{{row.preset}}",
            "release": "{{row.preset}}",
            "timed-press": "{{row.preset}}",
            "hold": "{{row.preset}}",
            "rapid-presses": "{{row.preset}}",
            "repeated-presses": "{{row.preset}}",
            "double-press": "{{row.preset}}",
            "simultaneous-inputs": "{{row.preset}}",
            "continuous-axis": "{{row.preset}}",
            "gesture": "{{row.preset}}",
            "input-sequence": "{{row.preset}}"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}} assigned to preset {{bind:preset}}",
        "when": [
          "its cited physical performance occurs while a set derived from {{bind:preset}} is current, after an accepted change to that current copy, and while a set derived from another preset is current"
        ],
        "then": [
          "{{row.id}} can match while a set derived from {{bind:preset}} is current",
          "an accepted change on that current copy does not remove the binding",
          "{{row.id}} cannot match through this row while a set derived from another preset is current"
        ],
        "diagnostics": [
          "{{instance}}-current-set",
          "{{instance}}-match-trace"
        ]
      },
      "text": "Under the contract, preset {{bind:preset}} is the starting source set for binding {{row.id}}. Its cited performance can match through a current set derived from that preset, and an accepted change on the current copy does not remove the binding. It cannot match through this row while a set derived from another preset is current."
    },
    {
      "id": "shared-physical-activation-stays-one-input",
      "title": "{{row.id}} shares action input {{bind:action-input}} consistently",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {
        "action-input": {
          "row_field": "press-style",
          "map": {
            "press": "{{row.action-input}}",
            "release": "{{row.action-input}}",
            "timed-press": "{{row.action-input}}",
            "hold": "{{row.action-input}}",
            "rapid-presses": "{{row.action-input}}",
            "repeated-presses": "{{row.action-input}}",
            "double-press": "{{row.action-input}}",
            "simultaneous-inputs": "{{row.action-input}}",
            "continuous-axis": "{{row.action-input}}",
            "gesture": "{{row.action-input}}",
            "input-sequence": "{{row.action-input}}"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "the physical activation at {{row.physical-input-declared-in}} shared by {{row.id}} and rows that can be current with it",
        "when": [
          "matching bindings on the same platform row are read from one current set"
        ],
        "then": [
          "every row that can be current with {{row.id}}, on the same platform row, all omitting a preset or all naming the same preset, with no disjoint cited contexts, names action input {{bind:action-input}}",
          "rows in another preset or a disjoint cited context are not in this group, and this test checks nothing about a shared value for those rows",
          "one {{bind:action-input}} is emitted and carries every matched binding's action as a candidate",
          "this test checks nothing about a paired Action legibility adoption"
        ],
        "diagnostics": [
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log",
          "{{instance}}-candidate-set"
        ]
      },
      "text": "Under the contract, rows form one shared-activation group only when they can be current together: they belong to the same platform row, either all omit a preset or all name the same preset, have no disjoint cited contexts, and share the physical activation at {{row.physical-input-declared-in}}. Every row that can be current with {{row.id}} agrees on action input {{bind:action-input}}. For rows in another preset or a disjoint context, this test checks nothing about this shared value. One such input is emitted with every matched binding's action as a candidate. This test checks nothing about a paired Action legibility adoption."
    },
    {
      "id": "simpler-input-matches-named-binding",
      "title": "{{row.id}} matches as binding {{row.action-binding}}",
      "type": "scenario",
      "expand": "per-row",
      "collection": "simpler-inputs",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "simpler route {{row.id}} at {{row.alternative-declared-in}} for binding {{row.action-binding}}",
        "when": [
          "the cited alternative input is performed and the current set contains the named binding"
        ],
        "then": [
          "the input matches as if it were {{row.action-binding}}",
          "it emits that binding's action input",
          "it contributes the same action as the named binding",
          "the test restates nothing from the cited alternative rule"
        ],
        "diagnostics": [
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Simpler route {{row.id}} uses the input at {{row.alternative-declared-in}}. It matches as if it were binding {{row.action-binding}}, emits that binding's action input, and contributes the same action. The test names the address and restates nothing from it."
    },
    {
      "id": "demanding-none-override",
      "title": "{{row.id}} has an ordinary route by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "row": {
          "demanding-input": [
            "no-demanding-presses"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}} and its cited action and physical-input rules",
        "when": [
          "an observer performs the covered action through its ordinary route without changing a setting"
        ],
        "then": [
          "the ordinary route produces an action input carrying the action at {{row.action-declared-in}}",
          "no demanding input is the action's only route",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: the action for {{row.id}} has an ordinary route without a setting change, and performing that route emits an action input carrying the action. A demanding input is not its only route."
    },
    {
      "id": "demanding-none-default",
      "title": "{{row.id}} has an ordinary route by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "flag": {
          "demanding-input-default": [
            "no-demanding-presses"
          ]
        },
        "row": {
          "demanding-input": [
            "use-game-default"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}} and its cited action and physical-input rules",
        "when": [
          "an observer performs the covered action through its ordinary route without changing a setting"
        ],
        "then": [
          "the ordinary route produces an action input carrying the action at {{row.action-declared-in}}",
          "no demanding input is the action's only route",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: the action for {{row.id}} has an ordinary route without a setting change, and performing that route emits an action input carrying the action. A demanding input is not its only route."
    },
    {
      "id": "demanding-simpler-press-style-override",
      "title": "the demanding press style of {{row.id}} follows simpler-alternative by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "row": {
          "demanding-input": [
            "simpler-alternative"
          ],
          "press-style": [
            "timed-press",
            "hold",
            "rapid-presses",
            "repeated-presses",
            "double-press",
            "simultaneous-inputs",
            "input-sequence"
          ],
          "motion-use": [
            "no-motion",
            "optional-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}}, its cited demanding press style, and every simpler-inputs row naming it",
        "when": [
          "an observer completes the demanding press style, performs every simpler route without configuration, and separately stops before completion"
        ],
        "then": [
          "the completed demanding route emits the binding's action input",
          "every simpler route remains available at the same time and emits the same action through its distinct input",
          "failure to finish the demanding route emits neither the demanding action input nor a simpler alternative by itself",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract treats the press style of {{row.id}} as demanding. Its completed demanding route and every declared simpler route stay available together without configuration and emit the same action through distinct inputs; failing to finish the demanding route triggers neither route."
    },
    {
      "id": "demanding-simpler-required-motion-override",
      "title": "the required motion of {{row.id}} follows simpler-alternative by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "row": {
          "demanding-input": [
            "simpler-alternative"
          ],
          "motion-use": [
            "required-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}}, its cited required motion, and every simpler-inputs row naming it",
        "when": [
          "an observer completes the required motion, performs every simpler route without configuration, and separately makes a non-motion attempt"
        ],
        "then": [
          "the completed required-motion route emits the binding's action input",
          "every simpler route remains available at the same time and emits the same action through its distinct input",
          "the non-motion attempt emits neither the demanding action input nor a simpler alternative by itself",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract makes {{row.id}} demanding because it requires device motion. Its completed motion route and every declared simpler route stay available together without configuration and emit the same action through distinct inputs; a non-motion attempt triggers neither route."
    },
    {
      "id": "demanding-simpler-press-style-default",
      "title": "the demanding press style of {{row.id}} follows simpler-alternative by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "flag": {
          "demanding-input-default": [
            "simpler-alternative"
          ]
        },
        "row": {
          "demanding-input": [
            "use-game-default"
          ],
          "press-style": [
            "timed-press",
            "hold",
            "rapid-presses",
            "repeated-presses",
            "double-press",
            "simultaneous-inputs",
            "input-sequence"
          ],
          "motion-use": [
            "no-motion",
            "optional-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}}, its cited demanding press style, and every simpler-inputs row naming it",
        "when": [
          "an observer completes the demanding press style, performs every simpler route without configuration, and separately stops before completion"
        ],
        "then": [
          "the completed demanding route emits the binding's action input",
          "every simpler route remains available at the same time and emits the same action through its distinct input",
          "failure to finish the demanding route emits neither the demanding action input nor a simpler alternative by itself",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract treats the press style of {{row.id}} as demanding. Its completed demanding route and every declared simpler route stay available together without configuration and emit the same action through distinct inputs; failing to finish the demanding route triggers neither route."
    },
    {
      "id": "demanding-simpler-required-motion-default",
      "title": "the required motion of {{row.id}} follows simpler-alternative by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "flag": {
          "demanding-input-default": [
            "simpler-alternative"
          ]
        },
        "row": {
          "demanding-input": [
            "use-game-default"
          ],
          "motion-use": [
            "required-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}}, its cited required motion, and every simpler-inputs row naming it",
        "when": [
          "an observer completes the required motion, performs every simpler route without configuration, and separately makes a non-motion attempt"
        ],
        "then": [
          "the completed required-motion route emits the binding's action input",
          "every simpler route remains available at the same time and emits the same action through its distinct input",
          "the non-motion attempt emits neither the demanding action input nor a simpler alternative by itself",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract makes {{row.id}} demanding because it requires device motion. Its completed motion route and every declared simpler route stay available together without configuration and emit the same action through distinct inputs; a non-motion attempt triggers neither route."
    },
    {
      "id": "demanding-setting-press-style-override",
      "title": "the demanding press style of {{row.id}} follows player-can-change-it by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "row": {
          "demanding-input": [
            "player-can-change-it"
          ],
          "press-style": [
            "timed-press",
            "hold",
            "rapid-presses",
            "repeated-presses",
            "double-press",
            "simultaneous-inputs",
            "input-sequence"
          ],
          "motion-use": [
            "no-motion",
            "optional-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}}, its cited demanding press style, and the player-facing demanding-input setting for its declared easier press style, which is not a control-remapping route",
        "when": [
          "an observer changes the setting and then performs the action with the easier current press style"
        ],
        "then": [
          "the setting replaces the demanding press style before the binding is used",
          "the easier press style does not remove any device motion the binding requires",
          "the observer's easier performance emits the action input carrying the action at {{row.action-declared-in}}",
          "the result is judged from performed play and not from a stored setting alone",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-setting-state",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract treats the press style of {{row.id}} as demanding. The observer changes the player-facing demanding-input setting, which is not a control-remapping route, and performs the action with the declared easier current press style; that performance emits the action input. The easier press style does not remove any device motion the binding requires. A stored setting alone is not evidence."
    },
    {
      "id": "demanding-setting-required-motion-override",
      "title": "the required motion of {{row.id}} follows player-can-change-it by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "row": {
          "demanding-input": [
            "player-can-change-it"
          ],
          "motion-use": [
            "required-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}}, its cited required motion, and the player-facing demanding-input setting for its declared easier press style, which is not a control-remapping route",
        "when": [
          "an observer changes the setting and then completes the required motion with the easier current press style"
        ],
        "then": [
          "the setting supplies the easier press style before the binding is used, and the required motion stays required",
          "the easier press style never relieves the device-motion requirement",
          "the observer's easier performance with the required motion emits the action input carrying the action at {{row.action-declared-in}}",
          "the result is judged from performed play and not from a stored setting alone",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-setting-state",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract makes {{row.id}} demanding because it requires device motion. The demanding-input setting, which is not a control-remapping route, supplies an easier press style and never relieves the motion requirement; performed play with the required motion emits the action input. A stored setting alone is not evidence."
    },
    {
      "id": "demanding-setting-press-style-default",
      "title": "the demanding press style of {{row.id}} follows player-can-change-it by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "flag": {
          "demanding-input-default": [
            "player-can-change-it"
          ]
        },
        "row": {
          "demanding-input": [
            "use-game-default"
          ],
          "press-style": [
            "timed-press",
            "hold",
            "rapid-presses",
            "repeated-presses",
            "double-press",
            "simultaneous-inputs",
            "input-sequence"
          ],
          "motion-use": [
            "no-motion",
            "optional-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}}, its cited demanding press style, and the player-facing demanding-input setting for its declared easier press style, which is not a control-remapping route",
        "when": [
          "an observer changes the setting and then performs the action with the easier current press style"
        ],
        "then": [
          "the setting replaces the demanding press style before the binding is used",
          "the easier press style does not remove any device motion the binding requires",
          "the observer's easier performance emits the action input carrying the action at {{row.action-declared-in}}",
          "the result is judged from performed play and not from a stored setting alone",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-setting-state",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract treats the press style of {{row.id}} as demanding. The observer changes the player-facing demanding-input setting, which is not a control-remapping route, and performs the action with the declared easier current press style; that performance emits the action input. The easier press style does not remove any device motion the binding requires. A stored setting alone is not evidence."
    },
    {
      "id": "demanding-setting-required-motion-default",
      "title": "the required motion of {{row.id}} follows player-can-change-it by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "flag": {
          "demanding-input-default": [
            "player-can-change-it"
          ]
        },
        "row": {
          "demanding-input": [
            "use-game-default"
          ],
          "motion-use": [
            "required-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}}, its cited required motion, and the player-facing demanding-input setting for its declared easier press style, which is not a control-remapping route",
        "when": [
          "an observer changes the setting and then completes the required motion with the easier current press style"
        ],
        "then": [
          "the setting supplies the easier press style before the binding is used, and the required motion stays required",
          "the easier press style never relieves the device-motion requirement",
          "the observer's easier performance with the required motion emits the action input carrying the action at {{row.action-declared-in}}",
          "the result is judged from performed play and not from a stored setting alone",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-setting-state",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract makes {{row.id}} demanding because it requires device motion. The demanding-input setting, which is not a control-remapping route, supplies an easier press style and never relieves the motion requirement; performed play with the required motion emits the action input. A stored setting alone is not evidence."
    },
    {
      "id": "demanding-required-press-style-override",
      "title": "the demanding press style of {{row.id}} follows required-as-written by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "row": {
          "demanding-input": [
            "required-as-written"
          ],
          "press-style": [
            "timed-press",
            "hold",
            "rapid-presses",
            "repeated-presses",
            "double-press",
            "simultaneous-inputs",
            "input-sequence"
          ],
          "motion-use": [
            "no-motion",
            "optional-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}} and its cited demanding press style",
        "when": [
          "an observer completes the demanding press style and separately stops before completion"
        ],
        "then": [
          "the complete demanding input emits the action input carrying the action at {{row.action-declared-in}}",
          "the incomplete demanding input emits no action input from this contract",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract treats the press style of {{row.id}} as demanding: completing it emits the action input and stopping before completion emits none from this contract."
    },
    {
      "id": "demanding-required-required-motion-override",
      "title": "the required motion of {{row.id}} follows required-as-written by its row answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "row": {
          "demanding-input": [
            "required-as-written"
          ],
          "motion-use": [
            "required-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}} and its cited required motion",
        "when": [
          "an observer completes the required motion and separately makes a non-motion attempt"
        ],
        "then": [
          "the complete required-motion input emits the action input carrying the action at {{row.action-declared-in}}",
          "the non-motion attempt emits no action input from this contract",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract makes {{row.id}} demanding because it requires device motion: completing the motion emits the action input and a non-motion attempt emits none from this contract."
    },
    {
      "id": "demanding-required-press-style-default",
      "title": "the demanding press style of {{row.id}} follows required-as-written by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "flag": {
          "demanding-input-default": [
            "required-as-written"
          ]
        },
        "row": {
          "demanding-input": [
            "use-game-default"
          ],
          "press-style": [
            "timed-press",
            "hold",
            "rapid-presses",
            "repeated-presses",
            "double-press",
            "simultaneous-inputs",
            "input-sequence"
          ],
          "motion-use": [
            "no-motion",
            "optional-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}} and its cited demanding press style",
        "when": [
          "an observer completes the demanding press style and separately stops before completion"
        ],
        "then": [
          "the complete demanding input emits the action input carrying the action at {{row.action-declared-in}}",
          "the incomplete demanding input emits no action input from this contract",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract treats the press style of {{row.id}} as demanding: completing it emits the action input and stopping before completion emits none from this contract."
    },
    {
      "id": "demanding-required-required-motion-default",
      "title": "the required motion of {{row.id}} follows required-as-written by the default answer",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "flag": {
          "demanding-input-default": [
            "required-as-written"
          ]
        },
        "row": {
          "demanding-input": [
            "use-game-default"
          ],
          "motion-use": [
            "required-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}} and its cited required motion",
        "when": [
          "an observer completes the required motion and separately makes a non-motion attempt"
        ],
        "then": [
          "the complete required-motion input emits the action input carrying the action at {{row.action-declared-in}}",
          "the non-motion attempt emits no action input from this contract",
          "an observer, not the running game, judges this"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract makes {{row.id}} demanding because it requires device motion: completing the motion emits the action input and a non-motion attempt emits none from this contract."
    },
    {
      "id": "simpler-route-is-distinct",
      "title": "{{row.id}} performs the same action without resembling a failed demanding input",
      "type": "scenario",
      "expand": "per-row",
      "collection": "simpler-inputs",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "simpler route {{row.id}}, its ordinary input at {{row.alternative-declared-in}}, and its distinction rule at {{row.distinction-rule-declared-in}}",
        "when": [
          "an observer successfully performs the simpler route and separately fails to finish binding {{row.action-binding}}"
        ],
        "then": [
          "the successful simpler route emits the named binding's action input and contributes the same action",
          "the failed demanding route emits no alternative action input by itself",
          "the two records remain distinguishable under {{row.distinction-rule-declared-in}}",
          "an observer, not the running game, judges this",
          "the test restates nothing from either cited rule"
        ],
        "diagnostics": [
          "{{instance}}-{{row.id}}-observer-result",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "Audit class: observer-judged. An observer, not the running game, judges this. Performing {{row.id}} through {{row.alternative-declared-in}} emits binding {{row.action-binding}}'s action input and contributes the same action. Failing to finish the demanding route does not trigger the alternative, and {{row.distinction-rule-declared-in}} keeps the records distinguishable. The test names both addresses and restates nothing from them."
    },
    {
      "id": "device-motion-rule-holds",
      "title": "{{row.id}} follows its {{row.motion-use}} device-motion rule",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {
        "motion-procedure": {
          "row_field": "motion-use",
          "map": {
            "no-motion": "no device motion is read while the cited non-motion performance emits the action input",
            "optional-motion": "the completed motion gesture and its matching non-motion alternative each emit an action input carrying the same action",
            "required-motion": "the completed cited motion performance emits the action input, while a non-motion attempt emits no action input from this binding"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "binding {{row.id}} and its physical input and device at {{row.physical-input-declared-in}}",
        "when": [
          "the cited performance and the corresponding motion or non-motion comparison are each attempted"
        ],
        "then": [
          "{{bind:motion-procedure}}",
          "this test checks nothing about device-motion quality"
        ],
        "diagnostics": [
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "For {{row.id}} under {{row.physical-input-declared-in}}: {{bind:motion-procedure}}. This test names the address, restates nothing from it, and checks nothing about device-motion quality."
    },
    {
      "id": "one-physical-activation-emits-one-action-input",
      "title": "one physical activation emits one action input with all matched candidates",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "each reachable physical activation in the {{instance}} adoption, including one that matches several bindings where the adoption declares one",
        "when": [
          "the current set is matched and the contract emits its result to the game"
        ],
        "then": [
          "the activation emits one action input",
          "that one input carries every matched binding's action as a candidate",
          "N matched actions remain one input with N candidates and never become N inputs",
          "where no activation matches several bindings, this test checks nothing about several candidates"
        ],
        "diagnostics": [
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log",
          "{{instance}}-candidate-set"
        ]
      },
      "text": "Each reachable physical activation emits one action input carrying every matched binding's action as a candidate. N matched actions remain one input with N candidates, never N inputs. Where no activation matches several bindings, this test checks nothing about several candidates."
    },
    {
      "id": "action-input-stops-at-handoff",
      "title": "the action input stops at the contract boundary",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "one action input emitted by the {{instance}} adoption with all matched candidates",
        "when": [
          "the input crosses the contract boundary"
        ],
        "then": [
          "the emitted input is handed to Input forgiveness when adopted, which can supply the accepted moment, and then to Action legibility when adopted for candidate selection before one action proposal",
          "without Action legibility, the game's cited Fixed selection rule owns shared-candidate selection",
          "this test stops at emission and checks nothing about forgiveness windows, offered-action presentation, candidate ordering, refusal of a proposal, or action effects"
        ],
        "diagnostics": [
          "{{instance}}-action-input-log"
        ]
      },
      "text": "The contract emits one action input with all matched candidates and stops there. Input forgiveness can supply the accepted moment; Action legibility, when adopted, selects a candidate before one action proposal. Otherwise the game's cited Fixed selection rule owns shared-candidate selection. This test checks nothing about forgiveness windows, offered-action presentation, candidate ordering, refusal of a proposal, or action effects."
    },
    {
      "id": "control-options-authority-order",
      "title": "control options keeps the order of its steps",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "a run that reaches platform selection, control setup, a physical activation, and the action-input boundary",
        "when": [
          "the decision trace is read in order"
        ],
        "then": [
          "the trace orders platform, defaults, starting set, accepted control change, current set, physical match, demanding-input answer, simpler route, device-motion rule, one action-input creation, accepted-moment shared-action choice, and one action proposal",
          "a later step does not change an earlier decision"
        ],
        "diagnostics": [
          "{{instance}}-platform-selection",
          "{{instance}}-change-log",
          "{{instance}}-current-set",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log"
        ]
      },
      "text": "The order of the steps is platform, defaults, starting set, accepted control change, current set, physical match, demanding-input answer, simpler route, device-motion rule, one action-input creation, accepted-moment shared-action choice, and one action proposal. A later step does not change an earlier decision."
    },
    {
      "id": "control-options-boundaries",
      "title": "the adoption makes no promise beyond control options",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and features adjacent to its control rules",
        "when": [
          "the adoption's promise boundary is reviewed"
        ],
        "then": [
          "the contract makes no promise about system-level remapping, virtual-control layout editing, chord member lists, device-motion quality, or saved profiles",
          "moving or resizing a touch control while keeping its action is not a control change",
          "presentation of the current binding is owned by Action legibility when adopted, otherwise by the game's UI rules",
          "the contract makes no promise about action-input behavior after emission except the stated hand-off order"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "The contract makes no promise about system-level remapping, virtual-control layout editing, chord member lists, device-motion quality, or saved profiles. Moving or resizing a touch control while keeping its action is not a control change. Presentation of the current binding is owned by Action legibility when adopted, otherwise by the game's UI rules. Beyond its stated hand-off order, the contract makes no promise about an action input after emission."
    },
    {
      "id": "empty-row-sets-make-no-promise",
      "title": "empty row sets and absent default answers make no promise",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption, not the running game",
        "when": [
          "a reviewer checks each row set and the two default answers that depend on a platform row"
        ],
        "then": [
          "where no platform-control-sets row exists, no platform receives a physical-control promise from this adoption; where a row exists, this test checks nothing about this statement",
          "where no control-presets row exists, no named control preset is offered; where a row exists, this test checks nothing about this statement",
          "where no action-bindings row exists, no physical input is promised to produce a game action; where a row exists, this test checks nothing about this statement",
          "where no simpler-inputs row exists, no demanding binding promises a separate simpler input without a setting change; where a row exists, this test checks nothing about this statement",
          "where no platform-control-sets row exists, this adoption makes no default remapping promise; where a platform row exists, this test checks nothing about this statement",
          "where no platform-control-sets row exists, this adoption makes no default demanding-input promise; where a platform row exists, this test checks nothing about this statement"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption, not the running game. Where no platform row exists, no platform receives a physical-control promise, and the adoption makes no default remapping or demanding-input promise; where a platform row exists, this test checks nothing about these statements. Where no preset, binding, or simpler-input row exists, its row set makes its stated empty-set promise; where a row exists, this test checks nothing about that row set."
    },
    {
      "id": "preset-platform-join",
      "title": "declaration check: preset {{row.id}} names a platform row in this adoption",
      "type": "scenario",
      "expand": "per-row",
      "collection": "control-presets",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and preset {{row.id}}, not the running game",
        "when": [
          "a reviewer checks the platform row that it names"
        ],
        "then": [
          "a platform-control-sets row with id {{row.platform-control-set}} exists in this adoption",
          "a missing or misspelled platform row makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption, not the running game. Preset {{row.id}} must name an existing platform-control-sets row in this adoption: {{row.platform-control-set}}. When the named platform row is missing or misspelled, the adoption is invalid, and this test fails."
    },
    {
      "id": "binding-platform-join",
      "title": "declaration check: binding {{row.id}} names a platform row in this adoption",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and binding {{row.id}}, not the running game",
        "when": [
          "a reviewer checks the platform row that it names"
        ],
        "then": [
          "a platform-control-sets row with id {{row.platform-control-set}} exists in this adoption",
          "a missing or misspelled platform row makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption, not the running game. Binding {{row.id}} must name an existing platform-control-sets row in this adoption: {{row.platform-control-set}}. When the named platform row is missing or misspelled, the adoption is invalid, and this test fails."
    },
    {
      "id": "binding-preset-join",
      "title": "declaration check: binding {{row.id}} names a preset on the same platform",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {
        "preset": {
          "row_field": "press-style",
          "map": {
            "press": "{{row.preset}}",
            "release": "{{row.preset}}",
            "timed-press": "{{row.preset}}",
            "hold": "{{row.preset}}",
            "rapid-presses": "{{row.preset}}",
            "repeated-presses": "{{row.preset}}",
            "double-press": "{{row.preset}}",
            "simultaneous-inputs": "{{row.preset}}",
            "continuous-axis": "{{row.preset}}",
            "gesture": "{{row.preset}}",
            "input-sequence": "{{row.preset}}"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and binding {{row.id}}, not the running game",
        "when": [
          "a reviewer checks preset {{bind:preset}} and both platform names"
        ],
        "then": [
          "a control-presets row with id {{bind:preset}} exists in this adoption",
          "that preset names platform row {{row.platform-control-set}}",
          "a missing preset, or a preset that names another platform row, makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption, not the running game. Binding {{row.id}} must name an existing preset, {{bind:preset}}, and that preset must name the binding's platform row, {{row.platform-control-set}}. When the named preset is missing or names another platform row, the adoption is invalid, and this test fails."
    },
    {
      "id": "optional-motion-has-no-motion-sibling",
      "title": "declaration check: optional-motion binding {{row.id}} has a no-motion binding for the same action",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "when": {
        "row": {
          "motion-use": [
            "optional-motion"
          ]
        }
      },
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and optional-motion binding {{row.id}}, not the running game",
        "when": [
          "a reviewer compares its action, platform row, preset, and motion use with the other action-bindings rows"
        ],
        "then": [
          "another binding for the same action on platform row {{row.platform-control-set}} and the same preset has motion-use no-motion",
          "any other shape makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption, not the running game. The contract requires optional-motion binding {{row.id}} to have another binding for the same action on platform row {{row.platform-control-set}} and the same preset with motion-use no-motion. Any other shape makes the adoption invalid, and this test fails."
    },
    {
      "id": "simpler-binding-join",
      "title": "declaration check: simpler route {{row.id}} names a binding in this adoption",
      "type": "scenario",
      "expand": "per-row",
      "collection": "simpler-inputs",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and simpler route {{row.id}}, not the running game",
        "when": [
          "a reviewer checks the binding that it names"
        ],
        "then": [
          "an action-bindings row with id {{row.action-binding}} exists in this adoption",
          "that binding's effective demanding-input answer is simpler-alternative",
          "when the named binding is missing or misspelled, or its effective answer is not simpler-alternative, the adoption is invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption, not the running game. The contract limits simpler-inputs rows to bindings whose effective demanding-input answer promises an alternative. Simpler route {{row.id}} must name an existing action-bindings row in this adoption, {{row.action-binding}}, and that binding's effective answer must be simpler-alternative. When the named binding is missing or misspelled, or its effective answer is not simpler-alternative, the adoption is invalid, and this test fails."
    },
    {
      "id": "presets-only-has-complete-choice",
      "title": "declaration check: every presets-only platform has two selectable complete presets",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption, not the running game",
        "when": [
          "a reviewer resolves each platform row's effective remapping answer and compares its preset and binding rows"
        ],
        "then": [
          "each platform whose effective answer is presets-only has at least two control-presets rows whose availability is starting-and-selectable or player-selectable",
          "every preset for that platform maps every action bound on the platform with a matching action-bindings row",
          "for a platform with another effective answer, this test checks nothing",
          "a missing choice or incomplete preset makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption, not the running game. Under the contract, every platform whose effective answer is presets-only must have at least two presets whose availability is starting-and-selectable or player-selectable, and every preset maps every action bound on that platform. For a platform with another effective answer, this test checks nothing. A missing choice or incomplete preset makes the adoption invalid, and this test fails."
    },
    {
      "id": "simpler-answer-has-row",
      "title": "declaration check: every demanding simpler-alternative binding has a simpler row",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and binding {{row.id}}, not the running game",
        "when": [
          "a reviewer resolves the binding's effective demanding-input answer and classifies its cited performance"
        ],
        "then": [
          "if {{row.id}} has a demanding press style or requires device motion, and its effective answer is simpler-alternative, at least one simpler-inputs row names it",
          "otherwise this test checks nothing",
          "a missing simpler row makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption, not the running game. If {{row.id}} has a demanding press style or requires device motion, and its effective answer is simpler-alternative, at least one simpler-inputs row must name it. Otherwise this test checks nothing. A missing simpler row makes the adoption invalid, and this test fails."
    },
    {
      "id": "no-demanding-answer-has-ordinary-route",
      "title": "declaration check: every no-demanding binding has an ordinary route",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption, binding {{row.id}}, and its cited prose, not the running game",
        "when": [
          "a reviewer resolves the binding's effective demanding-input answer"
        ],
        "then": [
          "if the effective answer is no-demanding-presses, {{row.id}} has a non-demanding press style and does not require device motion, or its cited prose states an ordinary route to the same action",
          "otherwise this test checks nothing",
          "a demanding-only route makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and its cited prose, not the running game. Under an effective no-demanding-presses answer, {{row.id}} must have a non-demanding press style and not require device motion, or have a cited ordinary route to the same action. Under another answer, this test checks nothing. A demanding-only route makes the adoption invalid, and this test fails."
    },
    {
      "id": "forbidden-effective-pair-does-not-reappear",
      "title": "declaration check: no platform or binding recreates the forbidden effective pair",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption, not the running game",
        "when": [
          "a reviewer resolves every platform's effective remapping answer and every binding's effective demanding-input answer"
        ],
        "then": [
          "no binding has effective required-as-written on a platform with effective action-and-press-style",
          "any platform-row or binding-row override that recreates that pair makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption, not the running game. The contract's demanding-input field forbids a binding from having effective required-as-written on a platform with effective action-and-press-style. A row override that recreates this forbidden pair makes the adoption invalid, and this test fails."
    },
    {
      "id": "settings-citation-covers-effective-change-policy",
      "title": "declaration check: {{row.id}}'s settings citation covers its effective policy",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption, platform row {{row.id}}, and {{row.settings-rule-declared-in}}, not the running game",
        "when": [
          "a reviewer resolves the row's effective remapping answer and checks the cited rule"
        ],
        "then": [
          "under any-action-any-input or action-and-press-style, the citation states visible conflict handling before use",
          "under action-and-press-style, the citation states the press styles offered for each action",
          "under swap-only, the citation states that a swap exchanges two existing assignments",
          "under presets-only, the citation states that selection replaces the whole set and an individual binding change is refused",
          "under fixed-bindings, the citation states the absence of changes",
          "a missing duty makes the adoption invalid, and this test fails",
          "this test checks nothing about reachability beyond what the citation states"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{row.settings-rule-declared-in}}, not the running game. Under any-action-any-input or action-and-press-style, that citation must state visible conflict handling before use; action-and-press-style must also state the press styles offered for each action. Under swap-only, it must state that a swap exchanges two existing assignments. Under presets-only, it must state that selection replaces the whole set and an individual binding change is refused. Under fixed-bindings, it must state the absence of changes. A missing duty makes the adoption invalid, and this test fails. This test checks nothing about reachability beyond what the citation states."
    },
    {
      "id": "shared-action-input-declaration-agrees",
      "title": "declaration check: rows sharing an activation agree on one action input",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and the physical activations, platforms, presets, and contexts described by its binding rows and citations, not the running game",
        "when": [
          "a reviewer groups rows that can be current together and share one physical activation"
        ],
        "then": [
          "one group contains only rows on the same platform row that either all omit a preset or all name the same preset, have no disjoint cited contexts, and share one physical activation",
          "rows in mutually exclusive presets or disjoint cited contexts are not one group, and this test checks nothing about whether their action-input values agree",
          "every group with several bindings supplies one action-input value shared by every row in that group",
          "the emitted input carries every matched binding's action as a candidate",
          "a lone binding's action-input name can remain implicit, and this test checks nothing about a shared value for a lone binding",
          "a missing, different, or split shared value makes the adoption invalid, and this test fails",
          "this test checks nothing about a paired Action legibility adoption"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record",
          "{{instance}}-candidate-set"
        ]
      },
      "text": "This declaration check reads the adoption and its cited physical activations and contexts, not the running game. Under the contract, one group contains only rows that can be current together: they use the same platform row, either all omit a preset or all name the same preset, have no disjoint cited contexts, and share one physical activation. Rows in mutually exclusive presets or disjoint contexts are not one group, and this test checks nothing about whether their action-input values agree. Every row in a multi-binding group supplies and agrees on one value, and the emitted input carries every matched action as a candidate. A lone binding's name can remain implicit, and this test checks nothing about a shared value for a lone binding. A missing, different, or split value makes the adoption invalid, and this test fails. This test checks nothing about a paired Action legibility adoption."
    },
    {
      "id": "rows-do-not-duplicate-meaning",
      "title": "declaration check: no two rows mean the same platform, preset, or binding",
      "type": "scenario",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and its cited prose, not the running game",
        "when": [
          "a reviewer compares every pair of rows in each row set"
        ],
        "then": [
          "no two platform-control-sets rows mean the same platform, edition, devices, and policy scope",
          "no two control-presets rows mean the same preset",
          "no two action-bindings rows mean the same binding",
          "no two simpler-inputs rows mean the same alternative for one binding",
          "the contract imposes no maximum row count",
          "a duplicate meaning makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and its cited prose, not the running game. No two rows can mean the same platform, preset, binding, or simpler alternative for one binding. The contract sets no maximum row count. A duplicate meaning makes the adoption invalid, and this test fails."
    },
    {
      "id": "platform-citation-duty",
      "title": "declaration check: {{row.id}}'s platform citation states its duty",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and {{row.platform-declared-in}}, not the running game",
        "when": [
          "a reviewer checks the citation's meaning"
        ],
        "then": [
          "{{row.platform-declared-in}} names one platform or edition and its supported devices, with different control behavior in another row",
          "a missing duty makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{row.platform-declared-in}}, not the running game. The citation must name one platform or edition and its supported devices; different control behavior belongs in another row. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it."
    },
    {
      "id": "methods-citation-duty",
      "title": "declaration check: {{row.id}}'s methods citation states its duty",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and {{row.methods-declared-in}}, not the running game",
        "when": [
          "a reviewer checks the citation's meaning"
        ],
        "then": [
          "{{row.methods-declared-in}} lists every complete input method for {{row.id}} and any required switch between methods",
          "a missing duty makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{row.methods-declared-in}}, not the running game. The citation must list every complete input method for {{row.id}} and any required switch. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it."
    },
    {
      "id": "settings-rule-citation-duty",
      "title": "declaration check: {{row.id}}'s settings citation states its duty",
      "type": "scenario",
      "expand": "per-row",
      "collection": "platform-control-sets",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and {{row.settings-rule-declared-in}}, not the running game",
        "when": [
          "a reviewer resolves {{row.id}}'s effective remapping answer and checks the citation's meaning"
        ],
        "then": [
          "{{row.settings-rule-declared-in}} states {{row.id}}'s control menu",
          "where the platform has a control-presets row, the citation states preset selection; where it has none, this test checks nothing about preset selection",
          "under effective any-action-any-input or action-and-press-style, the citation states conflict handling; under another effective answer, this test checks nothing about conflict handling",
          "under effective action-and-press-style, the citation states the press styles offered for each action; under another effective answer, this test checks nothing about the offered press styles",
          "under effective fixed-bindings, the citation states the explicit absence of changes; under another effective answer, this test checks nothing about the absence of changes",
          "a missing duty makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{row.settings-rule-declared-in}}, not the running game. The citation must always state {{row.id}}'s control menu. Where the platform declares a preset, it must state preset selection. Under effective any-action-any-input or action-and-press-style, it must state conflict handling; action-and-press-style must also state the press styles offered for each action. Under effective fixed-bindings, it must state the explicit absence of changes. For a duty outside its stated condition, this test checks nothing. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it."
    },
    {
      "id": "preset-selection-citation-duty",
      "title": "declaration check: preset {{row.id}}'s selection citation states its duty",
      "type": "scenario",
      "expand": "per-row",
      "collection": "control-presets",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and {{row.selection-rule-declared-in}}, not the running game",
        "when": [
          "a reviewer checks the citation's meaning"
        ],
        "then": [
          "{{row.selection-rule-declared-in}} states the route that selects preset {{row.id}} and makes its matching action-binding rows current",
          "a missing duty makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{row.selection-rule-declared-in}}, not the running game. The citation must state the route that selects preset {{row.id}} and makes its matching bindings current. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it."
    },
    {
      "id": "binding-action-citation-duty",
      "title": "declaration check: {{row.id}}'s action citation states its duty",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and {{row.action-declared-in}}, not the running game",
        "when": [
          "a reviewer checks the citation's meaning"
        ],
        "then": [
          "{{row.action-declared-in}} names the game action that {{row.id}} contributes as a candidate",
          "a missing duty makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{row.action-declared-in}}, not the running game. The citation must name the game action that {{row.id}} contributes as a candidate. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it."
    },
    {
      "id": "binding-physical-input-citation-duty",
      "title": "declaration check: {{row.id}}'s physical-input citation states its duty",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {
        "performance-duty": {
          "row_field": "press-style",
          "map": {
            "press": "the press performance",
            "release": "the release performance",
            "timed-press": "the target moment for the timed press",
            "hold": "the hold completion",
            "rapid-presses": "the rapid-press rate",
            "repeated-presses": "the repeated-press count",
            "double-press": "the double-activation timing",
            "simultaneous-inputs": "the simultaneous input group",
            "continuous-axis": "the axis range and direction",
            "gesture": "the gesture completion",
            "input-sequence": "the directional sequence and completing press"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and {{row.physical-input-declared-in}}, not the running game",
        "when": [
          "a reviewer checks the citation's meaning"
        ],
        "then": [
          "{{row.physical-input-declared-in}} names the physical input, its supplying device, and {{bind:performance-duty}} for {{row.id}}",
          "a missing duty makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{row.physical-input-declared-in}}, not the running game. The citation must name {{row.id}}'s physical input, supplying device, and {{bind:performance-duty}}. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it."
    },
    {
      "id": "binding-context-citation-duty",
      "title": "declaration check: {{row.id}}'s context citation states its duty",
      "type": "scenario",
      "expand": "per-row",
      "collection": "action-bindings",
      "bindings": {
        "context": {
          "row_field": "press-style",
          "map": {
            "press": "{{row.context-declared-in}}",
            "release": "{{row.context-declared-in}}",
            "timed-press": "{{row.context-declared-in}}",
            "hold": "{{row.context-declared-in}}",
            "rapid-presses": "{{row.context-declared-in}}",
            "repeated-presses": "{{row.context-declared-in}}",
            "double-press": "{{row.context-declared-in}}",
            "simultaneous-inputs": "{{row.context-declared-in}}",
            "continuous-axis": "{{row.context-declared-in}}",
            "gesture": "{{row.context-declared-in}}",
            "input-sequence": "{{row.context-declared-in}}"
          }
        }
      },
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and {{bind:context}}, not the running game",
        "when": [
          "a reviewer checks the citation's meaning"
        ],
        "then": [
          "{{bind:context}} states the context in which binding {{row.id}} exists",
          "a missing duty makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{bind:context}}, not the running game. The citation must state the context in which binding {{row.id}} exists. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it."
    },
    {
      "id": "simpler-alternative-citation-duty",
      "title": "declaration check: {{row.id}}'s alternative citation states its duty",
      "type": "scenario",
      "expand": "per-row",
      "collection": "simpler-inputs",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and {{row.alternative-declared-in}}, not the running game",
        "when": [
          "a reviewer checks the citation's meaning"
        ],
        "then": [
          "{{row.alternative-declared-in}} states the physical input and ordinary press style that perform the same action as binding {{row.action-binding}} without a setting change",
          "a missing duty makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{row.alternative-declared-in}}, not the running game. The citation must state the physical input and ordinary press style that perform the same action as binding {{row.action-binding}} without a setting change. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it."
    },
    {
      "id": "simpler-distinction-citation-duty",
      "title": "declaration check: {{row.id}}'s distinction citation states its duty",
      "type": "scenario",
      "expand": "per-row",
      "collection": "simpler-inputs",
      "bindings": {},
      "test": {
        "type": "scenario",
        "given": "the {{instance}} adoption and {{row.distinction-rule-declared-in}}, not the running game",
        "when": [
          "a reviewer checks the citation's meaning"
        ],
        "then": [
          "{{row.distinction-rule-declared-in}} proves that success on {{row.id}} cannot be mistaken for failure to finish binding {{row.action-binding}}",
          "a missing duty makes the adoption invalid, and this test fails"
        ],
        "diagnostics": [
          "{{instance}}-declaration-record"
        ]
      },
      "text": "This declaration check reads the adoption and {{row.distinction-rule-declared-in}}, not the running game. The citation must prove that success on {{row.id}} cannot be mistaken for failure to finish binding {{row.action-binding}}. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it."
    },
    {
      "id": "control-options-hold",
      "title": "control options holds for the whole run",
      "type": "general",
      "expand": "once",
      "bindings": {},
      "test": {
        "type": "general",
        "holds": "every accepted control change followed the platform's effective remapping answer and every refused change was refused; every binding matched only under its cited performance and emitted one action input; every demanding binding met its effective answer; every simpler route produced the same action distinguishably; every device-motion rule held; no physical activation produced more than one action input",
        "seeds": "{{inputs:seeds}}",
        "scope": "{{inputs:scope}}",
        "diagnostics": [
          "{{instance}}-platform-selection",
          "{{instance}}-change-log",
          "{{instance}}-current-set",
          "{{instance}}-match-trace",
          "{{instance}}-action-input-log",
          "{{instance}}-observer-result",
          "{{instance}}-setting-state"
        ]
      },
      "text": "Across {{inputs:scope}}, every accepted control change follows the platform's effective remapping answer and every refused change is refused; every binding matches only under its cited performance and emits one action input; every demanding binding meets its effective answer; every simpler route produces the same action distinguishably; every device-motion rule holds; and no physical activation produces more than one action input.",
      "inputs": {
        "scope": {
          "default": "every platform row on its cited devices, every preset, every binding, and every simpler route of the audited run"
        },
        "seeds": {
          "default": [
            "audit-a",
            "audit-b"
          ]
        }
      }
    }
  ]
}
