{
  "version": 1,
  "kind": "hwanse-intro-battle-helper-dictionary-review",
  "status": "runtime-static-helper-bridge",
  "source": {
    "runtime": "out/intro_battle_runtime_review.json",
    "rawTrace": "captures/runtime/hwanse-runtime-trace-2026-07-08T00-57-20-938Z-intro-battle.jsonl",
    "staticPatterns": "out/battle_effect_animation_pattern_review.json",
    "rects": "out/cns_rect_review_data.json"
  },
  "summary": {
    "phaseCount": 3,
    "runtimeBtlEfcDraws": 874,
    "coveredStaticFrames": 10,
    "missingStaticFrames": 4,
    "runtimeExtraFrames": [
      30,
      31,
      32,
      33,
      34,
      35,
      36,
      37
    ],
    "classificationCounts": [
      [
        "runtime-extra-result-sparkle-candidate",
        499
      ],
      [
        "covered-by-static-skill-helper",
        363
      ],
      [
        "unmapped-runtime-rect",
        12
      ]
    ]
  },
  "helperDictionary": {
    "frameRange30to37": {
      "label": "sparkle/result particle family",
      "runtimeEvidence": [
        "Ataho 맹호스페셜",
        "Linxiang 선렬각",
        "Smash 쾌진격"
      ],
      "staticEvidence": "쾌진격 2~4단 helper 29/30/31 spawn-tree frameScript에서 #30..37이 직접 나온다.",
      "promotion": "frame family confirmed; exact semantic role can be skill helper or result/presentation depending caller row."
    },
    "frameRange65to67": {
      "label": "slash/through helper family",
      "runtimeEvidence": [
        "Smash 쾌진격"
      ],
      "staticEvidence": "helper 12 frameScript에서 #65,#66,#67이 나온다.",
      "promotion": "confirmed for 쾌진격 phase when observed."
    },
    "frameRange173to175": {
      "label": "선렬각 final streak helper family",
      "runtimeEvidence": [
        "Linxiang 선렬각"
      ],
      "staticEvidence": "선렬각 4단 helper 110 frameScript에서 #173,#174,#175가 나온다.",
      "promotion": "confirmed for 선렬각 phase."
    }
  },
  "phaseRows": [
    {
      "phaseLabel": "Ataho 맹호스페셜",
      "title": "맹호스페셜",
      "recordKey": "ataho:0x19",
      "firstFrame": 285,
      "lastFrame": 431,
      "runtimeDrawCount": 254,
      "staticRow": {
        "recordKey": "ataho:0x19",
        "ownerName": "아타호",
        "skillName": "맹호스페셜",
        "skillIdHex": "0x19",
        "levelOrFixed": 4,
        "helperIds": [],
        "effectAnimationClass": "actor-only-or-no-helper",
        "effectFrameLabels": [],
        "expectedFrames": [],
        "resultWlkNos": [
          3,
          3,
          3,
          3,
          5,
          4,
          5
        ],
        "effectWlkNos": [],
        "helperAnimations": []
      },
      "expectedFramesCovered": [],
      "expectedFramesMissing": [],
      "runtimeExtraFrames": [
        30,
        31,
        32,
        33,
        34,
        35,
        36,
        37
      ],
      "classificationCounts": [
        [
          "runtime-extra-result-sparkle-candidate",
          250
        ],
        [
          "unmapped-runtime-rect",
          4
        ]
      ],
      "observedFrameRows": [
        {
          "effectFrame": 32,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 404,
          "lastFrame": 408,
          "dstBounds": {
            "x0": 336,
            "y0": 189,
            "x1": 612,
            "y1": 244
          },
          "sampleSrcRect": "544,0,560,16",
          "sampleDstPoint": "340,210",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 33,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 406,
          "lastFrame": 410,
          "dstBounds": {
            "x0": 327,
            "y0": 180,
            "x1": 598,
            "y1": 248
          },
          "sampleSrcRect": "560,0,576,16",
          "sampleDstPoint": "331,208",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 34,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 408,
          "lastFrame": 412,
          "dstBounds": {
            "x0": 318,
            "y0": 171,
            "x1": 590,
            "y1": 253
          },
          "sampleSrcRect": "576,0,592,16",
          "sampleDstPoint": "323,206",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 35,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 410,
          "lastFrame": 414,
          "dstBounds": {
            "x0": 310,
            "y0": 162,
            "x1": 581,
            "y1": 257
          },
          "sampleSrcRect": "592,0,608,16",
          "sampleDstPoint": "314,204",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 36,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 412,
          "lastFrame": 416,
          "dstBounds": {
            "x0": 301,
            "y0": 153,
            "x1": 572,
            "y1": 261
          },
          "sampleSrcRect": "608,0,624,16",
          "sampleDstPoint": "305,202",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 37,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 414,
          "lastFrame": 418,
          "dstBounds": {
            "x0": 291,
            "y0": 144,
            "x1": 563,
            "y1": 265
          },
          "sampleSrcRect": "624,0,640,16",
          "sampleDstPoint": "297,200",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 31,
          "drawCount": 30,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 402,
          "lastFrame": 406,
          "dstBounds": {
            "x0": 344,
            "y0": 198,
            "x1": 616,
            "y1": 240
          },
          "sampleSrcRect": "528,0,544,16",
          "sampleDstPoint": "349,212",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 30,
          "drawCount": 28,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 400,
          "lastFrame": 404,
          "dstBounds": {
            "x0": 353,
            "y0": 207,
            "x1": 606,
            "y1": 236
          },
          "sampleSrcRect": "512,0,528,16",
          "sampleDstPoint": "357,214",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": null,
          "drawCount": 4,
          "classification": "unmapped-runtime-rect",
          "firstFrame": 403,
          "lastFrame": 406,
          "dstBounds": {
            "x0": 603,
            "y0": 216,
            "x1": 610,
            "y1": 216
          },
          "sampleSrcRect": "512,0,519,16",
          "sampleDstPoint": "609,216",
          "sampleCaller": "0x00419F5C"
        }
      ],
      "runtimeFrameRows": [
        {
          "runtimeFrame": 400,
          "drawCount": 4,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 401,
          "drawCount": 8,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 402,
          "drawCount": 12,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 8
            },
            {
              "effectFrame": 31,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 403,
          "drawCount": 15,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 6
            },
            {
              "effectFrame": 31,
              "count": 8
            },
            {
              "effectFrame": null,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 404,
          "drawCount": 15,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 2
            },
            {
              "effectFrame": 31,
              "count": 8
            },
            {
              "effectFrame": 32,
              "count": 4
            },
            {
              "effectFrame": null,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 405,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 31,
              "count": 7
            },
            {
              "effectFrame": 32,
              "count": 8
            },
            {
              "effectFrame": null,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 406,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 31,
              "count": 3
            },
            {
              "effectFrame": 32,
              "count": 8
            },
            {
              "effectFrame": 33,
              "count": 4
            },
            {
              "effectFrame": null,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 407,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 32,
              "count": 8
            },
            {
              "effectFrame": 33,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 408,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 32,
              "count": 4
            },
            {
              "effectFrame": 33,
              "count": 8
            },
            {
              "effectFrame": 34,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 409,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 33,
              "count": 8
            },
            {
              "effectFrame": 34,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 410,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 33,
              "count": 4
            },
            {
              "effectFrame": 34,
              "count": 8
            },
            {
              "effectFrame": 35,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 411,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 34,
              "count": 8
            },
            {
              "effectFrame": 35,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 412,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 34,
              "count": 4
            },
            {
              "effectFrame": 35,
              "count": 8
            },
            {
              "effectFrame": 36,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 413,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 35,
              "count": 8
            },
            {
              "effectFrame": 36,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 414,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 35,
              "count": 4
            },
            {
              "effectFrame": 36,
              "count": 8
            },
            {
              "effectFrame": 37,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 415,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 36,
              "count": 8
            },
            {
              "effectFrame": 37,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 416,
          "drawCount": 12,
          "effectFrameCounts": [
            {
              "effectFrame": 36,
              "count": 4
            },
            {
              "effectFrame": 37,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 417,
          "drawCount": 8,
          "effectFrameCounts": [
            {
              "effectFrame": 37,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 418,
          "drawCount": 4,
          "effectFrameCounts": [
            {
              "effectFrame": 37,
              "count": 4
            }
          ]
        }
      ],
      "interpretation": [
        "runtime extra #30..37은 공용 sparkle/result particle 후보다. 기술 자체 helper로 바로 승격하지 않는다.",
        "이 skill row에는 helperIds가 비어 있으므로 extra effect는 result/critical/presentation 경로 또는 아직 누락된 helper-call 후보로 분리해야 한다."
      ]
    },
    {
      "phaseLabel": "Linxiang 선렬각",
      "title": "선렬각",
      "recordKey": "rinshan:0x10",
      "firstFrame": 469,
      "lastFrame": 568,
      "runtimeDrawCount": 260,
      "staticRow": {
        "recordKey": "rinshan:0x10",
        "ownerName": "린샹",
        "skillName": "선렬각",
        "skillIdHex": "0x10",
        "levelOrFixed": 4,
        "helperIds": [
          110
        ],
        "effectAnimationClass": "frameScript-effect",
        "effectFrameLabels": [
          "btl_efc#173",
          "btl_efc#173@2",
          "btl_efc#174@2",
          "btl_efc#175@2"
        ],
        "expectedFrames": [
          173,
          174,
          175
        ],
        "resultWlkNos": [
          3,
          3,
          3,
          3,
          3,
          5
        ],
        "effectWlkNos": [],
        "helperAnimations": [
          {
            "helperId": 110,
            "animationClass": "frameScript-sequence",
            "behaviorClass": "multi-frameScript-effect",
            "effectFrameLabels": [
              "btl_efc#173",
              "btl_efc#173@2",
              "btl_efc#174@2",
              "btl_efc#175@2"
            ],
            "frames": [
              173,
              174,
              175
            ],
            "directSpawnCount": 0,
            "rootCounterSets": {},
            "executionRequirements": []
          }
        ]
      },
      "expectedFramesCovered": [
        173,
        174,
        175
      ],
      "expectedFramesMissing": [],
      "runtimeExtraFrames": [
        30,
        31,
        32,
        33,
        34,
        35,
        36,
        37
      ],
      "classificationCounts": [
        [
          "runtime-extra-result-sparkle-candidate",
          249
        ],
        [
          "covered-by-static-skill-helper",
          6
        ],
        [
          "unmapped-runtime-rect",
          5
        ]
      ],
      "observedFrameRows": [
        {
          "effectFrame": 32,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 541,
          "lastFrame": 545,
          "dstBounds": {
            "x0": 348,
            "y0": 190,
            "x1": 613,
            "y1": 252
          },
          "sampleSrcRect": "544,0,560,16",
          "sampleDstPoint": "352,216",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 33,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 543,
          "lastFrame": 547,
          "dstBounds": {
            "x0": 336,
            "y0": 181,
            "x1": 600,
            "y1": 259
          },
          "sampleSrcRect": "560,0,576,16",
          "sampleDstPoint": "343,216",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 34,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 545,
          "lastFrame": 549,
          "dstBounds": {
            "x0": 321,
            "y0": 172,
            "x1": 591,
            "y1": 265
          },
          "sampleSrcRect": "576,0,592,16",
          "sampleDstPoint": "333,216",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 35,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 547,
          "lastFrame": 551,
          "dstBounds": {
            "x0": 307,
            "y0": 164,
            "x1": 582,
            "y1": 272
          },
          "sampleSrcRect": "592,0,608,16",
          "sampleDstPoint": "324,216",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 36,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 549,
          "lastFrame": 553,
          "dstBounds": {
            "x0": 292,
            "y0": 155,
            "x1": 573,
            "y1": 279
          },
          "sampleSrcRect": "608,0,624,16",
          "sampleDstPoint": "314,216",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 37,
          "drawCount": 32,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 551,
          "lastFrame": 555,
          "dstBounds": {
            "x0": 278,
            "y0": 146,
            "x1": 565,
            "y1": 286
          },
          "sampleSrcRect": "624,0,640,16",
          "sampleDstPoint": "304,216",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 31,
          "drawCount": 29,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 539,
          "lastFrame": 543,
          "dstBounds": {
            "x0": 357,
            "y0": 198,
            "x1": 613,
            "y1": 245
          },
          "sampleSrcRect": "528,0,544,16",
          "sampleDstPoint": "362,216",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 30,
          "drawCount": 28,
          "classification": "runtime-extra-result-sparkle-candidate",
          "firstFrame": 537,
          "lastFrame": 541,
          "dstBounds": {
            "x0": 367,
            "y0": 207,
            "x1": 607,
            "y1": 238
          },
          "sampleSrcRect": "512,0,528,16",
          "sampleDstPoint": "372,216",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": null,
          "drawCount": 5,
          "classification": "unmapped-runtime-rect",
          "firstFrame": 540,
          "lastFrame": 543,
          "dstBounds": {
            "x0": 601,
            "y0": 216,
            "x1": 611,
            "y1": 225
          },
          "sampleSrcRect": "512,0,518,16",
          "sampleDstPoint": "610,216",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 173,
          "drawCount": 2,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 539,
          "lastFrame": 540,
          "dstBounds": {
            "x0": 424,
            "y0": 176,
            "x1": 456,
            "y1": 192
          },
          "sampleSrcRect": "384,192,416,208",
          "sampleDstPoint": "424,176",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 174,
          "drawCount": 2,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 541,
          "lastFrame": 542,
          "dstBounds": {
            "x0": 440,
            "y0": 176,
            "x1": 536,
            "y1": 192
          },
          "sampleSrcRect": "384,204,480,220",
          "sampleDstPoint": "440,176",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 175,
          "drawCount": 2,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 543,
          "lastFrame": 544,
          "dstBounds": {
            "x0": 424,
            "y0": 176,
            "x1": 504,
            "y1": 192
          },
          "sampleSrcRect": "416,192,496,208",
          "sampleDstPoint": "424,176",
          "sampleCaller": "0x00419F5C"
        }
      ],
      "runtimeFrameRows": [
        {
          "runtimeFrame": 537,
          "drawCount": 4,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 538,
          "drawCount": 8,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 539,
          "drawCount": 13,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 8
            },
            {
              "effectFrame": 31,
              "count": 4
            },
            {
              "effectFrame": 173,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 540,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 6
            },
            {
              "effectFrame": 31,
              "count": 8
            },
            {
              "effectFrame": 173,
              "count": 1
            },
            {
              "effectFrame": null,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 541,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 2
            },
            {
              "effectFrame": 31,
              "count": 8
            },
            {
              "effectFrame": 32,
              "count": 4
            },
            {
              "effectFrame": 174,
              "count": 1
            },
            {
              "effectFrame": null,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 542,
          "drawCount": 17,
          "effectFrameCounts": [
            {
              "effectFrame": 31,
              "count": 6
            },
            {
              "effectFrame": 32,
              "count": 8
            },
            {
              "effectFrame": 174,
              "count": 1
            },
            {
              "effectFrame": null,
              "count": 2
            }
          ]
        },
        {
          "runtimeFrame": 543,
          "drawCount": 17,
          "effectFrameCounts": [
            {
              "effectFrame": 31,
              "count": 3
            },
            {
              "effectFrame": 32,
              "count": 8
            },
            {
              "effectFrame": 33,
              "count": 4
            },
            {
              "effectFrame": 175,
              "count": 1
            },
            {
              "effectFrame": null,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 544,
          "drawCount": 17,
          "effectFrameCounts": [
            {
              "effectFrame": 32,
              "count": 8
            },
            {
              "effectFrame": 33,
              "count": 8
            },
            {
              "effectFrame": 175,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 545,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 32,
              "count": 4
            },
            {
              "effectFrame": 33,
              "count": 8
            },
            {
              "effectFrame": 34,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 546,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 33,
              "count": 8
            },
            {
              "effectFrame": 34,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 547,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 33,
              "count": 4
            },
            {
              "effectFrame": 34,
              "count": 8
            },
            {
              "effectFrame": 35,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 548,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 34,
              "count": 8
            },
            {
              "effectFrame": 35,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 549,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 34,
              "count": 4
            },
            {
              "effectFrame": 35,
              "count": 8
            },
            {
              "effectFrame": 36,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 550,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 35,
              "count": 8
            },
            {
              "effectFrame": 36,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 551,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 35,
              "count": 4
            },
            {
              "effectFrame": 36,
              "count": 8
            },
            {
              "effectFrame": 37,
              "count": 4
            }
          ]
        },
        {
          "runtimeFrame": 552,
          "drawCount": 16,
          "effectFrameCounts": [
            {
              "effectFrame": 36,
              "count": 8
            },
            {
              "effectFrame": 37,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 553,
          "drawCount": 12,
          "effectFrameCounts": [
            {
              "effectFrame": 36,
              "count": 4
            },
            {
              "effectFrame": 37,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 554,
          "drawCount": 8,
          "effectFrameCounts": [
            {
              "effectFrame": 37,
              "count": 8
            }
          ]
        },
        {
          "runtimeFrame": 555,
          "drawCount": 4,
          "effectFrameCounts": [
            {
              "effectFrame": 37,
              "count": 4
            }
          ]
        }
      ],
      "interpretation": [
        "정적 helper frame [173, 174, 175]가 런타임 btl_efc draw로 직접 관측됐다.",
        "runtime extra #30..37은 공용 sparkle/result particle 후보다. 기술 자체 helper로 바로 승격하지 않는다."
      ]
    },
    {
      "phaseLabel": "Smash 쾌진격",
      "title": "쾌진격",
      "recordKey": "smashu:0x0c",
      "firstFrame": 606,
      "lastFrame": 667,
      "runtimeDrawCount": 360,
      "staticRow": {
        "recordKey": "smashu:0x0c",
        "ownerName": "스마슈",
        "skillName": "쾌진격",
        "skillIdHex": "0x0c",
        "levelOrFixed": 4,
        "helperIds": [
          31,
          12
        ],
        "effectAnimationClass": "frameScript-effect",
        "effectFrameLabels": [
          "btl_efc#30",
          "btl_efc#30@2",
          "btl_efc#31@2",
          "btl_efc#32@2",
          "btl_efc#33@2",
          "btl_efc#34@2",
          "btl_efc#35@2",
          "btl_efc#36@2",
          "btl_efc#37@2",
          "btl_efc#65@2",
          "btl_efc#66@2",
          "btl_efc#67@2"
        ],
        "expectedFrames": [
          30,
          31,
          32,
          33,
          34,
          35,
          36,
          37,
          65,
          66,
          67
        ],
        "resultWlkNos": [
          24
        ],
        "effectWlkNos": [],
        "helperAnimations": [
          {
            "helperId": 31,
            "animationClass": "init-frame-effect",
            "behaviorClass": "direct-frame-spawn",
            "effectFrameLabels": [
              "btl_efc#30",
              "btl_efc#30@2",
              "btl_efc#31@2",
              "btl_efc#32@2",
              "btl_efc#33@2",
              "btl_efc#34@2",
              "btl_efc#35@2",
              "btl_efc#36@2",
              "btl_efc#37@2"
            ],
            "frames": [
              30,
              31,
              32,
              33,
              34,
              35,
              36,
              37
            ],
            "directSpawnCount": 1,
            "rootCounterSets": {
              "0x92": 3,
              "0x94": 3
            },
            "executionRequirements": [
              "random placement/range present"
            ]
          },
          {
            "helperId": 12,
            "animationClass": "frameScript-sequence",
            "behaviorClass": "multi-frameScript-effect",
            "effectFrameLabels": [
              "btl_efc#65@2",
              "btl_efc#66@2",
              "btl_efc#67@2"
            ],
            "frames": [
              65,
              66,
              67
            ],
            "directSpawnCount": 0,
            "rootCounterSets": {},
            "executionRequirements": []
          }
        ]
      },
      "expectedFramesCovered": [
        30,
        31,
        32,
        33,
        65,
        66,
        67
      ],
      "expectedFramesMissing": [
        34,
        35,
        36,
        37
      ],
      "runtimeExtraFrames": [],
      "classificationCounts": [
        [
          "covered-by-static-skill-helper",
          357
        ],
        [
          "unmapped-runtime-rect",
          3
        ]
      ],
      "observedFrameRows": [
        {
          "effectFrame": 30,
          "drawCount": 141,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 617,
          "lastFrame": 624,
          "dstBounds": {
            "x0": 103,
            "y0": 172,
            "x1": 602,
            "y1": 256
          },
          "sampleSrcRect": "512,0,528,16",
          "sampleDstPoint": "143,204",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 31,
          "drawCount": 110,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 619,
          "lastFrame": 624,
          "dstBounds": {
            "x0": 98,
            "y0": 167,
            "x1": 507,
            "y1": 258
          },
          "sampleSrcRect": "528,0,544,16",
          "sampleDstPoint": "147,199",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 32,
          "drawCount": 70,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 621,
          "lastFrame": 624,
          "dstBounds": {
            "x0": 92,
            "y0": 164,
            "x1": 398,
            "y1": 261
          },
          "sampleSrcRect": "544,0,560,16",
          "sampleDstPoint": "151,195",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 33,
          "drawCount": 30,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 623,
          "lastFrame": 624,
          "dstBounds": {
            "x0": 86,
            "y0": 173,
            "x1": 234,
            "y1": 262
          },
          "sampleSrcRect": "560,0,576,16",
          "sampleDstPoint": "156,191",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": null,
          "drawCount": 3,
          "classification": "unmapped-runtime-rect",
          "firstFrame": 624,
          "lastFrame": 624,
          "dstBounds": {
            "x0": 604,
            "y0": 171,
            "x1": 614,
            "y1": 213
          },
          "sampleSrcRect": "512,0,523,16",
          "sampleDstPoint": "605,171",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 65,
          "drawCount": 2,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 626,
          "lastFrame": 627,
          "dstBounds": {
            "x0": 480,
            "y0": 176,
            "x1": 528,
            "y1": 192
          },
          "sampleSrcRect": "0,128,48,144",
          "sampleDstPoint": "480,176",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 66,
          "drawCount": 2,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 628,
          "lastFrame": 629,
          "dstBounds": {
            "x0": 480,
            "y0": 176,
            "x1": 560,
            "y1": 192
          },
          "sampleSrcRect": "48,128,128,144",
          "sampleDstPoint": "480,176",
          "sampleCaller": "0x00419F5C"
        },
        {
          "effectFrame": 67,
          "drawCount": 2,
          "classification": "covered-by-static-skill-helper",
          "firstFrame": 630,
          "lastFrame": 631,
          "dstBounds": {
            "x0": 512,
            "y0": 176,
            "x1": 560,
            "y1": 192
          },
          "sampleSrcRect": "128,128,176,144",
          "sampleDstPoint": "512,176",
          "sampleCaller": "0x00419F5C"
        }
      ],
      "runtimeFrameRows": [
        {
          "runtimeFrame": 617,
          "drawCount": 10,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 10
            }
          ]
        },
        {
          "runtimeFrame": 618,
          "drawCount": 20,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 20
            }
          ]
        },
        {
          "runtimeFrame": 619,
          "drawCount": 30,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 20
            },
            {
              "effectFrame": 31,
              "count": 10
            }
          ]
        },
        {
          "runtimeFrame": 620,
          "drawCount": 40,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 20
            },
            {
              "effectFrame": 31,
              "count": 20
            }
          ]
        },
        {
          "runtimeFrame": 621,
          "drawCount": 50,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 20
            },
            {
              "effectFrame": 31,
              "count": 20
            },
            {
              "effectFrame": 32,
              "count": 10
            }
          ]
        },
        {
          "runtimeFrame": 622,
          "drawCount": 60,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 20
            },
            {
              "effectFrame": 31,
              "count": 20
            },
            {
              "effectFrame": 32,
              "count": 20
            }
          ]
        },
        {
          "runtimeFrame": 623,
          "drawCount": 70,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 20
            },
            {
              "effectFrame": 31,
              "count": 20
            },
            {
              "effectFrame": 32,
              "count": 20
            },
            {
              "effectFrame": 33,
              "count": 10
            }
          ]
        },
        {
          "runtimeFrame": 624,
          "drawCount": 74,
          "effectFrameCounts": [
            {
              "effectFrame": 30,
              "count": 11
            },
            {
              "effectFrame": 31,
              "count": 20
            },
            {
              "effectFrame": 32,
              "count": 20
            },
            {
              "effectFrame": 33,
              "count": 20
            },
            {
              "effectFrame": null,
              "count": 3
            }
          ]
        },
        {
          "runtimeFrame": 626,
          "drawCount": 1,
          "effectFrameCounts": [
            {
              "effectFrame": 65,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 627,
          "drawCount": 1,
          "effectFrameCounts": [
            {
              "effectFrame": 65,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 628,
          "drawCount": 1,
          "effectFrameCounts": [
            {
              "effectFrame": 66,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 629,
          "drawCount": 1,
          "effectFrameCounts": [
            {
              "effectFrame": 66,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 630,
          "drawCount": 1,
          "effectFrameCounts": [
            {
              "effectFrame": 67,
              "count": 1
            }
          ]
        },
        {
          "runtimeFrame": 631,
          "drawCount": 1,
          "effectFrameCounts": [
            {
              "effectFrame": 67,
              "count": 1
            }
          ]
        }
      ],
      "interpretation": [
        "정적 helper frame [30, 31, 32, 33, 65, 66, 67]가 런타임 btl_efc draw로 직접 관측됐다.",
        "정적 helper frame [34, 35, 36, 37]는 이번 phase에서 관측되지 않았다. trace 구간/분기 또는 구현 매핑 재검토 대상이다.",
        "쾌진격 4단계 helper 31의 sparkle child family와 런타임 source rect가 같은 frame range를 공유한다."
      ]
    }
  ],
  "conclusions": [
    "intro-battle 런타임은 btl_efc draw source rect를 실제 frame index로 매핑할 수 있는 첫 근거다.",
    "쾌진격 4단계는 정적 helper 31(#30..37) 및 helper 12(#65..67)와 런타임 frame range가 맞물린다.",
    "선렬각 4단계는 helper 110(#173..175)이 런타임에서 관측되어 정적 helper 해석을 보강한다.",
    "맹호스페셜은 정적 skill helper가 비어 있는데 #30..37 계열이 관측되므로, 이는 skill-local helper가 아니라 result/critical/presentation 계열 후보로 보류한다.",
    "따라서 이 런타임은 모든 기술을 자동 확정하지는 않지만, #30..37, #65..67, #173..175 frame family의 실제 draw 경로를 확인하는 dictionary 기준점으로 쓸 수 있다."
  ]
}