{
  "label": "mac-chrome",
  "finished": "2026-10-08T05:10:43.769Z",
  "gmSend": null,
  "gmOff": false,
  "graphicsApi": "OpenGLES3",
  "graphicsVersion": "OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))",
  "consoleErrors": 0,
  "consoleWarnings": 107,
  "checkFailures": 0,
  "pass": true,
  "results": [
    {
      "case": "default",
      "url": "http://localhost:4350/",
      "expectTier": "Mid",
      "bootMs": 1758,
      "boot": {
        "product": "Zoen",
        "version": "0.1.0",
        "unity": "6000.3.25f1",
        "platform": "WebGLPlayer",
        "graphicsApi": "OpenGLES3",
        "graphicsVersion": "OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))",
        "gpu": "ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)",
        "device": "Chrome 155.0.0.0",
        "os": "MacOS 10.15.7",
        "systemMemoryMb": 109,
        "screenWidth": 960,
        "screenHeight": 600,
        "tier": "Mid",
        "tiers": [
          "Low",
          "Mid"
        ],
        "tierRequest": "",
        "tierRefused": "",
        "tierSource": "PlatformDefault",
        "capKey": "web",
        "cycle": [
          "Low",
          "Mid"
        ],
        "ultraGate": "none",
        "benchmark": "off",
        "deviceMemoryGb": 16,
        "logicalCores": 8,
        "displayHz": 60,
        "fpsTarget": 30,
        "targetFrameRate": 30,
        "vSyncCount": 0
      },
      "fps": "tier=Mid api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=35.00 maxMs=35.00 frames=240 logErrors=0 logWarnings=0\n",
      "webgl": {
        "webgl2": true,
        "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)",
        "renderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)"
      },
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36",
      "screenshot": "logs/evidence/M0-12H/web-mac-chrome-default.png",
      "consoleErrors": [],
      "consoleWarnings": [
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "Manual synchronization of Unity Application.persistentDataPath via JS_FileSystem_Sync() is deprecated and will be later removed in a future Unity version. The persistent data directory will be automatically synchronized instead on file modification. Pass config.autoSyncPersistentDataPath = true; to configuration in createUnityInstance() to opt in to the new behavior.",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio"
      ],
      "checkFailures": [],
      "gm": [
        "panel=on buttons=15\n"
      ],
      "sky": "phase=day clock=13:24 weather=clear (auto) speed=x1 tier=Mid particles=0 none fog=0.0098\n",
      "zoenLines": [
        "ZOEN_BOOT {\"product\":\"Zoen\",\"version\":\"0.1.0\",\"unity\":\"6000.3.25f1\",\"platform\":\"WebGLPlayer\",\"graphicsApi\":\"OpenGLES3\",\"graphicsVersion\":\"OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))\",\"gpu\":\"ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)\",\"device\":\"Chrome 155.0.0.0\",\"os\":\"MacOS 10.15.7\",\"systemMemoryMb\":109,\"screenWidth\":960,\"screenHeight\":600,\"tier\":\"Mid\",\"tiers\":[\"Low\",\"Mid\"],\"tierRequest\":\"\",\"tierRefused\":\"\",\"tierSource\":\"PlatformDefault\",\"capKey\":\"web\",\"cycle\":[\"Low\",\"Mid\"],\"ultraGate\":\"none\",\"benchmark\":\"off\",\"deviceMemoryGb\":16.0,\"logicalCores\":8,\"displayHz\":60.0,\"fpsTarget\":30,\"targetFrameRate\":30,\"vSyncCount\":0}\n",
        "ZOEN_GM panel=on buttons=15\n",
        "ZOEN_SKY phase=day clock=13:24 weather=clear (auto) speed=x1 tier=Mid particles=0 none fog=0.0098\n",
        "ZOEN_FPS tier=Mid api=OpenGLES3 target=30 fps=30.0 avgMs=33.34 p50Ms=33.00 p95Ms=34.00 p99Ms=34.00 maxMs=35.00 frames=151 logErrors=0 logWarnings=0\n",
        "ZOEN_FPS tier=Mid api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=35.00 maxMs=35.00 frames=240 logErrors=0 logWarnings=0\n"
      ],
      "pass": true
    },
    {
      "case": "low",
      "url": "http://localhost:4350/?tier=low",
      "expectTier": "Low",
      "bootMs": 1444,
      "boot": {
        "product": "Zoen",
        "version": "0.1.0",
        "unity": "6000.3.25f1",
        "platform": "WebGLPlayer",
        "graphicsApi": "OpenGLES3",
        "graphicsVersion": "OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))",
        "gpu": "ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)",
        "device": "Chrome 155.0.0.0",
        "os": "MacOS 10.15.7",
        "systemMemoryMb": 109,
        "screenWidth": 960,
        "screenHeight": 600,
        "tier": "Low",
        "tiers": [
          "Low",
          "Mid"
        ],
        "tierRequest": "low",
        "tierRefused": "",
        "tierSource": "Launch",
        "capKey": "web",
        "cycle": [
          "Low",
          "Mid"
        ],
        "ultraGate": "none",
        "benchmark": "off",
        "deviceMemoryGb": 16,
        "logicalCores": 8,
        "displayHz": 60,
        "fpsTarget": 30,
        "targetFrameRate": 30,
        "vSyncCount": 0
      },
      "fps": "tier=Low api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=35.00 maxMs=37.00 frames=240 logErrors=0 logWarnings=0\n",
      "webgl": {
        "webgl2": true,
        "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)",
        "renderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)"
      },
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36",
      "screenshot": "logs/evidence/M0-12H/web-mac-chrome-low.png",
      "consoleErrors": [],
      "consoleWarnings": [
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "Manual synchronization of Unity Application.persistentDataPath via JS_FileSystem_Sync() is deprecated and will be later removed in a future Unity version. The persistent data directory will be automatically synchronized instead on file modification. Pass config.autoSyncPersistentDataPath = true; to configuration in createUnityInstance() to opt in to the new behavior.",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio"
      ],
      "checkFailures": [],
      "gm": [
        "panel=on buttons=15\n"
      ],
      "sky": "phase=day clock=13:24 weather=clear (auto) speed=x1 tier=Low particles=0 none fog=0.0098\n",
      "zoenLines": [
        "ZOEN_BOOT {\"product\":\"Zoen\",\"version\":\"0.1.0\",\"unity\":\"6000.3.25f1\",\"platform\":\"WebGLPlayer\",\"graphicsApi\":\"OpenGLES3\",\"graphicsVersion\":\"OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))\",\"gpu\":\"ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)\",\"device\":\"Chrome 155.0.0.0\",\"os\":\"MacOS 10.15.7\",\"systemMemoryMb\":109,\"screenWidth\":960,\"screenHeight\":600,\"tier\":\"Low\",\"tiers\":[\"Low\",\"Mid\"],\"tierRequest\":\"low\",\"tierRefused\":\"\",\"tierSource\":\"Launch\",\"capKey\":\"web\",\"cycle\":[\"Low\",\"Mid\"],\"ultraGate\":\"none\",\"benchmark\":\"off\",\"deviceMemoryGb\":16.0,\"logicalCores\":8,\"displayHz\":60.0,\"fpsTarget\":30,\"targetFrameRate\":30,\"vSyncCount\":0}\n",
        "ZOEN_GM panel=on buttons=15\n",
        "ZOEN_SKY phase=day clock=13:24 weather=clear (auto) speed=x1 tier=Low particles=0 none fog=0.0098\n",
        "ZOEN_FPS tier=Low api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=34.00 maxMs=35.00 frames=151 logErrors=0 logWarnings=0\n",
        "ZOEN_FPS tier=Low api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=35.00 maxMs=37.00 frames=240 logErrors=0 logWarnings=0\n"
      ],
      "pass": true
    },
    {
      "case": "ultra-refused",
      "url": "http://localhost:4350/?tier=ultra",
      "expectTier": "Mid",
      "bootMs": 851,
      "boot": {
        "product": "Zoen",
        "version": "0.1.0",
        "unity": "6000.3.25f1",
        "platform": "WebGLPlayer",
        "graphicsApi": "OpenGLES3",
        "graphicsVersion": "OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))",
        "gpu": "ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)",
        "device": "Chrome 155.0.0.0",
        "os": "MacOS 10.15.7",
        "systemMemoryMb": 109,
        "screenWidth": 960,
        "screenHeight": 600,
        "tier": "Mid",
        "tiers": [
          "Low",
          "Mid"
        ],
        "tierRequest": "ultra",
        "tierRefused": "ultra",
        "tierSource": "PlatformDefault",
        "capKey": "web",
        "cycle": [
          "Low",
          "Mid"
        ],
        "ultraGate": "none",
        "benchmark": "off",
        "deviceMemoryGb": 16,
        "logicalCores": 8,
        "displayHz": 60,
        "fpsTarget": 30,
        "targetFrameRate": 30,
        "vSyncCount": 0
      },
      "fps": "tier=Mid api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=35.00 maxMs=35.00 frames=240 logErrors=0 logWarnings=0\n",
      "webgl": {
        "webgl2": true,
        "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)",
        "renderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)"
      },
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36",
      "consoleErrors": [],
      "consoleWarnings": [
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "Manual synchronization of Unity Application.persistentDataPath via JS_FileSystem_Sync() is deprecated and will be later removed in a future Unity version. The persistent data directory will be automatically synchronized instead on file modification. Pass config.autoSyncPersistentDataPath = true; to configuration in createUnityInstance() to opt in to the new behavior.",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio"
      ],
      "checkFailures": [],
      "gm": [
        "panel=on buttons=15\n"
      ],
      "sky": "phase=day clock=13:24 weather=clear (auto) speed=x1 tier=Mid particles=0 none fog=0.0098\n",
      "zoenLines": [
        "ZOEN_BOOT {\"product\":\"Zoen\",\"version\":\"0.1.0\",\"unity\":\"6000.3.25f1\",\"platform\":\"WebGLPlayer\",\"graphicsApi\":\"OpenGLES3\",\"graphicsVersion\":\"OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))\",\"gpu\":\"ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)\",\"device\":\"Chrome 155.0.0.0\",\"os\":\"MacOS 10.15.7\",\"systemMemoryMb\":109,\"screenWidth\":960,\"screenHeight\":600,\"tier\":\"Mid\",\"tiers\":[\"Low\",\"Mid\"],\"tierRequest\":\"ultra\",\"tierRefused\":\"ultra\",\"tierSource\":\"PlatformDefault\",\"capKey\":\"web\",\"cycle\":[\"Low\",\"Mid\"],\"ultraGate\":\"none\",\"benchmark\":\"off\",\"deviceMemoryGb\":16.0,\"logicalCores\":8,\"displayHz\":60.0,\"fpsTarget\":30,\"targetFrameRate\":30,\"vSyncCount\":0}\n",
        "ZOEN_GM panel=on buttons=15\n",
        "ZOEN_SKY phase=day clock=13:24 weather=clear (auto) speed=x1 tier=Mid particles=0 none fog=0.0098\n",
        "ZOEN_FPS tier=Mid api=OpenGLES3 target=30 fps=30.0 avgMs=33.34 p50Ms=33.00 p95Ms=34.00 p99Ms=35.00 maxMs=35.00 frames=151 logErrors=0 logWarnings=0\n",
        "ZOEN_FPS tier=Mid api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=35.00 maxMs=35.00 frames=240 logErrors=0 logWarnings=0\n"
      ],
      "pass": true
    },
    {
      "case": "low-end",
      "url": "http://localhost:4350/",
      "expectTier": "Low",
      "bootMs": 982,
      "boot": {
        "product": "Zoen",
        "version": "0.1.0",
        "unity": "6000.3.25f1",
        "platform": "WebGLPlayer",
        "graphicsApi": "OpenGLES3",
        "graphicsVersion": "OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))",
        "gpu": "ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)",
        "device": "Chrome 155.0.0.0",
        "os": "MacOS 10.15.7",
        "systemMemoryMb": 109,
        "screenWidth": 960,
        "screenHeight": 600,
        "tier": "Low",
        "tiers": [
          "Low",
          "Mid"
        ],
        "tierRequest": "",
        "tierRefused": "",
        "tierSource": "WebLowEnd",
        "capKey": "web",
        "cycle": [
          "Low",
          "Mid"
        ],
        "ultraGate": "none",
        "benchmark": "off",
        "deviceMemoryGb": 2,
        "logicalCores": 8,
        "displayHz": 60,
        "fpsTarget": 30,
        "targetFrameRate": 30,
        "vSyncCount": 0
      },
      "fps": "tier=Low api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=35.00 maxMs=35.00 frames=240 logErrors=0 logWarnings=0\n",
      "webgl": {
        "webgl2": true,
        "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)",
        "renderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)"
      },
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36",
      "consoleErrors": [],
      "consoleWarnings": [
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "WebGL: INVALID_ENUM: getInternalformatParameter: invalid internalformat",
        "Manual synchronization of Unity Application.persistentDataPath via JS_FileSystem_Sync() is deprecated and will be later removed in a future Unity version. The persistent data directory will be automatically synchronized instead on file modification. Pass config.autoSyncPersistentDataPath = true; to configuration in createUnityInstance() to opt in to the new behavior.",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio",
        "The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio"
      ],
      "checkFailures": [],
      "gm": [
        "panel=on buttons=15\n"
      ],
      "sky": "phase=day clock=13:24 weather=clear (auto) speed=x1 tier=Low particles=0 none fog=0.0098\n",
      "zoenLines": [
        "ZOEN_BOOT {\"product\":\"Zoen\",\"version\":\"0.1.0\",\"unity\":\"6000.3.25f1\",\"platform\":\"WebGLPlayer\",\"graphicsApi\":\"OpenGLES3\",\"graphicsVersion\":\"OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))\",\"gpu\":\"ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)\",\"device\":\"Chrome 155.0.0.0\",\"os\":\"MacOS 10.15.7\",\"systemMemoryMb\":109,\"screenWidth\":960,\"screenHeight\":600,\"tier\":\"Low\",\"tiers\":[\"Low\",\"Mid\"],\"tierRequest\":\"\",\"tierRefused\":\"\",\"tierSource\":\"WebLowEnd\",\"capKey\":\"web\",\"cycle\":[\"Low\",\"Mid\"],\"ultraGate\":\"none\",\"benchmark\":\"off\",\"deviceMemoryGb\":2.0,\"logicalCores\":8,\"displayHz\":60.0,\"fpsTarget\":30,\"targetFrameRate\":30,\"vSyncCount\":0}\n",
        "ZOEN_GM panel=on buttons=15\n",
        "ZOEN_SKY phase=day clock=13:24 weather=clear (auto) speed=x1 tier=Low particles=0 none fog=0.0098\n",
        "ZOEN_FPS tier=Low api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=34.00 maxMs=35.00 frames=151 logErrors=0 logWarnings=0\n",
        "ZOEN_FPS tier=Low api=OpenGLES3 target=30 fps=30.0 avgMs=33.33 p50Ms=33.00 p95Ms=34.00 p99Ms=35.00 maxMs=35.00 frames=240 logErrors=0 logWarnings=0\n"
      ],
      "pass": true
    }
  ]
}
