{
  "note": "Owner delegated a low-end baseline appropriate to 2026-10-05. Selected reference configurations, not measured game support or purchase authorization. Manufacturer specifications are facts; performance goals remain proposed until physical profiling.",
  "selectionDate": "2026-10-05",
  "status": "selected_physical_validation_pending",
  "policy": "Low is the minimum experience to prove; do not raise the baseline silently when a build fails. Exact SKU, physical RAM, OS, graphics API and driver are recorded in M0 probes. RAM expansion is not physical RAM.",
  "devices": [
    {
      "id": "android_low",
      "platform": "Android",
      "model": "Samsung Galaxy A07 4G / LTE",
      "chip": "MediaTek Helio G99",
      "physicalRamGb": 4,
      "storageGb": 128,
      "os": "supported stable Android build on the test unit; record exact version",
      "reason": "Current entry-level phone configuration; choose 4 GB, not the higher-memory or 5G variant.",
      "sources": [
        "https://news.samsung.com/br/feitos-para-durar-samsung-apresenta-galaxy-a17-e-galaxy-a07-no-brasil-com-armazenamento-robusto-recursos-ai-processador-de-alto-desempenho-e-ate-6-anos-de-atualizacoes"
      ],
      "validation": "pending",
      "probe": {
        "status": "pending",
        "reason": "No physical unit exists (ADR-032). The owner's Mac and phone probes are labelled with their own probe and never validate this reference."
      }
    },
    {
      "id": "ios_low",
      "platform": "iOS",
      "model": "iPhone SE (2nd generation, 2020)",
      "chip": "Apple A13 Bionic",
      "os": "iOS 27 supported per Apple list checked 2026-10-05; record exact installed build",
      "reason": "Older lower-end hardware retained on the current supported OS; small screen also exercises touch/UI readability.",
      "sources": [
        "https://support.apple.com/en-ie/111882",
        "https://support.apple.com/guide/iphone/iphone-models-compatible-with-ios-27-iphe3fa5df43/ios"
      ],
      "validation": "pending",
      "probe": {
        "status": "pending",
        "reason": "No physical unit exists (ADR-032). The owner's Mac and phone probes are labelled with their own probe and never validate this reference."
      }
    },
    {
      "id": "windows_low",
      "platform": "Windows",
      "model": "ASUS Vivobook Go 15 E1504TA-class configuration",
      "chip": "Intel N150",
      "gpu": "integrated Intel UHD Graphics; no discrete GPU",
      "physicalRamGb": 8,
      "storage": "SSD; record installed capacity and exact SKU",
      "os": "Windows 11; record build and GPU driver",
      "reason": "Entry-level Windows laptop floor; verify actual N150/8 GB configuration, not a faster model in the same family.",
      "sources": [
        "https://www.asus.com/sk/laptops/for-home/vivobook/asus-vivobook-go-15-e1504g/techspec/"
      ],
      "validation": "pending",
      "probe": {
        "status": "pending",
        "reason": "No physical unit exists (ADR-032). The owner's Mac and phone probes are labelled with their own probe and never validate this reference."
      }
    }
  ],
  "secondaryReferences": [
    "owner M3: development/High comparison, not the Windows Low substitute",
    "representative discrete-GPU desktop: High/Ultra profiling when available"
  ],
  "proposedAcceptance": {
    "proposed": true,
    "note": "Reuses existing Low frame/memory budgets and 30 min playtest duration. Physical native + supported-browser results required; vendor pages do not prove Unity or game feasibility.",
    "quality": "low",
    "fpsTarget": 30,
    "frameBudgetMs": 33.3,
    "processOrTabMemoryMaxMb": 600,
    "sessionMinutes": 30,
    "scenarios": [
      "both_camera_views",
      "camp_and_crowd",
      "boss_telegraphs_and_music",
      "mana_limited_rapid_dash_jump",
      "terrain_collision_and_streaming",
      "touch_gamepad_keyboard_inputs_as_supported",
      "thermal_sustained_frame_pacing",
      "background_resume_and_browser_memory"
    ],
    "evidence": [
      "exact_device_probe",
      "p50_p95_p99_frame_times",
      "draw_calls_particles_heap_gpu_memory",
      "thermal_end_of_session",
      "input_response_and_traversal_clips",
      "native_browser_compatibility_matrix"
    ]
  },
  "ownerTestDevices": [
    {
      "id": "owner_mac",
      "platform": "macOS",
      "model": "Apple M3, 24 GB",
      "use": "Web build in Chrome and the Unity editor; the native macOS test app (High comparison until 2026-10-11) is paused",
      "validatesLowReference": false,
      "decision": "ADR-032",
      "status": "native_app_paused",
      "statusNote": "Owner, 2026-10-11 (ADR-032): macOS and iOS are paused; Chrome on the Mac stays a test target. The measured native-app and Chrome probes below are kept as history.",
      "probes": [
        {
          "target": "macos-app",
          "status": "measured",
          "date": "2026-10-08",
          "task": "M0-05C",
          "evidence": "logs/evidence/M0-05C/probe-macos-app.json",
          "validatesLowReference": false,
          "note": "Native macOS app (Builds/macOS/Zoen.app, Metal). Unity reports the Metal version only as \"Metal\", so class.apiVersion is empty by design; system_profiler reports Metal 4 support. macOS gives Unity no thermal API (thermal.source none); pmset recorded no thermal or performance warning. msaaMax 4 after the M0-05C gatherer fix (the first run asked for 1 sample and read 1).",
          "facts": {
            "probe.platform": "OSXPlayer",
            "probe.device.os": "Mac OS X 26.5.2",
            "probe.gpu.api": "Metal",
            "probe.gpu.maxTextureSize": 16384,
            "probe.gpu.msaaMax": 4,
            "probe.display.maxHz": 60.002,
            "probe.class.formFactor": "native-desktop",
            "probe.class.gpuName": "Apple M3",
            "probe.class.gpuFamily": "apple",
            "probe.class.apiFamily": "metal",
            "probe.class.apiVersion": "",
            "probe.class.memoryGb": 24,
            "probe.class.memorySource": "system-rounded",
            "probe.class.textureFamilies": [
              "astc",
              "bc",
              "etc2"
            ],
            "boot.tier": "High",
            "host.chip": "Apple M3",
            "host.memoryGb": 24,
            "host.macos": "26.5.2 (25F84)"
          }
        },
        {
          "target": "mac-chrome",
          "status": "measured",
          "date": "2026-10-08",
          "task": "M0-05C",
          "evidence": "logs/evidence/M0-05C/probe-mac-chrome.json",
          "validatesLowReference": false,
          "note": "Web build (Builds/Web, WebGL 2 through ANGLE on Metal) in Google Chrome 155 (Playwright, fresh profile, visible window). Browser figures, not hardware: navigator.deviceMemory gives 16 GB on the 24 GB Mac (class.memoryGb is that browser figure), Unity on WebGL reports 1 processor (navigator.hardwareConcurrency 8) and the frozen user-agent OS \"MacOS 10.15.7\" (userAgentData: 26.5.2); no thermal API. The client picked Mid by platform default (the Web ships Low and Mid).",
          "facts": {
            "probe.platform": "WebGLPlayer",
            "probe.device.os": "MacOS 10.15.7",
            "probe.gpu.api": "OpenGLES3",
            "probe.gpu.maxTextureSize": 16384,
            "probe.gpu.msaaMax": 4,
            "probe.display.maxHz": 60,
            "probe.class.formFactor": "browser-desktop",
            "probe.class.gpuName": "Apple M3",
            "probe.class.gpuFamily": "apple",
            "probe.class.apiFamily": "webgl",
            "probe.class.apiVersion": "2.0",
            "probe.class.memoryGb": 16,
            "probe.class.memorySource": "navigator.deviceMemory",
            "probe.class.textureFamilies": [
              "astc",
              "bc",
              "etc2"
            ],
            "probe.web.webgl": "WebGL 2.0 (OpenGL ES 3.0 Chromium)",
            "probe.web.context": "unity",
            "probe.web.renderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)",
            "probe.web.maxSamples": 4,
            "probe.web.deviceMemoryGb": 16,
            "probe.web.cores": 8,
            "boot.tier": "Mid",
            "run.headless": false,
            "userAgentData.fullVersionList": [
              {
                "brand": "Google Chrome",
                "version": "155.0.8059.39"
              }
            ],
            "userAgentData.platformVersion": "26.5.2",
            "host.chip": "Apple M3",
            "host.memoryGb": 24,
            "host.macos": "26.5.2 (25F84)"
          }
        }
      ]
    },
    {
      "id": "owner_android",
      "platform": "Android",
      "model": "nubia NX709S (owner's name \"7s pro\"): QTI SM8475, Adreno (TM) 730, MemTotal 17437304 kB, Android 13 (API 33), as measured by the M0-05D probes",
      "use": "Web build in Chrome and sideloaded APK; touch controls",
      "validatesLowReference": false,
      "decision": "ADR-032",
      "probes": [
        {
          "target": "phone-chrome",
          "status": "measured",
          "date": "2026-10-08",
          "task": "M0-05D",
          "evidence": "logs/evidence/M0-05C/probe-phone-chrome.json",
          "validatesLowReference": false,
          "note": "Web build (Builds/Web from M0-05C, WebGL 2 through ANGLE on OpenGL ES 3.2) in the phone's own Google Chrome 154 over adb CDP (existing profile, visible tab), served from the Mac through adb reverse. Browser figures, not hardware: navigator.deviceMemory gives its 8 GB cap (class.memoryGb is that browser figure; MemTotal 17437304 kB), WebGL reports maxTextureSize 4096 (maxRenderbufferSize 16384), Unity on WebGL reports 1 processor (hardwareConcurrency 8) and deviceType Desktop with mobile true, and the frozen user-agent OS \"Android 10\" (userAgentData 13.0.0; getprop Android 13, API 33). Chrome ran at 60 Hz although the panel lists 60/90/120 Hz modes; no thermal API in the browser (host thermal status 0, battery 38.4 °C). The client picked Mid by platform default (the Web ships Low and Mid).",
          "facts": {
            "probe.platform": "WebGLPlayer",
            "probe.device.os": "Android 10",
            "probe.device.mobile": true,
            "probe.gpu.api": "OpenGLES3",
            "probe.gpu.maxTextureSize": 4096,
            "probe.gpu.msaaMax": 4,
            "probe.display.maxHz": 60,
            "probe.class.formFactor": "browser-phone",
            "probe.class.gpuName": "Adreno (TM) 730",
            "probe.class.gpuFamily": "adreno",
            "probe.class.apiFamily": "webgl",
            "probe.class.apiVersion": "2.0",
            "probe.class.memoryGb": 8,
            "probe.class.memorySource": "navigator.deviceMemory",
            "probe.class.textureFamilies": [
              "astc",
              "etc2"
            ],
            "probe.web.webgl": "WebGL 2.0 (OpenGL ES 3.0 Chromium)",
            "probe.web.context": "unity",
            "probe.web.renderer": "ANGLE (Qualcomm, Adreno (TM) 730, OpenGL ES 3.2)",
            "probe.web.maxSamples": 4,
            "probe.web.maxRenderbufferSize": 16384,
            "probe.web.deviceMemoryGb": 8,
            "probe.web.cores": 8,
            "probe.web.pixelRatio": 3,
            "boot.tier": "Mid",
            "run.headless": false,
            "userAgentData.fullVersionList": [
              {
                "brand": "Google Chrome",
                "version": "154.0.8037.126"
              }
            ],
            "userAgentData.platformVersion": "13.0.0",
            "userAgentData.model": "NX709S",
            "host.props.ro.product.model": "NX709S",
            "host.props.ro.soc.model": "SM8475",
            "host.props.ro.build.version.release": "13",
            "host.props.ro.build.version.sdk": "33",
            "host.memTotalKb": 17437304,
            "host.chrome": "154.0.8037.126"
          }
        },
        {
          "target": "android-apk",
          "status": "measured",
          "date": "2026-10-08",
          "task": "M0-05E",
          "evidence": "logs/evidence/M0-05C/probe-android-apk.json",
          "validatesLowReference": false,
          "note": "Native APK (Builds/Android/zoen.apk rebuilt in M0-05E, URP on Vulkan 1.1 on the Adreno 730), installed and started over adb. The probe arrived as ZOEN_PROBE_PART 1/2 and 2/2 (at most 800 bytes each, logcat excerpt logs/evidence/M0-05E/apk-logcat-probe-parts.txt) after the one-line form was cut at 1023 bytes in M0-05D. Native figures: SystemInfo.systemMemorySize 17028 MB, rounded up to class.memoryGb 18 (MemTotal 17437304 kB); max texture 16384 (the browser got 4096); ASTC, BC and ETC2 all supported (ASTC preferred); the panel ran at 60 Hz with 90/120 Hz modes listed (maxHz 120); PowerManager thermal status 0 with headroom 0.571 (10 s forecast). device.cpuMhz is Unity's own figure and is not used. The client picked Mid from the cached startup benchmark (fps target 30).",
          "facts": {
            "probe.platform": "Android",
            "probe.device.os": "Android OS 13 / API-33 (TKQ1.221013.002/eng.nubia.20241207.182340)",
            "probe.device.mobile": true,
            "probe.device.soc": "SM8475",
            "probe.device.memoryMb": 17028,
            "probe.gpu.api": "Vulkan",
            "probe.gpu.version": "Vulkan 1.1.0 [512.615.0 (0x80267000)]",
            "probe.gpu.maxTextureSize": 16384,
            "probe.gpu.msaaMax": 4,
            "probe.display.hz": 60,
            "probe.display.maxHz": 120,
            "probe.thermal.source": "android",
            "probe.thermal.status": 0,
            "probe.thermal.headroom": 0.571,
            "probe.class.formFactor": "native-phone",
            "probe.class.gpuName": "Adreno (TM) 730",
            "probe.class.gpuFamily": "adreno",
            "probe.class.apiFamily": "vulkan",
            "probe.class.apiVersion": "1.1",
            "probe.class.memoryGb": 18,
            "probe.class.memorySource": "system-rounded",
            "probe.class.textureFamilies": [
              "astc",
              "bc",
              "etc2"
            ],
            "boot.tier": "Mid",
            "boot.tierSource": "BenchmarkCached",
            "boot.graphicsApi": "Vulkan",
            "boot.fpsTarget": 30,
            "run.installed": true,
            "host.props.ro.product.model": "NX709S",
            "host.props.ro.soc.model": "SM8475",
            "host.props.ro.build.version.release": "13",
            "host.props.ro.build.version.sdk": "33",
            "host.memTotalKb": 17437304,
            "host.displayModes": [
              "1080x2400@90",
              "1080x2400@120",
              "1080x2400@60"
            ]
          }
        }
      ]
    },
    {
      "id": "owner_windows",
      "platform": "Windows",
      "model": "unknown: not yet probed",
      "use": "Windows test player (Mono x86_64, built on the Mac) run by the owner with the WIN-01 smoke kit; High view and keyboard/mouse feel; builds the zoen-sim DLL (Rust + Visual Studio Build Tools)",
      "validatesLowReference": false,
      "decision": "ADR-032",
      "status": "unprobed",
      "statusNote": "Owner, 2026-10-11: \"I have a Windows PC\". Agents cannot reach it; its CPU, GPU, RAM and OS are recorded by the WIN-01 probe, never assumed."
    }
  ],
  "probe": {
    "note": "M0-05 capability probe (ADR-032). The client logs one ZOEN_PROBE {json} line at boot (Android: ZOEN_PROBE_PART lines, see partNote) (engine-free model, classifier and writer: packages/core-cs/Zoen.Core/Devices). fields apply to every run, webFields to browser runs (platform WebGLPlayer). Types: string, int, number, number? (null allowed), bool, string[]. Adding a field keeps schemaVersion; renaming or removing one bumps it.",
    "line": "ZOEN_PROBE",
    "partLine": "ZOEN_PROBE_PART",
    "androidLineBytes": 800,
    "partNote": "M0-05E: Unity's Android player cuts a logcat entry at 1023 bytes (measured in M0-05D, logs/evidence/M0-05D/apk-logcat-probe-line.txt), so on Android the JSON is logged as numbered ZOEN_PROBE_PART i/n chunk lines of at most androidLineBytes UTF-8 bytes each (headroom under the cut; never split inside a character or next to whitespace) without a stack trace. macOS and the Web keep the one ZOEN_PROBE line. ProbeJson.Lines/Join (core) and probeFromLines (tools/unity/probe-contract.mjs) split and join them; a missing part is an error.",
    "schemaVersion": 1,
    "targets": [
      "macos-app",
      "mac-chrome",
      "phone-chrome",
      "android-apk"
    ],
    "ownerResults": "macos-app: measured 2026-10-08 (M0-05C); mac-chrome: measured 2026-10-08 (M0-05C); phone-chrome: measured 2026-10-08 (M0-05D); android-apk: measured 2026-10-08 (M0-05E, from ZOEN_PROBE_PART lines after the one-line form was cut at 1023 bytes in M0-05D). Records: ownerTestDevices[].probes, checked against their evidence files by the device-probes data test; every probe-<target>.json and the merged table are in logs/evidence/M0-05C/ (probe-summary.txt). Owner devices never validate a Low reference.",
    "fields": {
      "schema": "int",
      "platform": "string",
      "unity": "string",
      "device.model": "string",
      "device.type": "string",
      "device.mobile": "bool",
      "device.os": "string",
      "device.cpu": "string",
      "device.cores": "int",
      "device.memoryMb": "int",
      "device.soc": "string",
      "gpu.name": "string",
      "gpu.vendor": "string",
      "gpu.api": "string",
      "gpu.version": "string",
      "gpu.memoryMb": "int",
      "gpu.shaderLevel": "int",
      "gpu.maxTextureSize": "int",
      "gpu.renderTargets": "int",
      "gpu.compute": "bool",
      "gpu.instancing": "bool",
      "gpu.msaaMax": "int",
      "gpu.hiddenSurfaceRemoval": "bool",
      "gpu.pipeline": "string",
      "textures.astc": "bool",
      "textures.etc2": "bool",
      "textures.dxt": "bool",
      "textures.bc7": "bool",
      "renderTargets.hdr": "bool",
      "renderTargets.argbHalf": "bool",
      "renderTargets.rgb111110": "bool",
      "display.width": "int",
      "display.height": "int",
      "display.dpi": "number",
      "display.hz": "number",
      "display.maxHz": "number",
      "display.hdrOutput": "bool",
      "thermal.source": "string",
      "thermal.status": "int",
      "thermal.headroom": "number?",
      "class.formFactor": "string",
      "class.gpuFamily": "string",
      "class.gpuName": "string",
      "class.apiFamily": "string",
      "class.apiVersion": "string",
      "class.textureFamily": "string",
      "class.textureFamilies": "string[]",
      "class.memoryGb": "number",
      "class.memorySource": "string"
    },
    "webFields": {
      "web.webgl": "string",
      "web.glsl": "string",
      "web.renderer": "string",
      "web.maxTextureSize": "int",
      "web.maxSamples": "int",
      "web.extensions": "string[]",
      "web.deviceMemoryGb": "number",
      "web.cores": "int",
      "web.pixelRatio": "number",
      "web.context": "string"
    }
  }
}
