{
  "schema": "prismward_tester_downloads_v1",
  "build": "Ascent20",
  "version": "0.4.2-Ascent20-test1",
  "date": "2026-09-13",
  "channel": "Tester alpha",
  "android": {
    "file": "PrismWard_Ascent20_Android.apk",
    "bytes": 52072797,
    "sha256": "f4163d0c13511f5592524431efc2ea10cc6ce5797f24a15c9a0da2f075e95165",
    "package": "com.prismward.tester",
    "version_code": 20,
    "min_sdk": 24,
    "target_sdk": 36,
    "architectures": [
      "arm64-v8a",
      "x86_64"
    ],
    "certificate_sha256": "7d824198c605e1e53a448d1836dad9c881b7482211a39e56683b46491b1057f4",
    "requested_permissions": [],
    "emulator_verified": true,
    "physical_device_verified": false,
    "remaining_acceptance": [
      "Native QA uses an explicit time/position checkpoint; no human survival or enjoyment claim",
      "Physical-phone frame pacing, touch comfort, heat and battery remain unmeasured",
      "Multiple path choices and offline mastery remain separate backlog work"
    ],
    "prior_emulator_validation": {
      "file": "PrismWard_Ascent19_Android.apk",
      "bytes": 52072797,
      "sha256": "c46595cb9f1071f9cb526edbb83768fd2f32cfe9bf9b06cc08f6a3a374ed3204",
      "package": "com.prismward.tester",
      "version_code": 19,
      "min_sdk": 24,
      "target_sdk": 36,
      "architectures": [
        "arm64-v8a",
        "x86_64"
      ],
      "certificate_sha256": "7d824198c605e1e53a448d1836dad9c881b7482211a39e56683b46491b1057f4",
      "requested_permissions": [],
      "emulator_verified": true,
      "physical_device_verified": false,
      "remaining_acceptance": [
        "Native touch proof uses an explicit second-visit checkpoint and scripted gestures; no human average-survival or enjoyment claim",
        "Physical-phone frame pacing, touch comfort, heat and battery remain unmeasured",
        "Multiple path choices and offline mastery remain separate backlog work"
      ],
      "prior_emulator_validation": {
        "file": "PrismWard_Ascent18_Android.apk",
        "bytes": 52068701,
        "sha256": "197522fa9d8b8f2ea74fa2d24cf40a255d07e87655d138a421c9747ed87c26cf",
        "package": "com.prismward.tester",
        "version_code": 18,
        "min_sdk": 24,
        "target_sdk": 36,
        "architectures": [
          "arm64-v8a",
          "x86_64"
        ],
        "certificate_sha256": "7d824198c605e1e53a448d1836dad9c881b7482211a39e56683b46491b1057f4",
        "requested_permissions": [],
        "emulator_verified": true,
        "physical_device_verified": false,
        "remaining_acceptance": [
          "Natural unattended Android run died to ordinary obstacles before laser; checkpoint proof is not average survival evidence",
          "Physical-phone pacing, comfort, heat and battery remain unmeasured",
          "Bending corridors remain deferred; no human enjoyment or retention claim"
        ],
        "prior_emulator_validation": {
          "file": "PrismWard_Ascent17_Android.apk",
          "bytes": 52064605,
          "sha256": "0576ace0b43466f8684c6a85cf9a40e44127d7cbe53634fc805a8d4b8e56b7cc",
          "package": "com.prismward.tester",
          "version_code": 17,
          "min_sdk": 24,
          "target_sdk": 36,
          "architectures": [
            "arm64-v8a",
            "x86_64"
          ],
          "certificate_sha256": "7d824198c605e1e53a448d1836dad9c881b7482211a39e56683b46491b1057f4",
          "requested_permissions": [],
          "emulator_verified": true,
          "physical_device_verified": false,
          "remaining_acceptance": [
            "Physical-phone comfort, frame pacing, heat and battery remain unmeasured",
            "Scripted checkpoint runs are not human survival or enjoyment evidence; one steering run returned and two runs died",
            "No boss-kill victory or bending-corridor acceptance is claimed"
          ],
          "prior_emulator_validation": {
            "file": "PrismWard_Ascent16_Android.apk",
            "bytes": 52064605,
            "sha256": "6f3e2c7e0b856e2f1ef3d2a173c917c660d86d014d78d315cf58c7ea7467fd28",
            "package": "com.prismward.tester",
            "version_code": 16,
            "min_sdk": 24,
            "target_sdk": 36,
            "architectures": [
              "arm64-v8a",
              "x86_64"
            ],
            "certificate_sha256": "7d824198c605e1e53a448d1836dad9c881b7482211a39e56683b46491b1057f4",
            "requested_permissions": [],
            "emulator_verified": true,
            "physical_device_verified": false,
            "remaining_acceptance": [
              "Physical-phone comfort, performance, heat and battery are not measured",
              "Portal camera and corridor transitions verified through production-source renders and exported contracts; no completed Android boss playthrough",
              "Controlled generation counts are not representative human survival or retention data"
            ],
            "prior_emulator_validation": {
              "file": "PrismWard_Ascent14_Android.apk",
              "bytes": 52056250,
              "sha256": "f99712606094f8c76608d7dabd19a65eee1ffeee0669561da091d0e713713be8",
              "package": "com.prismward.tester",
              "version_code": 14,
              "min_sdk": 24,
              "target_sdk": 36,
              "architectures": [
                "arm64-v8a",
                "x86_64"
              ],
              "certificate_sha256": "7d824198c605e1e53a448d1836dad9c881b7482211a39e56683b46491b1057f4",
              "requested_permissions": [],
              "emulator_verified": true,
              "physical_device_verified": false,
              "remaining_acceptance": [
                "No physical phone performance/comfort acceptance",
                "Portal entry and exit verified by automated exported tests, not a completed emulator boss playthrough",
                "No subjective audio listening acceptance"
              ],
              "prior_emulator_validation": {
                "version_code": 12,
                "evidence": {
                  "android_version": "15",
                  "api": 35,
                  "renderer": "OpenGL ES 3.1 / Compatibility",
                  "verified": [
                    "native launch and landscape rendering",
                    "touch steering and Burst",
                    "death and retry screens",
                    "touch pause and both resume buttons",
                    "background automatically pauses",
                    "same-key APK update preserves XP, record and sound preference"
                  ]
                }
              },
              "current_validation": [
                "landscape launch",
                "earned starter style selected and retained after app restart in isolated QA user",
                "unearned style choices locked",
                "Pause tap stays paused; Resume works",
                "sound preference retained after APK update in QA user",
                "touch steering",
                "background and foreground return to explicit paused state",
                "owner menu restored with XP4 unchanged"
              ]
            },
            "current_validation": [
              "Ascent16 native landscape launch",
              "touch steering moved craft from y360 to approximately455",
              "Pause and both resume controls",
              "background and foreground return to explicit paused state",
              "idle first QA run collided and failed after19.2seconds; no invulnerability",
              "same-key upgrade retained visible owner XP4; owner menu restored",
              "ephemeral QA profile removed on switch back; only Owner0 remains"
            ]
          },
          "current_validation": [
            "Version17 signed tester package and exported mobile/portal contracts",
            "Phone boss and ammo instructions use touch action names; keyboard copy retained",
            "Actual Android isolated checkpoint: wall contact and steering reversal passed on unchanged physics",
            "Actual Android corridor-warning-combat-side return passed with50health on Ascent16 production; Ascent17 changes only copy and build identity",
            "Ascent17 Android corridor and boss combat rendered with SHOOT instructions; scripted swipes died before escape, retained as a failed run",
            "Same-signature version17 update and owner menu checked separately in release receipt"
          ]
        },
        "current_validation": [
          "Native Android empty-stretch checkpoint: warning at5.52seconds, laser at7.13seconds, staying caused50damage",
          "Normal touch swipe during committed warning escaped with100health",
          "Production scripts identical between QA and tester; only QA wrapper supplies declared empty stretch",
          "Frozen export and source regression checks; same signer as previous tester"
        ]
      },
      "current_validation": [
        "576 real-physics profiles:564 bends and12 straight fallbacks; all keyboard replays clear without wall contact",
        "Delayed touch replay passed all564 admitted bends; native Android horizontal swipes reached boss warning with100health and no observed wall contacts",
        "First portal visit remains straight; later bends use shared physics/render geometry and unchanged30ms total admission budget",
        "Native QA production scripts match except two Ascent18-to19 build-label strings; exact exported contracts checked separately",
        "Frozen exports, negative geometry and momentum checks; same signing certificate as previous tester"
      ]
    },
    "current_validation": [
      "Ordinary Start Run and restart enable portal encounters; menu cleanup disables transient mode",
      "All seven tiers: actual stage scheduling preserves the bank window, then enters a certified straight portal passage",
      "196 portal lifecycle, controls, pause, restart and natural-progression assertions pass",
      "Native Android isolated QA verifies the actual menu button, touch control, natural stage checkpoint and menu return",
      "Same signer as previous tester; exact exported core-flow checks run separately"
    ]
  },
  "windows": {
    "file": "PrismWard_Ascent20_Windows.zip",
    "bytes": 36619469,
    "sha256": "65a98ad403cba710d0593a55385c42a66572dad4c2eed7ca4fae48e25b3b6b17",
    "native": true,
    "owner_desktop_launch_verified": false
  },
  "release_iteration": "PW-ASCENT20-MOBILE-01",
  "previous_downloads": [
    {
      "file": "PrismWard_Ascent12_Android.apk",
      "sha256": "bf825c216ef26f7fde415d3d6fefd5b266e9961d1e859ae0fb91d4e0aa85f0c3"
    },
    {
      "file": "PrismWard_Ascent12_Windows.zip",
      "sha256": "7f4cc01ab82c931f861db00a35fd5aa83c394e2a5f9df2081840aecb53b3ab47"
    },
    {
      "file": "PrismWard_Ascent14_Android.apk",
      "sha256": "f99712606094f8c76608d7dabd19a65eee1ffeee0669561da091d0e713713be8"
    },
    {
      "file": "PrismWard_Ascent14_Windows.zip",
      "sha256": "4916bf7abaaddbc68a64d5e86f5e9f5d02a853dce84281092f0aba71fd994f6d"
    },
    {
      "file": "PrismWard_Ascent16_Android.apk",
      "sha256": "6f3e2c7e0b856e2f1ef3d2a173c917c660d86d014d78d315cf58c7ea7467fd28"
    },
    {
      "file": "PrismWard_Ascent16_Windows.zip",
      "sha256": "b2c75be18e228b5b0ca5ab6708109566e960fe02204bb8156e5291475c227752"
    },
    {
      "file": "PrismWard_Ascent17_Android.apk",
      "sha256": "0576ace0b43466f8684c6a85cf9a40e44127d7cbe53634fc805a8d4b8e56b7cc"
    },
    {
      "file": "PrismWard_Ascent17_Windows.zip",
      "sha256": "40cb03b2ab5500de544c81172ead18dc1f1749a53692ff2da2ff71fdcd49b786"
    },
    {
      "file": "PrismWard_Ascent18_Android.apk",
      "sha256": "197522fa9d8b8f2ea74fa2d24cf40a255d07e87655d138a421c9747ed87c26cf"
    },
    {
      "file": "PrismWard_Ascent18_Windows.zip",
      "sha256": "0ac6c8d80d84eb417eb976b74053a8722feb9506a369902596b7df9bf006080b"
    },
    {
      "file": "PrismWard_Ascent19_Android.apk",
      "sha256": "c46595cb9f1071f9cb526edbb83768fd2f32cfe9bf9b06cc08f6a3a374ed3204"
    },
    {
      "file": "PrismWard_Ascent19_Windows.zip",
      "sha256": "7cefa1b8ccdfabe84aaee11db964334db8259f1e7d2084ee1fe2afc2e370dcf6"
    },
    {
      "file": "PrismWard_v0.4.2-alpha_Windows_Loopback.zip",
      "sha256": "1bf8cd0ec6cd9fa36ccc5395fd679dd737794b18d60d63b3fd44f8583cb5b3dc"
    }
  ]
}
