{
  "schema": "morphus56k-sf2-tag-v4-public-status/v1",
  "updated": "2026-11-02",
  "version": "v4-r52",
  "full_release_complete": false,
  "checked_scope": "Mac Apple Silicon/World/standard/two simulated controllers, TAG and Dramatic Battle",
  "roster": {
    "direct_count": 18,
    "direct": "Original sixteen plus Cyborg and Mech Zangief",
    "native_hidden_retained": [
      "Old versions",
      "Regular Akuma"
    ],
    "removed": [
      "Shin Akuma",
      "Shin Bison",
      "Evil Ryu",
      "Violent Ken"
    ]
  },
  "native_pacing": {
    "parity_passed": false,
    "measured_cases": 20,
    "deficit_percent_min": 9.2876,
    "deficit_percent_max": 15.6093,
    "native_gameplay_clocks_changed": false
  },
  "platform_qualification": {
    "macos_apple_silicon_world_standard_two_simulated_controllers": true,
    "physical_controllers": false,
    "actual_windows": false,
    "android_phone": false,
    "android15_api35_arm64_emulated_core_runtime": true,
    "android_retroarch_UI_installation": false,
    "android_16KB_runtime": false,
    "cross_platform_save_portability": false,
    "android_audio_output_device": false
  },
  "profiles": {
    "tag": {
      "configuration_sha256": "0223d14304b95353ddfeabd8c3c2389dbca0cfb2597d2c0bd9ff718d542401d0",
      "core_sha256": "fd5d9c8697c5913e8669d6139b89af0431aa8df324bc754e532831bba9cfd7f0",
      "state_abi": "SFT4G054",
      "content_sha256": "0faa8b7b93e0f10d67d2828739fbd27d5904c96946384fd48802682c0b0d6034"
    },
    "dramatic": {
      "configuration_sha256": "0ea54e89d05935070e67e78ebbfe97880ee48ed118c1c5bcb6680bdc1e92180b",
      "core_sha256": "4ada455a5550bb08b584b652f90ca7f7acca7f690e19012ab6619265e1f1a0b4",
      "state_abi": "SFT4G055",
      "content_sha256": "1c7a50afb61f235b89792a8d98d08782a0ca138b634a6249973dd27d03794648"
    }
  },
  "reviews": {
    "cyborg_normals_cases": 120,
    "cyborg_normals_checks": 514781,
    "cyborg_unobscured_guide_comparisons_open": 4,
    "mech_grab_cases": 17,
    "mech_grab_checks": 73249,
    "mech_paired_images": 409,
    "final_anatomical_grip_approval": "partial"
  },
  "credit": "Ernart Castel / Shakunetsu (shakunetsu_srk)",
  "source_receipts": [
    {
      "source": "docs/SF2_TAG_V4_R52_HANDOFF_20261102.md",
      "sha256": "ad9d2babea9087164681ce64eedb7eeca629003fc9ccec33edbc50177258424c"
    },
    {
      "source": "docs/SF2_TAG_V4_R52_LEDGER_20261102.json",
      "sha256": "2b7d1dc23bc76cb7cf2cad1819e098ea13f62ca6208af3df9bed048ef7691869"
    },
    {
      "source": "tools/v4_training/finish_r52_r02/qualified-r02/report-v1.json",
      "sha256": "a695bdb1d54b1637b78912f9e9a6ef35983d3aa8e0a8232d5b2af293e018abd9"
    },
    {
      "source": "runs/v4/creator-r52-tag-r03/cyborg-normals-r01/report-v1.json",
      "sha256": "c62034037fd6b2a7a6a17fab610e43120e2bb65f92edc723c18f3e966512a4ea"
    },
    {
      "source": "runs/v4/creator-r52-tag-r03/grips-r02/report-v1.json",
      "sha256": "110534bd987a619bd6ceaf3252a098fa0fbb418b68ac7fcf110ea8856d8e1229"
    },
    {
      "source": "tools/v4_stabilization/r52_character_polish_r01/grip-review-r01/report-v1.json",
      "sha256": "600aea9d7a927570eed3b78f3896359361f7f48b2f1de737f9187920870b88c4"
    },
    {
      "source": "tools/v4_stabilization/r52_pacing_evidence_r01/current-r03-r01/report-v1.json",
      "sha256": "ebcd4ea2a32ff33de622dfa94b329b81b93cb2c0d713f73601871a529bc9eecc"
    },
    {
      "source": "tools/v4_android/runtime_r52_r01/ready-v1.json",
      "sha256": "42ac8eeaaf1f975bd1621aa3fea05f1eff1b410ae6ba44d9c335147eedd6a2d1"
    },
    {
      "source": "tools/v4_android/source_r52_r01/ready-v1.json",
      "sha256": "d5850f6884d88c267c35fc9acac0cd08f9ba623f75f17da4e0dc3909577b10f6"
    }
  ],
  "screenshots": [
    {
      "href": "/blog/sf2-tag-v4/r52-mech-grab.png",
      "source": "runs/v4/creator-r52-tag-r03/grips-r02/grip-pair-0071.png",
      "sha256": "e7d8362f770d7113b71947e3f955faf339c49910bb2c2878da51d9b6214162c0",
      "bytes": 13498,
      "dimensions": [
        384,
        224
      ],
      "label": "Current TAG paired Mech/opponent throw capture",
      "image_modified": false
    },
    {
      "href": "/blog/sf2-tag-v4/r52-cyborg-normal.png",
      "source": "runs/v4/creator-r52-tag-r03/cyborg-normals-r01/source-0792.png",
      "sha256": "b875bfe6312e579ab1a425477936d2d97f3f3ae774a8582e076fd9f6df9bbe6f",
      "bytes": 13763,
      "dimensions": [
        384,
        224
      ],
      "label": "Current TAG Cyborg normal-attack review capture",
      "image_modified": false
    },
    {
      "href": "/blog/sf2-tag-v4/r52-training-projectile.png",
      "source": "runs/v4/creator-r52-tag-r03/training-r04/0004-post-recovery-owned-projectile-active.png",
      "sha256": "21401cc98a57ea46e8b04b5e88e3d18c13f773b459224b499f23073acd51f342",
      "bytes": 13641,
      "dimensions": [
        384,
        224
      ],
      "label": "Current TAG post-recovery live projectile capture",
      "image_modified": false
    },
    {
      "href": "/blog/sf2-tag-v4/r52-dramatic-battle.png",
      "source": "runs/v4/creator-r52-dramatic-r03/training-r04/0002-actual-released-DB-corner-jump-opportunity.png",
      "sha256": "5f5560a91646984ca2ec5eeb5727c7f5d4f034b5e274c782e23864a93ff4e924",
      "bytes": 14993,
      "dimensions": [
        384,
        224
      ],
      "label": "Current Dramatic Battle native jump-opportunity capture",
      "image_modified": false
    }
  ],
  "notes": [
    "Screenshots are unchanged native capture PNGs, not Android captures.",
    "The status record summarizes retained source reports; it does not expand their qualification.",
    "Training review fixtures adjust horizontal spacing for scripted projectile and jump opportunities.",
    "Older R51 and cross-mode saves are rejected; begin a new match.",
    "V4 needs a matching custom emulator core; standard patch application does not establish runtime playability.",
    "Android release cores pass bounded Android 15 arm64 emulator runtime tests; this does not establish physical-phone performance, RetroArch UI installation or 16 KB runtime execution."
  ],
  "android": {
    "status": "experimental preview",
    "recommendedPatcher": "/tools/sf2-tag-patcher",
    "retroarchBits": 64,
    "customCoreRequired": true,
    "modes": {
      "tag": {
        "core": "fbneo_ssf2t_tag_r52_libretro.so",
        "gameZip": "ssf2tmv4.zip"
      },
      "dramatic": {
        "core": "fbneo_ssf2t_dramatic_r52_libretro.so",
        "gameZip": "ssf2tdbmv4.zip"
      }
    },
    "files": [
      {
        "href": "/downloads/sf2-tag-v4/android/r52/SSF2T-CROSSOVER-R52-Android-BPS-Patches.zip",
        "label": "Download standard BPS patch files",
        "filename": "SSF2T-CROSSOVER-R52-Android-BPS-Patches.zip",
        "bytes": 4938309,
        "sha256": "ecc6d17ca0759ce2950d4ae0862b4917fa685fbf5cc684fb017baa5e02827049"
      },
      {
        "href": "/downloads/sf2-tag-v4/android/r52/SSF2T-CROSSOVER-R52-Android-ARM64-Cores.zip",
        "label": "Matching Android arm64 RetroArch cores — TAG + Dramatic Battle",
        "filename": "SSF2T-CROSSOVER-R52-Android-ARM64-Cores.zip",
        "bytes": 7605611,
        "sha256": "2cae8b60a6f9f6ac014fd41a05979d30929445b754b710e41ca1f1ab1f94ef85"
      },
      {
        "href": "/downloads/sf2-tag-v4/android/r52/SSF2T-CROSSOVER-R52-Android-Cores-Source.zip",
        "label": "Complete corresponding core source, rebuild instructions and full licenses",
        "filename": "SSF2T-CROSSOVER-R52-Android-Cores-Source.zip",
        "bytes": 43879232,
        "sha256": "cca9e04d78f6ec91f0f13883f05e1da084f496882ab698a2d144e6b103ed06b5"
      }
    ],
    "runtimeTest": {
      "environment": "Android 15 / API 35 arm64 Bionic emulator",
      "bothReleaseCoresTested": true,
      "videoCallbacksPerCore": 4832,
      "PCMCallbacksPerCore": 4832,
      "nonzeroAudio": true,
      "exactStateVideoAudioReplayTicks": 16,
      "corruptedContentRefused": true,
      "realCrossModeSavesRefusedBothDirections": true,
      "emulatorPageBytes": 4096,
      "staticELF16KBAlignmentPassed": true,
      "runtime16KBTested": false,
      "harness": "Public libretro headless harness inside a genuine Android 15/API35 arm64 emulator"
    },
    "unqualified": [
      "Installation through the Android RetroArch UI",
      "Physical phones",
      "Physical controllers",
      "Phone performance",
      "Cross-platform save portability",
      "16 KB runtime execution",
      "Audio output device"
    ],
    "sourceAvailability": "Complete corresponding core source, rebuild instructions, full FBNeo license and runtime notices are available in the source archive listed above.",
    "filesStayLocal": true,
    "sourceROMsOrKeysBundled": false
  }
}
