{
  "schema": 1,
  "sourceFile": "data/battle-interactions-native.json",
  "runId": "interactions_canonical_20261030",
  "ruleset": "7.41f",
  "runtimeBuild": 10938,
  "sourceRevision": 11175759,
  "complete": false,
  "rows": 11,
  "errors": [],
  "missing": [],
  "checks": [
    {
      "id": "hex_basic",
      "name": "Hex basic dispel",
      "status": "observed",
      "evidence": {
        "before": true,
        "after": true,
        "at": 1.0333333015442,
        "modifiersBefore": [
          {
            "key": "modifier_lion_voodoo",
            "remaining": 2.4000000953674,
            "duration": 3.2000000476837,
            "stacks": 0
          }
        ],
        "modifiersAfter": [
          {
            "key": "modifier_lion_voodoo",
            "remaining": 2.2000002861023,
            "duration": 3.2000000476837,
            "stacks": 0
          }
        ]
      }
    },
    {
      "id": "hex_strong",
      "name": "Hex strong dispel",
      "status": "observed",
      "evidence": {
        "before": true,
        "after": false,
        "at": 1.033332824707,
        "modifiersBefore": [
          {
            "key": "modifier_lion_voodoo",
            "remaining": 2.3333330154419,
            "duration": 3.2000000476837,
            "stacks": 0
          }
        ],
        "modifiersAfter": []
      }
    },
    {
      "id": "impale_basic",
      "name": "Impale basic dispel",
      "status": "observed",
      "evidence": {
        "before": true,
        "after": true,
        "at": 1.0333337783813,
        "modifiersBefore": [
          {
            "key": "modifier_lion_impale",
            "remaining": 1.6999998092651,
            "duration": 2.2000000476837,
            "stacks": 0
          }
        ],
        "modifiersAfter": [
          {
            "key": "modifier_lion_impale",
            "remaining": 1.5,
            "duration": 2.2000000476837,
            "stacks": 0
          }
        ]
      }
    },
    {
      "id": "impale_strong",
      "name": "Impale strong dispel",
      "status": "observed",
      "evidence": {
        "before": true,
        "after": false,
        "at": 1.033332824707,
        "modifiersBefore": [
          {
            "key": "modifier_lion_impale",
            "remaining": 1.6333351135254,
            "duration": 2.2000000476837,
            "stacks": 0
          }
        ],
        "modifiersAfter": []
      }
    },
    {
      "id": "impale_resistance_25",
      "name": "25 percent status resistance applied to Impale",
      "status": "observed",
      "evidence": {
        "statusResistance": 0.25,
        "firstAt": 0.36666679382324,
        "lastStunnedAt": 1.966667175293,
        "firstClearAt": 2.0333347320557,
        "observedWindowLower": 1.60000038146976,
        "observedWindowUpper": 1.7466679382324601,
        "webExpectedSeconds": 1.6500000000000001,
        "nativeDurations": [
          {
            "key": "modifier_lion_impale",
            "remaining": 1.6166667938232,
            "duration": 1.6500000953674,
            "stacks": 0
          }
        ]
      }
    },
    {
      "id": "poison_satanic",
      "name": "Actual item removes existing poison",
      "status": "observed",
      "evidence": {
        "before": [
          {
            "key": "modifier_viper_poison_attack_slow",
            "remaining": 3.1000003814697,
            "duration": 4,
            "stacks": 1
          }
        ],
        "after": [],
        "active": [
          {
            "key": "modifier_item_satanic_unholy",
            "remaining": 5.9000015258789,
            "duration": 6,
            "stacks": 0
          }
        ],
        "at": 1.033332824707,
        "damage": []
      }
    },
    {
      "id": "poison_bkb",
      "name": "Actual item removes existing poison",
      "status": "observed",
      "evidence": {
        "before": [
          {
            "key": "modifier_viper_poison_attack_slow",
            "remaining": 3.1000022888184,
            "duration": 4,
            "stacks": 1
          }
        ],
        "after": [],
        "active": [
          {
            "key": "modifier_black_king_bar_immune",
            "remaining": 8.8999977111816,
            "duration": 9,
            "stacks": 0
          }
        ],
        "at": 1.0333347320557,
        "damage": []
      }
    },
    {
      "id": "lich_gaze_scepter_cast",
      "name": "Scepter permits Frost Blast while Gaze continues",
      "status": "insufficient",
      "evidence": {
        "blast": {
          "ability": "lich_frost_nova",
          "channeling": false,
          "at": 1.2333335876465
        },
        "channelAfterBlast": false,
        "blastDamage": 252,
        "webBlastIntegerDamage": 252,
        "channelSamples": []
      }
    },
    {
      "id": "lich_death_chain_frost",
      "name": "Death talent produces postdeath Chain Frost damage",
      "status": "observed_limited",
      "evidence": {
        "casterDead": true,
        "chainDamage": [
          {
            "direction": "outgoing",
            "at": 0.23333358764648,
            "original": 550,
            "source": "lich_chain_frost",
            "damageType": 2,
            "amount": 382
          }
        ],
        "webFirstHitIntegerDamage": 382,
        "targetBeforeMR": 0.30200004577637,
        "targetAfterKillMR": 0.30550003051758,
        "firstDeadSample": 0.033332824707031,
        "limit": "Projectile and postdeath impact observed. Native kill XP changes target MR; the web does not simulate mid-duel XP or certify full postkill damage equivalence."
      }
    },
    {
      "id": "lich_spire_chain",
      "name": "Spire bounce consumes hits and destruction damages",
      "status": "observed",
      "evidence": {
        "initialSpireHp": 8,
        "lowestObservedHp": 2,
        "destroyedAt": 4.2333335876465,
        "chainHits": [
          {
            "at": 1.5000038146973,
            "raw": 550,
            "damage": 384
          },
          {
            "at": 2.2666702270508,
            "raw": 600,
            "damage": 419
          },
          {
            "at": 3.0333366394043,
            "raw": 650,
            "damage": 454
          },
          {
            "at": 3.8000030517578,
            "raw": 700,
            "damage": 489
          },
          {
            "at": 4.5333366394043,
            "raw": 750,
            "damage": 524
          }
        ],
        "blast": [
          {
            "at": 4.1666679382324,
            "raw": 200,
            "damage": 140
          }
        ]
      }
    },
    {
      "id": "lich_spire_attacks",
      "name": "Four real hero hits destroy Spire and release blast",
      "status": "observed",
      "evidence": {
        "initialSpireHp": 8,
        "lowestObservedHp": 2,
        "destroyedAt": 2.5,
        "chainHits": [],
        "blast": [
          {
            "at": 2.5,
            "raw": 200,
            "damage": 140
          }
        ]
      }
    }
  ],
  "probability": [],
  "warnings": [
    "lich_gaze_scepter_cast: Scepter permits Frost Blast while Gaze continues insufficient"
  ],
  "nativeCaseClaims": 9,
  "nativeAlgorithmEquivalence": false,
  "limits": [
    "Runtime build and Steam ClientVersion are distinct identifiers; SourceRevision is retained without conflation.",
    "PRD model envelopes show finite simulated variation, not a formal equality test or proof of the private Valve RNG.",
    "Crit rolls on misses and exact proc counter initialization cannot be reconstructed from damage totals.",
    "Purge/intervention comparisons use sampled native state; missing before/after observations remain insufficient.",
    "Spire attack-count/destruction evidence does not certify its projectile geometry or flight timing.",
    "Missing natural series are not zero proc rates; no natural distribution claim is made."
  ],
  "coverage": {
    "planned": 15,
    "recorded": 11,
    "directObserved": 9,
    "limitedObserved": 1,
    "insufficient": [
      "lich_gaze_scepter_cast"
    ],
    "missingNatural": [
      "natural_crit_30",
      "natural_mkb_80",
      "natural_maelstrom_25",
      "natural_combo_evasion"
    ],
    "allCasesComplete": false
  }
}
