{
  "scope": "Six characters, 192 normal contexts including Ryu styles, plus eight selected reader contexts for Captain America, Venom, Spider-Man and Jin. Static opcode review only; no new live normal trials.",
  "opcodeSha256": "7ede16dc56ffbefe899f98608c6b0a01f2304cd3e8c46da9f912ee0b9bcf7490",
  "routeCount": 200,
  "fullCharacterContextCount": 192,
  "additionalSelectedContextCount": 8,
  "changedRoutesAfterKickFamilyCorrection": [],
  "selectorCorrection": "B5 is 0 for punches and 2 for kicks. Both are zero/nonzero tests at the inspected family dispatches; the correction does not change the identified local-reader routes.",
  "findings": [
    {
      "ids": [
        "02-base-normal-0-lp"
      ],
      "character": "War Machine",
      "name": "Standing LP",
      "classification": "local normal-repeat/restart branch verified",
      "input": "New LP only: fighter +$D4 & $0010",
      "inputPC": "029A8C",
      "gate": "Animation updater $001DD8 has not ended the move, and the animation flag byte +$3C is nonzero.",
      "effect": "Clears +$3C, toggles +$380 and chooses animation-bank offsets $2A/$00 versus $10/$00 before calling $0135E6 at $029AB4. It also resets attack fields +$80/+$84/+$86.",
      "limit": "No explicit finite mash-credit count in this local branch. The animation window and ordinary state transitions still gate each restart. No maximum or live extra-hit total established.",
      "initializer": "+$380 cleared at $029480."
    },
    {
      "ids": [
        "06-base-normal-0-lk"
      ],
      "character": "Hulk",
      "name": "Standing LK",
      "classification": "one-use local normal-repeat allowance verified",
      "input": "Facing-normalized new/buffered LK: (+$DA | +$DE) bit 8",
      "inputPC": "030A94",
      "gate": "Nonzero animation flag +$3C; common $0176B6 and $01741E gates return zero; repeat allowance +$3A1 is nonzero.",
      "effect": "Spends +$3A1 at $030AAC, clears input buffer +$DE at $030AB6, then starts animation $12/$00 through $0135E6 at $030AC2.",
      "limit": "Initializer $0306D0 sets +$3A1 to 1. One qualifying restart can spend that allowance; this is not a super extension or a guaranteed extra connected hit.",
      "initializer": "0306D0: 1D7C000103A1 / move.b #1,$3a1(a6)."
    },
    {
      "ids": [
        "06-base-normal-1-lk"
      ],
      "character": "Hulk",
      "name": "Crouching LK",
      "classification": "one-use local normal-repeat allowance verified",
      "input": "Facing-normalized new/buffered LK: (+$DA | +$DE) bit 8",
      "inputPC": "030B8E",
      "gate": "Nonzero animation flag +$3C, common $0176B6 gate returns zero and +$3A1 remains nonzero.",
      "effect": "Spends +$3A1 at $030BA6, clears +$DE at $030BB0, and restarts animation $16/$00 at $030BBC.",
      "limit": "Initializer $030772 sets +$3A1 to 1. One qualifying local restart, not an added-hit guarantee.",
      "initializer": "030772: 1D7C000103A1 / move.b #1,$3a1(a6)."
    },
    {
      "ids": [
        "08-base-normal-0-lp"
      ],
      "character": "Wolverine",
      "name": "Standing LP",
      "classification": "local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit 4; clears +$DE before testing the saved word",
      "inputPC": "03400C",
      "gate": "Animation flag +$3C and common $0176B6, $01741E, $0181C8 gates.",
      "effect": "Accepted LP reaches attack-field reset and animation $10/$06 through $0135E6 at $03404E.",
      "limit": "No fixed credit bound established for this local path. Common gates, animation windows and initialization remain part of its reachability."
    },
    {
      "ids": [
        "08-base-normal-0-mp"
      ],
      "character": "Wolverine",
      "name": "Standing MP",
      "classification": "local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit 5",
      "inputPC": "03407A",
      "gate": "Animation flag +$3C and common $0176B6/$01741E gates.",
      "effect": "Clears buffer, resets attack fields, and alternates +$111 parity. The selected animation is $10/$08 or $10/$02, loaded at $0340CA.",
      "limit": "Alternating animation offsets are proven; a universal repeat cap or live hit gain is not."
    },
    {
      "ids": [
        "08-base-normal-0-mk"
      ],
      "character": "Wolverine",
      "name": "Standing MK",
      "classification": "local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit 9",
      "inputPC": "0342B8",
      "gate": "Animation updater has not ended the move and +$3C is nonzero.",
      "effect": "Clears buffer and resets attack fields before animation $12/$08 at $0342FA.",
      "limit": "No explicit finite allowance established from this local branch; collision and all shared paths were not measured."
    },
    {
      "ids": [
        "08-base-normal-1-lp"
      ],
      "character": "Wolverine",
      "name": "Crouching LP",
      "classification": "local normal-repeat/variant branch verified",
      "input": "(+$DA | +$DE) bit 4",
      "inputPC": "03413A",
      "gate": "Animation +$3C, common $0176B6/$0181C8 and conditional $017456 gate; latter consulted when +$127 < 6.",
      "effect": "Clears buffer and chooses between animation $14/$00 and $14/$06 based on +$84 and +$387. +$387 is decremented at $034160 or initialized to 1 at $03418E.",
      "limit": "The local counter selects a repeat variant; it is not by itself proof of a whole-move maximum.",
      "initializer": "Normal initializer sets +$387=1 at $033B54 for this selector."
    },
    {
      "ids": [
        "08-base-normal-3-mp"
      ],
      "character": "Wolverine",
      "name": "Air MP, BA!=0 branch",
      "classification": "conditional local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit 5",
      "inputPC": "0343C0",
      "gate": "Nonzero +$3C, animation not finished, and +$BA != 0 at $0343D8.",
      "effect": "Clears buffer, then reaches attack-field reset and animation $18/$08 through $0135E6 at $034400.",
      "limit": "BA is preserved as the exact native flag; no unsupported jump-type name or live hit total assigned."
    },
    {
      "ids": [
        "08-base-normal-2-mp"
      ],
      "character": "Wolverine",
      "name": "Air MP, BA=0 branch",
      "classification": "input reference does not establish local repeat",
      "input": "Same (+$DA | +$DE) bit 5 read as BA!=0",
      "inputPC": "0343C0",
      "gate": "+$BA=0 takes $0343DC to RTS $03440E.",
      "effect": "Can clear the buffer and call $018624, but bypasses the local attack-field reset and animation restart at $0343DE\u2013$034400.",
      "limit": "Counterexample to labeling every input reader mashable. This is not a negative verdict on all common air-normal transitions."
    },
    {
      "ids": [
        "1e-base-normal-0-lp"
      ],
      "character": "Morrigan",
      "name": "Standing LP",
      "classification": "local normal-repeat/variant branch verified",
      "input": "(+$DA | +$DE) bit 4",
      "inputPC": "05DF3A",
      "gate": "Animation flag +$3C and common $0176B6/$01741E gates.",
      "effect": "Clears buffer, resets attack fields, decrements +$BD and changes +$80 when that count becomes nonpositive. Chooses $10/$06 versus $10/$00 from +$3C and calls $0135E6 at $05DF92.",
      "limit": "The +$BD branch changes attack attributes; no stopping bound or initial allowance was established here. Do not call it a finite number of bonus hits."
    },
    {
      "ids": [
        "12-base-normal-0-lp",
        "12-base-normal-0-mp",
        "12-base-normal-0-hp",
        "12-base-normal-0-lk",
        "12-base-normal-0-mk",
        "12-base-normal-0-hk",
        "12-base-normal-1-lp",
        "12-base-normal-1-mp",
        "12-base-normal-1-hp",
        "12-base-normal-1-lk",
        "12-base-normal-1-mk",
        "12-base-normal-1-hk",
        "12-base-normal-2-lp",
        "12-base-normal-2-mp",
        "12-base-normal-2-hp",
        "12-base-normal-2-lk",
        "12-base-normal-2-mk",
        "12-base-normal-2-hk",
        "12-base-normal-3-lp",
        "12-base-normal-3-mp",
        "12-base-normal-3-hp",
        "12-base-normal-3-lk",
        "12-base-normal-3-mk",
        "12-base-normal-3-hk",
        "12-ken-normal-0-lp",
        "12-ken-normal-0-mp",
        "12-ken-normal-0-hp",
        "12-ken-normal-0-lk",
        "12-ken-normal-0-mk",
        "12-ken-normal-0-hk",
        "12-ken-normal-1-lp",
        "12-ken-normal-1-mp",
        "12-ken-normal-1-hp",
        "12-ken-normal-1-lk",
        "12-ken-normal-1-mk",
        "12-ken-normal-1-hk",
        "12-ken-normal-2-lp",
        "12-ken-normal-2-mp",
        "12-ken-normal-2-hp",
        "12-ken-normal-2-lk",
        "12-ken-normal-2-mk",
        "12-ken-normal-2-hk",
        "12-ken-normal-3-lp",
        "12-ken-normal-3-mp",
        "12-ken-normal-3-hp",
        "12-ken-normal-3-lk",
        "12-ken-normal-3-mk",
        "12-ken-normal-3-hk",
        "12-akuma-normal-0-lp",
        "12-akuma-normal-0-mp",
        "12-akuma-normal-0-hp",
        "12-akuma-normal-0-lk",
        "12-akuma-normal-0-mk",
        "12-akuma-normal-0-hk",
        "12-akuma-normal-1-lp",
        "12-akuma-normal-1-mp",
        "12-akuma-normal-1-hp",
        "12-akuma-normal-1-lk",
        "12-akuma-normal-1-mk",
        "12-akuma-normal-1-hk",
        "12-akuma-normal-2-lp",
        "12-akuma-normal-2-mp",
        "12-akuma-normal-2-hp",
        "12-akuma-normal-2-lk",
        "12-akuma-normal-2-mk",
        "12-akuma-normal-2-hk",
        "12-akuma-normal-3-lp",
        "12-akuma-normal-3-mp",
        "12-akuma-normal-3-hp",
        "12-akuma-normal-3-lk",
        "12-akuma-normal-3-mk",
        "12-akuma-normal-3-hk"
      ],
      "character": "Ryu, including Ken/Akuma style contexts",
      "name": "Enumerated native normal-update leaves",
      "classification": "no local input reference in reviewed update paths",
      "input": "No direct +$D0\u2013+$DF input operand or shared mash-helper call in the selector-filtered local bodies.",
      "effect": "Local instructions and exact selector dispatches are enumerated in reviewed-routes.json.",
      "limit": "Not a negative gameplay verdict: global callees, initialization-direction variants and animation data remain a frontier. Fresh normals, chains, command normals and rapid-button specials must not be conflated."
    },
    {
      "ids": [
        "16-base-normal-0-lp",
        "16-base-normal-0-mp",
        "16-base-normal-0-hp",
        "16-base-normal-0-lk",
        "16-base-normal-0-mk",
        "16-base-normal-0-hk",
        "16-base-normal-1-lp",
        "16-base-normal-1-mp",
        "16-base-normal-1-hp",
        "16-base-normal-1-lk",
        "16-base-normal-1-mk",
        "16-base-normal-1-hk",
        "16-base-normal-2-lp",
        "16-base-normal-2-mp",
        "16-base-normal-2-hp",
        "16-base-normal-2-lk",
        "16-base-normal-2-mk",
        "16-base-normal-2-hk",
        "16-base-normal-3-lp",
        "16-base-normal-3-mp",
        "16-base-normal-3-hp",
        "16-base-normal-3-lk",
        "16-base-normal-3-mk",
        "16-base-normal-3-hk"
      ],
      "character": "Chun-Li",
      "name": "Enumerated native normal-update leaves",
      "classification": "no local input reference in reviewed update paths",
      "input": "No direct +$D0\u2013+$DF input operand or shared mash-helper call in the selector-filtered local bodies.",
      "effect": "Local instructions and exact selector dispatches are enumerated in reviewed-routes.json.",
      "limit": "Not a negative gameplay verdict: global callees, initialization-direction variants and animation data remain a frontier. Fresh normals, chains, command normals and rapid-button specials must not be conflated."
    },
    {
      "ids": [
        "04-base-normal-0-lp"
      ],
      "character": "Captain America",
      "name": "Standing LP",
      "classification": "local normal-repeat/variant branch verified",
      "input": "(+$DA | +$DE) bit4, normalized new/buffered LP",
      "inputPC": "02CDD2",
      "gate": "Nonzero animation flag +$3C; normal animation has not ended; shared posture/normal-transition gates must permit continuation. Calls $0176B6 and $01741E.",
      "effect": "Clears buffer; resets +$80/+$84/+$86; decrements +$BD at $02CE10 and chooses attack attribute $1A when nonpositive. Animation $10/$06 or $10/$00 is installed at $02CE2A, depending on +$3C.",
      "limit": "No explicit finite bonus-hit allowance is established in this local branch. This is a code-verified normal animation restart, not a measured hit increase or a Hyper extension. The +$BD branch changes an attribute rather than directly refusing another restart."
    },
    {
      "ids": [
        "04-base-normal-0-mk"
      ],
      "character": "Captain America",
      "name": "Standing MK",
      "classification": "one additional local normal-continuation stage verified",
      "input": "(+$DA | +$DE) bit9, normalized new/buffered MK",
      "inputPC": "02CFC6",
      "gate": "+$08 dispatch state is zero; +$3C is nonzero and normal animation has not ended.",
      "effect": "Installs animation $12/$08 at $02CFD8, resets attack fields, clears buffer at $02D004 and advances +$08 by2 at $02D008. State2 dispatches directly to ordinary animation update $02D00C, bypassing the input branch.",
      "limit": "The local two-state path allows one additional continuation after entry at state0. Native normal entry clears +$08 at $0185AC. This is not a count of guaranteed additional connected hits."
    },
    {
      "ids": [
        "0c-base-normal-0-lp"
      ],
      "character": "Venom",
      "name": "Standing LP",
      "classification": "local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit4, normalized new/buffered LP",
      "inputPC": "03A6E6",
      "gate": "Nonzero animation flag +$3C; normal animation has not ended; shared posture/normal-transition gates must permit continuation. Calls $0176B6, $01741E and $0181C8.",
      "effect": "Clears buffer at $03A6FA, writes attack attribute $13, clears +$84/+$86 and installs animation $10/$06 at $03A720.",
      "limit": "No explicit finite bonus-hit allowance is established in this local branch. This is a code-verified normal animation restart, not a measured hit increase or a Hyper extension."
    },
    {
      "ids": [
        "0c-base-normal-0-lk"
      ],
      "character": "Venom",
      "name": "Standing LK",
      "classification": "local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit8, normalized new/buffered LK",
      "inputPC": "03A790",
      "gate": "Nonzero animation flag +$3C; normal animation has not ended; shared posture/normal-transition gates must permit continuation. Calls $0176B6, $01741E and $0181C8.",
      "effect": "Clears buffer at $03A7A4, writes attack attribute $14, clears +$84/+$86 and installs animation $12/$06 at $03A7CA.",
      "limit": "No explicit finite bonus-hit allowance is established in this local branch. This is a code-verified normal animation restart, not a measured hit increase or a Hyper extension."
    },
    {
      "ids": [
        "0e-base-normal-0-lp"
      ],
      "character": "Spider-Man",
      "name": "Standing LP",
      "classification": "local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit4, normalized new/buffered LP",
      "inputPC": "03D026",
      "gate": "Nonzero animation flag +$3C; normal animation has not ended; shared posture/normal-transition gates must permit continuation. Calls $0176B6, $01741E and $0181C8.",
      "effect": "Clears buffer at $03D03A, sets attack attribute $19, clears +$84/+$86 and installs animation $10/$06 at $03D060.",
      "limit": "No explicit finite bonus-hit allowance is established in this local branch. This is a code-verified normal animation restart, not a measured hit increase or a Hyper extension."
    },
    {
      "ids": [
        "0e-base-normal-1-lp"
      ],
      "character": "Spider-Man",
      "name": "Crouching LP",
      "classification": "local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit4, normalized new/buffered LP",
      "inputPC": "03D0B8",
      "gate": "Nonzero animation flag +$3C; normal animation has not ended; shared posture/normal-transition gates must permit continuation. Calls $0176B6, $017456 and $0181C8.",
      "effect": "Clears buffer at $03D0CC, sets attack attribute $1A, clears +$84/+$86 and installs animation $14/$06 at $03D0F2.",
      "limit": "No explicit finite bonus-hit allowance is established in this local branch. This is a code-verified normal animation restart, not a measured hit increase or a Hyper extension."
    },
    {
      "ids": [
        "18-base-normal-0-lp"
      ],
      "character": "Jin",
      "name": "Standing LP",
      "classification": "local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit4, normalized new/buffered LP",
      "inputPC": "050494",
      "gate": "Nonzero animation flag +$3C; normal animation has not ended; shared posture/normal-transition gates must permit continuation. Calls $0176B6 and $01741E.",
      "effect": "Clears buffer at $0504A4, sets attack attribute $1C, clears +$84/+$86 and local substate +$08 at $0504C6, then installs animation $10/$06 at $0504D4.",
      "limit": "No explicit finite bonus-hit allowance is established in this local branch. This is a code-verified normal animation restart, not a measured hit increase or a Hyper extension."
    },
    {
      "ids": [
        "18-base-normal-1-lp"
      ],
      "character": "Jin",
      "name": "Crouching LP",
      "classification": "local normal-repeat/restart branch verified",
      "input": "(+$DA | +$DE) bit4, normalized new/buffered LP",
      "inputPC": "0505B0",
      "gate": "Nonzero animation flag +$3C; normal animation has not ended; shared posture/normal-transition gates must permit continuation. Calls $0176B6 and $017456.",
      "effect": "Clears buffer at $0505C0, sets attack attribute $1D, clears +$84/+$86 and local substate +$08 at $0505E2, then installs animation $14/$06 at $0505F0.",
      "limit": "No explicit finite bonus-hit allowance is established in this local branch. This is a code-verified normal animation restart, not a measured hit increase or a Hyper extension."
    }
  ],
  "independentChecks": [
    "Decoded candidate instructions from the verified opcode view at exact route instruction boundaries.",
    "Checked odd-byte input operands D1/D3/D5/D7/D9/DB/DD/DF in all six-character local route bodies: no additional references were found.",
    "Confirmed $0135E6 stores animation selectors +$60/+$61, indexes character animation tables and enters $001DFC. Candidate calls to it are actual animation reinitialization, not merely an input-reader signature.",
    "Confirmed $001DD8 advances animation delay and stream; it does not directly test the input word in the bounded excerpt.",
    "Confirmed common $01741E reads held-byte +$D1 for the down/crouch transition; such shared reads are outside the local-reader count.",
    "All supplied reader paths retain external frontiers; no local-input absence is promoted to a complete negative verdict."
  ],
  "filterLimitations": [
    "normal_routes.py is a selector filter, not a CPU emulator. It clears unknown registers/flags at calls but preserves known object-field assumptions across external calls and does not propagate all local-call memory side effects into continuations.",
    "Its simplified arithmetic flags and partial-register treatment are not a general 68000 proof engine. No negative verdict should depend on unreviewed pruning.",
    "Ryu and Chun-Li local absence therefore closes only the direct local-update question; initializer and common transition coverage remains explicit."
  ]
}
