{
  "config": {
    "argv": [
      "/usr/bin/node",
      "/app/node_modules/.bin/playwright",
      "test",
      "--project=ui",
      "--output=/workspace/artifacts/cac5904/us/test-output"
    ],
    "configFile": "/app/playwright.config.ts",
    "rootDir": "/app",
    "failOnFlakyTests": false,
    "forbidOnly": false,
    "fullyParallel": false,
    "globalSetup": null,
    "globalTeardown": null,
    "globalTimeout": 0,
    "grep": {},
    "grepInvert": null,
    "maxFailures": 0,
    "metadata": {
      "actualWorkers": 32
    },
    "preserveOutput": "always",
    "projects": [
      {
        "outputDir": "/workspace/artifacts/cac5904/us/test-output",
        "repeatEach": 1,
        "retries": 2,
        "metadata": {
          "actualWorkers": 32
        },
        "id": "ui",
        "name": "ui",
        "testDir": "/app/tests/ui",
        "testIgnore": [],
        "testMatch": [
          "**/*.spec.ts"
        ],
        "timeout": 30000
      },
      {
        "outputDir": "/workspace/artifacts/cac5904/us/test-output",
        "repeatEach": 1,
        "retries": 2,
        "metadata": {
          "actualWorkers": 32
        },
        "id": "api",
        "name": "api",
        "testDir": "/app/tests/api",
        "testIgnore": [],
        "testMatch": [
          "**/*.spec.ts"
        ],
        "timeout": 30000
      }
    ],
    "filteredProjects": [
      {
        "grep": {},
        "grepInvert": null,
        "outputDir": "/workspace/artifacts/cac5904/us/test-output",
        "repeatEach": 1,
        "retries": 2,
        "metadata": {
          "actualWorkers": 32
        },
        "name": "ui",
        "testDir": "/app/tests/ui",
        "snapshotDir": "/app/tests/ui",
        "testIgnore": [],
        "testMatch": [
          "**/*.spec.ts"
        ],
        "timeout": 30000,
        "use": {
          "browserName": "chromium",
          "baseURL": "http://10.1.105.22",
          "extraHTTPHeaders": {},
          "screenshot": "on",
          "video": "on-first-retry",
          "trace": "on-first-retry"
        },
        "dependencies": [],
        "ignoreSnapshots": false,
        "__projectId": "ui"
      }
    ],
    "quiet": false,
    "reporter": [
      [
        "html",
        {
          "outputFolder": "/workspace/artifacts/cac5904/us/reports/html",
          "open": "never"
        }
      ],
      [
        "json",
        {
          "outputFile": "/workspace/artifacts/cac5904/us/reports/results.json"
        }
      ],
      [
        "list",
        null
      ]
    ],
    "reportSlowTests": {
      "max": 5,
      "threshold": 300000
    },
    "shard": null,
    "tags": [],
    "updateSnapshots": "default",
    "updateSourceMethod": "patch",
    "version": "1.64.1",
    "workers": 32,
    "webServer": null
  },
  "suites": [
    {
      "title": "tests/ui/asset-proxy.spec.ts",
      "file": "tests/ui/asset-proxy.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "s3proxy-backed locations",
          "file": "tests/ui/asset-proxy.spec.ts",
          "line": 13,
          "column": 6,
          "specs": [
            {
              "title": "only GET and HEAD reach the buckets",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 0,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30012,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/asset-proxy.spec.ts",
                            "column": 39,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.fetch: Request context disposed.\nCall log:\n\u001b[2m  - → DELETE http://10.1.105.22/images/__method-probe-does-not-exist.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  15 |     for (const path of [PROBE, '/candidates/sitemap-candidates.xml']) {\n  16 |       for (const method of ['DELETE', 'POST', 'PATCH']) {\n> 17 |         const status = (await request.fetch(path, { method, maxRedirects: 0 })).status();\n     |                                       ^\n  18 |         expect([403, 404, 405], `${method} ${path}: ${status}`).toContain(status);\n  19 |       }\n  20 |     }\n    at /app/tests/ui/asset-proxy.spec.ts:17:39"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:22.961Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/asset-proxy-s3proxy-backed-60339--and-HEAD-reach-the-buckets-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 32,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11253,
                      "error": {
                        "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → DELETE http://10.1.105.22/images/__method-probe-does-not-exist.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → DELETE http://10.1.105.22/images/__method-probe-does-not-exist.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/asset-proxy.spec.ts:17:39",
                        "location": {
                          "file": "/app/tests/ui/asset-proxy.spec.ts",
                          "column": 39,
                          "line": 17
                        },
                        "snippet": "\u001b[0m \u001b[90m 15 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mPROBE\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/candidates/sitemap-candidates.xml'\u001b[39m]) {\n \u001b[90m 16 |\u001b[39m       \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m method \u001b[36mof\u001b[39m [\u001b[32m'DELETE'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'POST'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'PATCH'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m         \u001b[36mconst\u001b[39m status \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mfetch(path\u001b[33m,\u001b[39m { method\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                       \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m         expect([\u001b[35m403\u001b[39m\u001b[33m,\u001b[39m \u001b[35m404\u001b[39m\u001b[33m,\u001b[39m \u001b[35m405\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${method} ${path}: ${status}`\u001b[39m)\u001b[33m.\u001b[39mtoContain(status)\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m       }\n \u001b[90m 20 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/asset-proxy.spec.ts",
                            "column": 39,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → DELETE http://10.1.105.22/images/__method-probe-does-not-exist.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  15 |     for (const path of [PROBE, '/candidates/sitemap-candidates.xml']) {\n  16 |       for (const method of ['DELETE', 'POST', 'PATCH']) {\n> 17 |         const status = (await request.fetch(path, { method, maxRedirects: 0 })).status();\n     |                                       ^\n  18 |         expect([403, 404, 405], `${method} ${path}: ${status}`).toContain(status);\n  19 |       }\n  20 |     }\n    at /app/tests/ui/asset-proxy.spec.ts:17:39"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.567Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/asset-proxy-s3proxy-backed-60339--and-HEAD-reach-the-buckets-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/asset-proxy-s3proxy-backed-60339--and-HEAD-reach-the-buckets-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/asset-proxy.spec.ts",
                        "column": 39,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 69,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → DELETE http://10.1.105.22/images/__method-probe-does-not-exist.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → DELETE http://10.1.105.22/images/__method-probe-does-not-exist.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/asset-proxy.spec.ts:17:39",
                        "location": {
                          "file": "/app/tests/ui/asset-proxy.spec.ts",
                          "column": 39,
                          "line": 17
                        },
                        "snippet": "\u001b[0m \u001b[90m 15 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mPROBE\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/candidates/sitemap-candidates.xml'\u001b[39m]) {\n \u001b[90m 16 |\u001b[39m       \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m method \u001b[36mof\u001b[39m [\u001b[32m'DELETE'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'POST'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'PATCH'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m         \u001b[36mconst\u001b[39m status \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mfetch(path\u001b[33m,\u001b[39m { method\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                       \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m         expect([\u001b[35m403\u001b[39m\u001b[33m,\u001b[39m \u001b[35m404\u001b[39m\u001b[33m,\u001b[39m \u001b[35m405\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${method} ${path}: ${status}`\u001b[39m)\u001b[33m.\u001b[39mtoContain(status)\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m       }\n \u001b[90m 20 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/asset-proxy.spec.ts",
                            "column": 39,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → DELETE http://10.1.105.22/images/__method-probe-does-not-exist.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  15 |     for (const path of [PROBE, '/candidates/sitemap-candidates.xml']) {\n  16 |       for (const method of ['DELETE', 'POST', 'PATCH']) {\n> 17 |         const status = (await request.fetch(path, { method, maxRedirects: 0 })).status();\n     |                                       ^\n  18 |         expect([403, 404, 405], `${method} ${path}: ${status}`).toContain(status);\n  19 |       }\n  20 |     }\n    at /app/tests/ui/asset-proxy.spec.ts:17:39"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.540Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/asset-proxy-s3proxy-backed-60339--and-HEAD-reach-the-buckets-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/asset-proxy.spec.ts",
                        "column": 39,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "8fe200c4754d49e4b8ca-6b3f79259f63edf40618",
              "file": "tests/ui/asset-proxy.spec.ts",
              "line": 14,
              "column": 7
            },
            {
              "title": "encoded query, fragment and percent never reach the bucket",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 90,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 41,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/%3Flist-type=2\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/%3Flist-type=2\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/asset-proxy.spec.ts:31:37",
                        "location": {
                          "file": "/app/tests/ui/asset-proxy.spec.ts",
                          "column": 37,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m       \u001b[32m'/images/%252e%252e/geo/blocks/x.geojson'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 30 |\u001b[39m     ]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m status \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m       expect([\u001b[35m400\u001b[39m\u001b[33m,\u001b[39m \u001b[35m404\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${path}: ${status}`\u001b[39m)\u001b[33m.\u001b[39mtoContain(status)\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     }\n \u001b[90m 34 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/asset-proxy.spec.ts",
                            "column": 37,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/%3Flist-type=2\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  29 |       '/images/%252e%252e/geo/blocks/x.geojson',\n  30 |     ]) {\n> 31 |       const status = (await request.get(path, { maxRedirects: 0 })).status();\n     |                                     ^\n  32 |       expect([400, 404], `${path}: ${status}`).toContain(status);\n  33 |     }\n  34 |   });\n    at /app/tests/ui/asset-proxy.spec.ts:31:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.334Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/asset-proxy-s3proxy-backed-6e191-cent-never-reach-the-bucket-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/asset-proxy.spec.ts",
                        "column": 37,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 104,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 76,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/%3Flist-type=2\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/%3Flist-type=2\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/asset-proxy.spec.ts:31:37",
                        "location": {
                          "file": "/app/tests/ui/asset-proxy.spec.ts",
                          "column": 37,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m       \u001b[32m'/images/%252e%252e/geo/blocks/x.geojson'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 30 |\u001b[39m     ]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m status \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m       expect([\u001b[35m400\u001b[39m\u001b[33m,\u001b[39m \u001b[35m404\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${path}: ${status}`\u001b[39m)\u001b[33m.\u001b[39mtoContain(status)\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     }\n \u001b[90m 34 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/asset-proxy.spec.ts",
                            "column": 37,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/%3Flist-type=2\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  29 |       '/images/%252e%252e/geo/blocks/x.geojson',\n  30 |     ]) {\n> 31 |       const status = (await request.get(path, { maxRedirects: 0 })).status();\n     |                                     ^\n  32 |       expect([400, 404], `${path}: ${status}`).toContain(status);\n  33 |     }\n  34 |   });\n    at /app/tests/ui/asset-proxy.spec.ts:31:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.117Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/asset-proxy-s3proxy-backed-6e191-cent-never-reach-the-bucket-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/asset-proxy-s3proxy-backed-6e191-cent-never-reach-the-bucket-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/asset-proxy.spec.ts",
                        "column": 37,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 129,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/%3Flist-type=2\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/%3Flist-type=2\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/asset-proxy.spec.ts:31:37",
                        "location": {
                          "file": "/app/tests/ui/asset-proxy.spec.ts",
                          "column": 37,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m       \u001b[32m'/images/%252e%252e/geo/blocks/x.geojson'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 30 |\u001b[39m     ]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m status \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m       expect([\u001b[35m400\u001b[39m\u001b[33m,\u001b[39m \u001b[35m404\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${path}: ${status}`\u001b[39m)\u001b[33m.\u001b[39mtoContain(status)\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     }\n \u001b[90m 34 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/asset-proxy.spec.ts",
                            "column": 37,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/%3Flist-type=2\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  29 |       '/images/%252e%252e/geo/blocks/x.geojson',\n  30 |     ]) {\n> 31 |       const status = (await request.get(path, { maxRedirects: 0 })).status();\n     |                                     ^\n  32 |       expect([400, 404], `${path}: ${status}`).toContain(status);\n  33 |     }\n  34 |   });\n    at /app/tests/ui/asset-proxy.spec.ts:31:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.000Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/asset-proxy-s3proxy-backed-6e191-cent-never-reach-the-bucket-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/asset-proxy.spec.ts",
                        "column": 37,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "8fe200c4754d49e4b8ca-d2f480ce199fed888c14",
              "file": "tests/ui/asset-proxy.spec.ts",
              "line": 23,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/auth.spec.ts",
      "file": "tests/ui/auth.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "sign-in and premium sections",
          "file": "tests/ui/auth.spec.ts",
          "line": 48,
          "column": 6,
          "specs": [
            {
              "title": "/auth/whoami returns well-formed JSON",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1,
                      "parallelIndex": 1,
                      "status": "timedOut",
                      "duration": 30020,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:50:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.071Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-facd1-mi-returns-well-formed-JSON-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 35,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 11299,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:50:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:50:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.713Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-facd1-mi-returns-well-formed-JSON-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-facd1-mi-returns-well-formed-JSON-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 72,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 36,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:50:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:50:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.788Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-facd1-mi-returns-well-formed-JSON-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-34adcfbb6e371e5c1571",
              "file": "tests/ui/auth.spec.ts",
              "line": 49,
              "column": 7
            },
            {
              "title": "a forged identity header grants nothing where Authentik is off",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 96,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@elect.info\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:66:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@elect.info\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:66:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.578Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-80e77-hing-where-Authentik-is-off-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 110,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 72,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@elect.info\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:66:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@elect.info\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:66:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.310Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-80e77-hing-where-Authentik-is-off-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-80e77-hing-where-Authentik-is-off-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 133,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@elect.info\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:66:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@elect.info\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:66:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.179Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-80e77-hing-where-Authentik-is-off-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-d16713a710dd32aba362",
              "file": "tests/ui/auth.spec.ts",
              "line": 65,
              "column": 7
            },
            {
              "title": "a forged elect-info-premium group header grants nothing where Authentik is off",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 153,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-info-premium\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-info-premium\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-info-premium\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.036Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-41d16-hing-where-Authentik-is-off-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 168,
                      "parallelIndex": 1,
                      "status": "timedOut",
                      "duration": 30043,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-info-premium\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:09.758Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-41d16-hing-where-Authentik-is-off-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-41d16-hing-where-Authentik-is-off-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 192,
                      "parallelIndex": 1,
                      "status": "timedOut",
                      "duration": 30024,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-info-premium\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:40.370Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-41d16-hing-where-Authentik-is-off-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-8b08522ffb6040767729",
              "file": "tests/ui/auth.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "a forged ei-voter-viewers group header grants nothing where Authentik is off",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 328,
                      "parallelIndex": 1,
                      "status": "timedOut",
                      "duration": 30024,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-voter-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:10.937Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-bd21a-hing-where-Authentik-is-off-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 344,
                      "parallelIndex": 1,
                      "status": "timedOut",
                      "duration": 30056,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-voter-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:41.505Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-bd21a-hing-where-Authentik-is-off-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-bd21a-hing-where-Authentik-is-off-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 439,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 19434,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-voter-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-voter-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-voter-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:12.122Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-bd21a-hing-where-Authentik-is-off-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-331a481ae815f21adbb5",
              "file": "tests/ui/auth.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "a forged ei-donor-viewers group header grants nothing where Authentik is off",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 500,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-donor-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-donor-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-donor-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.224Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2af15-hing-where-Authentik-is-off-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 517,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 65,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-donor-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-donor-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-donor-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:32.924Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2af15-hing-where-Authentik-is-off-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2af15-hing-where-Authentik-is-off-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 531,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-donor-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-donor-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-donor-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.674Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2af15-hing-where-Authentik-is-off-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-627faecc86d75e536556",
              "file": "tests/ui/auth.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "a forged ei-block-viewers group header grants nothing where Authentik is off",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 550,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 34,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-block-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-block-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-block-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.376Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2088c-hing-where-Authentik-is-off-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 568,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 72,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-block-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-block-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-block-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.101Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2088c-hing-where-Authentik-is-off-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2088c-hing-where-Authentik-is-off-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 587,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-block-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-block-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-block-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:35.899Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2088c-hing-where-Authentik-is-off-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-bafaf85fa26bf5a6d3e5",
              "file": "tests/ui/auth.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "a forged elect-news-curators group header grants nothing where Authentik is off",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 602,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-news-curators\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-news-curators\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-news-curators\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:36.635Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-aec11-hing-where-Authentik-is-off-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 621,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 65,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-news-curators\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-news-curators\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-news-curators\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.344Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-aec11-hing-where-Authentik-is-off-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-aec11-hing-where-Authentik-is-off-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 636,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-news-curators\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-news-curators\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: elect-news-curators\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.194Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-aec11-hing-where-Authentik-is-off-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-05316fe4e949eabf6cf3",
              "file": "tests/ui/auth.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "a forged ei-preview-viewers group header grants nothing where Authentik is off",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 650,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-preview-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-preview-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-preview-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:38.857Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-10e01-hing-where-Authentik-is-off-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 668,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 56,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-preview-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-preview-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-preview-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:39.555Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-10e01-hing-where-Authentik-is-off-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-10e01-hing-where-Authentik-is-off-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 688,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-preview-viewers\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-preview-viewers\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: someone@example.com\u001b[22m\n\u001b[2m    - X-authentik-groups: ei-preview-viewers\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:74:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.339Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-10e01-hing-where-Authentik-is-off-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-b1c4d8cb6ecdc1f6fabd",
              "file": "tests/ui/auth.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "/voters/ answers 200 for the test identity, or asks a signed-out one to sign in",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 702,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 171,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:41.011Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2d79b-a-signed-out-one-to-sign-in-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2d79b-a-signed-out-one-to-sign-in-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 719,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 292,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:42.003Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2d79b-a-signed-out-one-to-sign-in-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2d79b-a-signed-out-one-to-sign-in-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2d79b-a-signed-out-one-to-sign-in-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2d79b-a-signed-out-one-to-sign-in-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 745,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 147,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:43.095Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2d79b-a-signed-out-one-to-sign-in-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-2d79b-a-signed-out-one-to-sign-in-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-ecfc380161587e071822",
              "file": "tests/ui/auth.spec.ts",
              "line": 83,
              "column": 9
            },
            {
              "title": "/individuals/ answers 200 for the test identity, or asks a signed-out one to sign in",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 764,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 158,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:44.097Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-103b8-a-signed-out-one-to-sign-in-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-103b8-a-signed-out-one-to-sign-in-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 782,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 301,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:45.098Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-103b8-a-signed-out-one-to-sign-in-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-103b8-a-signed-out-one-to-sign-in-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-103b8-a-signed-out-one-to-sign-in-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-103b8-a-signed-out-one-to-sign-in-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 806,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 142,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:46.161Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-103b8-a-signed-out-one-to-sign-in-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-103b8-a-signed-out-one-to-sign-in-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-e049855426fc2b1a02d0",
              "file": "tests/ui/auth.spec.ts",
              "line": 83,
              "column": 9
            },
            {
              "title": "/blocks/ answers 200 for the test identity, or asks a signed-out one to sign in",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 823,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 142,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:47.097Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-54faa-a-signed-out-one-to-sign-in-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-54faa-a-signed-out-one-to-sign-in-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 836,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 233,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:47.953Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-54faa-a-signed-out-one-to-sign-in-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-54faa-a-signed-out-one-to-sign-in-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-54faa-a-signed-out-one-to-sign-in-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-54faa-a-signed-out-one-to-sign-in-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 854,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 164,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:84:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:48.931Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-54faa-a-signed-out-one-to-sign-in-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-54faa-a-signed-out-one-to-sign-in-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-04219c7aa1a60beafa93",
              "file": "tests/ui/auth.spec.ts",
              "line": 83,
              "column": 9
            },
            {
              "title": "/voters/ is the voter search page",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 871,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:98:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:98:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:49.874Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-ff81e-rs-is-the-voter-search-page-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-ff81e-rs-is-the-voter-search-page-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 882,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 231,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:98:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:98:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:50.739Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-ff81e-rs-is-the-voter-search-page-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-ff81e-rs-is-the-voter-search-page-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-ff81e-rs-is-the-voter-search-page-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-ff81e-rs-is-the-voter-search-page-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 900,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 142,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:98:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:98:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:51.700Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-ff81e-rs-is-the-voter-search-page-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-ff81e-rs-is-the-voter-search-page-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-24cc7566a4f160062737",
              "file": "tests/ui/auth.spec.ts",
              "line": 97,
              "column": 7
            },
            {
              "title": "the premium notice page is not directly reachable",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 913,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 153,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/premium-required.html\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/premium-required.html\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/premium-required.html\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/premium-required.html\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:108:33",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 33,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m\n \u001b[90m 107 |\u001b[39m   test(\u001b[32m'the premium notice page is not directly reachable'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/premium-required.html'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 33,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/premium-required.html\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/premium-required.html\", waiting until \"load\"\u001b[22m\n\n\n  106 |\n  107 |   test('the premium notice page is not directly reachable', async ({ page }) => {\n> 108 |     const response = await page.goto('/premium-required.html');\n      |                                 ^\n  109 |     expect(response?.status()).toBe(404);\n  110 |   });\n  111 |\n    at /app/tests/ui/auth.spec.ts:108:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:52.713Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-4eed4-e-is-not-directly-reachable-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-4eed4-e-is-not-directly-reachable-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 33,
                        "line": 108
                      }
                    },
                    {
                      "workerIndex": 924,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 213,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/premium-required.html\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/premium-required.html\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/premium-required.html\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/premium-required.html\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:108:33",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 33,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m\n \u001b[90m 107 |\u001b[39m   test(\u001b[32m'the premium notice page is not directly reachable'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/premium-required.html'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 33,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/premium-required.html\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/premium-required.html\", waiting until \"load\"\u001b[22m\n\n\n  106 |\n  107 |   test('the premium notice page is not directly reachable', async ({ page }) => {\n> 108 |     const response = await page.goto('/premium-required.html');\n      |                                 ^\n  109 |     expect(response?.status()).toBe(404);\n  110 |   });\n  111 |\n    at /app/tests/ui/auth.spec.ts:108:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:53.592Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-4eed4-e-is-not-directly-reachable-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-4eed4-e-is-not-directly-reachable-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-4eed4-e-is-not-directly-reachable-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-4eed4-e-is-not-directly-reachable-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 33,
                        "line": 108
                      }
                    },
                    {
                      "workerIndex": 939,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 153,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/premium-required.html\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/premium-required.html\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/premium-required.html\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/premium-required.html\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:108:33",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 33,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m\n \u001b[90m 107 |\u001b[39m   test(\u001b[32m'the premium notice page is not directly reachable'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/premium-required.html'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 33,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/premium-required.html\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/premium-required.html\", waiting until \"load\"\u001b[22m\n\n\n  106 |\n  107 |   test('the premium notice page is not directly reachable', async ({ page }) => {\n> 108 |     const response = await page.goto('/premium-required.html');\n      |                                 ^\n  109 |     expect(response?.status()).toBe(404);\n  110 |   });\n  111 |\n    at /app/tests/ui/auth.spec.ts:108:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:54.499Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-4eed4-e-is-not-directly-reachable-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-4eed4-e-is-not-directly-reachable-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 33,
                        "line": 108
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-752f790273574f158ca2",
              "file": "tests/ui/auth.spec.ts",
              "line": 107,
              "column": 7
            },
            {
              "title": "homepage premium cards follow the account",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 950,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 136,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:113:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:113:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:55.367Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b27b9-um-cards-follow-the-account-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b27b9-um-cards-follow-the-account-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 960,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 216,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:113:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:113:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:56.215Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b27b9-um-cards-follow-the-account-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b27b9-um-cards-follow-the-account-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b27b9-um-cards-follow-the-account-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b27b9-um-cards-follow-the-account-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 970,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 122,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:113:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:113:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:57.105Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b27b9-um-cards-follow-the-account-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b27b9-um-cards-follow-the-account-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-25a6d4e0f106df1269de",
              "file": "tests/ui/auth.spec.ts",
              "line": 112,
              "column": 7
            },
            {
              "title": "account slot shows the signed-in email where Authentik is on",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 980,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 124,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:131:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:131:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:57.897Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b2077-email-where-Authentik-is-on-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b2077-email-where-Authentik-is-on-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 987,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 196,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:131:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:131:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:58.643Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b2077-email-where-Authentik-is-on-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b2077-email-where-Authentik-is-on-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b2077-email-where-Authentik-is-on-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b2077-email-where-Authentik-is-on-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 993,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 111,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:131:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:131:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:59.513Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b2077-email-where-Authentik-is-on-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-and-premium-s-b2077-email-where-Authentik-is-on-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-1e049c825edca23851b9",
              "file": "tests/ui/auth.spec.ts",
              "line": 130,
              "column": 7
            }
          ]
        },
        {
          "title": "sign-in panel",
          "file": "tests/ui/auth.spec.ts",
          "line": 151,
          "column": 6,
          "specs": [
            {
              "title": "/signin/google redirects to the Google flow, or falls back to the sign-in page",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 999,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 19,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/google?rd=%2Fvoters%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/google?rd=%2Fvoters%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:153:31",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 31,
                          "line": 153
                        },
                        "snippet": "\u001b[0m \u001b[90m 151 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'sign-in panel'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 152 |\u001b[39m   test(\u001b[32m'/signin/google redirects to the Google flow, or falls back to the sign-in page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 153 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/signin/google?rd=%2Fvoters%2F'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 154 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m302\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 155 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'cache-control'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'no-store'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m     \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 31,
                            "line": 153
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/google?rd=%2Fvoters%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  151 | test.describe('sign-in panel', () => {\n  152 |   test('/signin/google redirects to the Google flow, or falls back to the sign-in page', async ({ request }) => {\n> 153 |     const res = await request.get('/signin/google?rd=%2Fvoters%2F', { maxRedirects: 0 });\n      |                               ^\n  154 |     expect(res.status()).toBe(302);\n  155 |     expect(res.headers()['cache-control']).toContain('no-store');\n  156 |     const location = res.headers()['location'] || '';\n    at /app/tests/ui/auth.spec.ts:153:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:00.254Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--d582d-ls-back-to-the-sign-in-page-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 31,
                        "line": 153
                      }
                    },
                    {
                      "workerIndex": 1005,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 41,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/google?rd=%2Fvoters%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/google?rd=%2Fvoters%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:153:31",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 31,
                          "line": 153
                        },
                        "snippet": "\u001b[0m \u001b[90m 151 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'sign-in panel'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 152 |\u001b[39m   test(\u001b[32m'/signin/google redirects to the Google flow, or falls back to the sign-in page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 153 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/signin/google?rd=%2Fvoters%2F'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 154 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m302\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 155 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'cache-control'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'no-store'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m     \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 31,
                            "line": 153
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/google?rd=%2Fvoters%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  151 | test.describe('sign-in panel', () => {\n  152 |   test('/signin/google redirects to the Google flow, or falls back to the sign-in page', async ({ request }) => {\n> 153 |     const res = await request.get('/signin/google?rd=%2Fvoters%2F', { maxRedirects: 0 });\n      |                               ^\n  154 |     expect(res.status()).toBe(302);\n  155 |     expect(res.headers()['cache-control']).toContain('no-store');\n  156 |     const location = res.headers()['location'] || '';\n    at /app/tests/ui/auth.spec.ts:153:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:00.777Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--d582d-ls-back-to-the-sign-in-page-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--d582d-ls-back-to-the-sign-in-page-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 31,
                        "line": 153
                      }
                    },
                    {
                      "workerIndex": 1009,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/google?rd=%2Fvoters%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/google?rd=%2Fvoters%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:153:31",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 31,
                          "line": 153
                        },
                        "snippet": "\u001b[0m \u001b[90m 151 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'sign-in panel'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 152 |\u001b[39m   test(\u001b[32m'/signin/google redirects to the Google flow, or falls back to the sign-in page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 153 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/signin/google?rd=%2Fvoters%2F'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 154 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m302\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 155 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'cache-control'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'no-store'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m     \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 31,
                            "line": 153
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/google?rd=%2Fvoters%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  151 | test.describe('sign-in panel', () => {\n  152 |   test('/signin/google redirects to the Google flow, or falls back to the sign-in page', async ({ request }) => {\n> 153 |     const res = await request.get('/signin/google?rd=%2Fvoters%2F', { maxRedirects: 0 });\n      |                               ^\n  154 |     expect(res.status()).toBe(302);\n  155 |     expect(res.headers()['cache-control']).toContain('no-store');\n  156 |     const location = res.headers()['location'] || '';\n    at /app/tests/ui/auth.spec.ts:153:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:01.346Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--d582d-ls-back-to-the-sign-in-page-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 31,
                        "line": 153
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-8ef04c02a5acbc6b0869",
              "file": "tests/ui/auth.spec.ts",
              "line": 152,
              "column": 7
            },
            {
              "title": "/signin/register goes to the sign-up flow, or falls back to the sign-in page",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1011,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 18,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/register?rd=%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/register?rd=%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:170:31",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 31,
                          "line": 170
                        },
                        "snippet": "\u001b[0m \u001b[90m 168 |\u001b[39m\n \u001b[90m 169 |\u001b[39m   test(\u001b[32m'/signin/register goes to the sign-up flow, or falls back to the sign-in page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 170 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/signin/register?rd=%2F'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 171 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m302\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 172 |\u001b[39m     \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 173 |\u001b[39m     \u001b[36mif\u001b[39m (location\u001b[33m.\u001b[39mstartsWith(\u001b[32m'https://auth.elect.info/'\u001b[39m)) {\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 31,
                            "line": 170
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/register?rd=%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  168 |\n  169 |   test('/signin/register goes to the sign-up flow, or falls back to the sign-in page', async ({ request }) => {\n> 170 |     const res = await request.get('/signin/register?rd=%2F', { maxRedirects: 0 });\n      |                               ^\n  171 |     expect(res.status()).toBe(302);\n  172 |     const location = res.headers()['location'] || '';\n  173 |     if (location.startsWith('https://auth.elect.info/')) {\n    at /app/tests/ui/auth.spec.ts:170:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:01.882Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--fbc7e-ls-back-to-the-sign-in-page-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 31,
                        "line": 170
                      }
                    },
                    {
                      "workerIndex": 1016,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 45,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/register?rd=%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/register?rd=%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:170:31",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 31,
                          "line": 170
                        },
                        "snippet": "\u001b[0m \u001b[90m 168 |\u001b[39m\n \u001b[90m 169 |\u001b[39m   test(\u001b[32m'/signin/register goes to the sign-up flow, or falls back to the sign-in page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 170 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/signin/register?rd=%2F'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 171 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m302\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 172 |\u001b[39m     \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 173 |\u001b[39m     \u001b[36mif\u001b[39m (location\u001b[33m.\u001b[39mstartsWith(\u001b[32m'https://auth.elect.info/'\u001b[39m)) {\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 31,
                            "line": 170
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/register?rd=%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  168 |\n  169 |   test('/signin/register goes to the sign-up flow, or falls back to the sign-in page', async ({ request }) => {\n> 170 |     const res = await request.get('/signin/register?rd=%2F', { maxRedirects: 0 });\n      |                               ^\n  171 |     expect(res.status()).toBe(302);\n  172 |     const location = res.headers()['location'] || '';\n  173 |     if (location.startsWith('https://auth.elect.info/')) {\n    at /app/tests/ui/auth.spec.ts:170:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:02.430Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--fbc7e-ls-back-to-the-sign-in-page-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--fbc7e-ls-back-to-the-sign-in-page-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 31,
                        "line": 170
                      }
                    },
                    {
                      "workerIndex": 1021,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 20,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/register?rd=%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/register?rd=%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:170:31",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 31,
                          "line": 170
                        },
                        "snippet": "\u001b[0m \u001b[90m 168 |\u001b[39m\n \u001b[90m 169 |\u001b[39m   test(\u001b[32m'/signin/register goes to the sign-up flow, or falls back to the sign-in page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 170 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/signin/register?rd=%2F'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 171 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m302\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 172 |\u001b[39m     \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 173 |\u001b[39m     \u001b[36mif\u001b[39m (location\u001b[33m.\u001b[39mstartsWith(\u001b[32m'https://auth.elect.info/'\u001b[39m)) {\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 31,
                            "line": 170
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/signin/register?rd=%2F\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  168 |\n  169 |   test('/signin/register goes to the sign-up flow, or falls back to the sign-in page', async ({ request }) => {\n> 170 |     const res = await request.get('/signin/register?rd=%2F', { maxRedirects: 0 });\n      |                               ^\n  171 |     expect(res.status()).toBe(302);\n  172 |     const location = res.headers()['location'] || '';\n  173 |     if (location.startsWith('https://auth.elect.info/')) {\n    at /app/tests/ui/auth.spec.ts:170:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:03.041Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--fbc7e-ls-back-to-the-sign-in-page-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 31,
                        "line": 170
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-93dbd48805f61db758bc",
              "file": "tests/ui/auth.spec.ts",
              "line": 169,
              "column": 7
            },
            {
              "title": "the shared identity bar is served and revalidated",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1023,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 20,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/identity/identity-bar.js\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/identity/identity-bar.js\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:182:33",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 33,
                          "line": 182
                        },
                        "snippet": "\u001b[0m \u001b[90m 180 |\u001b[39m   test(\u001b[32m'the shared identity bar is served and revalidated'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 181 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m asset \u001b[36mof\u001b[39m [\u001b[32m'/identity/identity-bar.js'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/identity/identity-bar.css'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 182 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(asset)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 183 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m asset)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 184 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'cache-control'\u001b[39m] \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m.\u001b[39mtoContain(\u001b[32m'no-cache'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 185 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 33,
                            "line": 182
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/identity/identity-bar.js\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  180 |   test('the shared identity bar is served and revalidated', async ({ request }) => {\n  181 |     for (const asset of ['/identity/identity-bar.js', '/identity/identity-bar.css']) {\n> 182 |       const res = await request.get(asset);\n      |                                 ^\n  183 |       expect(res.status(), asset).toBe(200);\n  184 |       expect(res.headers()['cache-control'] || '').toContain('no-cache');\n  185 |     }\n    at /app/tests/ui/auth.spec.ts:182:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:03.613Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-the-sha-1ab45-r-is-served-and-revalidated-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 33,
                        "line": 182
                      }
                    },
                    {
                      "workerIndex": 1027,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 43,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/identity/identity-bar.js\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/identity/identity-bar.js\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:182:33",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 33,
                          "line": 182
                        },
                        "snippet": "\u001b[0m \u001b[90m 180 |\u001b[39m   test(\u001b[32m'the shared identity bar is served and revalidated'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 181 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m asset \u001b[36mof\u001b[39m [\u001b[32m'/identity/identity-bar.js'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/identity/identity-bar.css'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 182 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(asset)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 183 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m asset)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 184 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'cache-control'\u001b[39m] \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m.\u001b[39mtoContain(\u001b[32m'no-cache'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 185 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 33,
                            "line": 182
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/identity/identity-bar.js\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  180 |   test('the shared identity bar is served and revalidated', async ({ request }) => {\n  181 |     for (const asset of ['/identity/identity-bar.js', '/identity/identity-bar.css']) {\n> 182 |       const res = await request.get(asset);\n      |                                 ^\n  183 |       expect(res.status(), asset).toBe(200);\n  184 |       expect(res.headers()['cache-control'] || '').toContain('no-cache');\n  185 |     }\n    at /app/tests/ui/auth.spec.ts:182:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:04.173Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-the-sha-1ab45-r-is-served-and-revalidated-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-the-sha-1ab45-r-is-served-and-revalidated-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 33,
                        "line": 182
                      }
                    },
                    {
                      "workerIndex": 1033,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 20,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/identity/identity-bar.js\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/identity/identity-bar.js\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:182:33",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 33,
                          "line": 182
                        },
                        "snippet": "\u001b[0m \u001b[90m 180 |\u001b[39m   test(\u001b[32m'the shared identity bar is served and revalidated'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 181 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m asset \u001b[36mof\u001b[39m [\u001b[32m'/identity/identity-bar.js'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/identity/identity-bar.css'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 182 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(asset)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 183 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m asset)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 184 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'cache-control'\u001b[39m] \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m.\u001b[39mtoContain(\u001b[32m'no-cache'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 185 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 33,
                            "line": 182
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/identity/identity-bar.js\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  180 |   test('the shared identity bar is served and revalidated', async ({ request }) => {\n  181 |     for (const asset of ['/identity/identity-bar.js', '/identity/identity-bar.css']) {\n> 182 |       const res = await request.get(asset);\n      |                                 ^\n  183 |       expect(res.status(), asset).toBe(200);\n  184 |       expect(res.headers()['cache-control'] || '').toContain('no-cache');\n  185 |     }\n    at /app/tests/ui/auth.spec.ts:182:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:04.759Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-the-sha-1ab45-r-is-served-and-revalidated-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 33,
                        "line": 182
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-3bb8375e8399bd8ed909",
              "file": "tests/ui/auth.spec.ts",
              "line": 180,
              "column": 7
            },
            {
              "title": "/signin/google only answers GET, and the outpost hop is internal",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1037,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 21,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/signin/google\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/signin/google\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:189:27",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 27,
                          "line": 189
                        },
                        "snippet": "\u001b[0m \u001b[90m 187 |\u001b[39m\n \u001b[90m 188 |\u001b[39m   test(\u001b[32m'/signin/google only answers GET, and the outpost hop is internal'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 189 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/signin/google'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                           \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 190 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/signin/register'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 191 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/_outpost_start?rd=%2F'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 192 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 27,
                            "line": 189
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/signin/google\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  187 |\n  188 |   test('/signin/google only answers GET, and the outpost hop is internal', async ({ request }) => {\n> 189 |     expect((await request.post('/signin/google', { maxRedirects: 0 })).status()).toBe(405);\n      |                           ^\n  190 |     expect((await request.post('/signin/register', { maxRedirects: 0 })).status()).toBe(405);\n  191 |     expect((await request.get('/_outpost_start?rd=%2F', { maxRedirects: 0 })).status()).toBe(404);\n  192 |   });\n    at /app/tests/ui/auth.spec.ts:189:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:05.326Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--46645-the-outpost-hop-is-internal-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 27,
                        "line": 189
                      }
                    },
                    {
                      "workerIndex": 1041,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 48,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/signin/google\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/signin/google\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:189:27",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 27,
                          "line": 189
                        },
                        "snippet": "\u001b[0m \u001b[90m 187 |\u001b[39m\n \u001b[90m 188 |\u001b[39m   test(\u001b[32m'/signin/google only answers GET, and the outpost hop is internal'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 189 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/signin/google'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                           \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 190 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/signin/register'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 191 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/_outpost_start?rd=%2F'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 192 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 27,
                            "line": 189
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/signin/google\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  187 |\n  188 |   test('/signin/google only answers GET, and the outpost hop is internal', async ({ request }) => {\n> 189 |     expect((await request.post('/signin/google', { maxRedirects: 0 })).status()).toBe(405);\n      |                           ^\n  190 |     expect((await request.post('/signin/register', { maxRedirects: 0 })).status()).toBe(405);\n  191 |     expect((await request.get('/_outpost_start?rd=%2F', { maxRedirects: 0 })).status()).toBe(404);\n  192 |   });\n    at /app/tests/ui/auth.spec.ts:189:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:05.880Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--46645-the-outpost-hop-is-internal-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--46645-the-outpost-hop-is-internal-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 27,
                        "line": 189
                      }
                    },
                    {
                      "workerIndex": 1045,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/signin/google\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/signin/google\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/auth.spec.ts:189:27",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 27,
                          "line": 189
                        },
                        "snippet": "\u001b[0m \u001b[90m 187 |\u001b[39m\n \u001b[90m 188 |\u001b[39m   test(\u001b[32m'/signin/google only answers GET, and the outpost hop is internal'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 189 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/signin/google'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                           \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 190 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/signin/register'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 191 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/_outpost_start?rd=%2F'\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 192 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 27,
                            "line": 189
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/signin/google\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  187 |\n  188 |   test('/signin/google only answers GET, and the outpost hop is internal', async ({ request }) => {\n> 189 |     expect((await request.post('/signin/google', { maxRedirects: 0 })).status()).toBe(405);\n      |                           ^\n  190 |     expect((await request.post('/signin/register', { maxRedirects: 0 })).status()).toBe(405);\n  191 |     expect((await request.get('/_outpost_start?rd=%2F', { maxRedirects: 0 })).status()).toBe(404);\n  192 |   });\n    at /app/tests/ui/auth.spec.ts:189:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:06.477Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-signin--46645-the-outpost-hop-is-internal-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 27,
                        "line": 189
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-f0802db54d500bb3e896",
              "file": "tests/ui/auth.spec.ts",
              "line": 188,
              "column": 7
            },
            {
              "title": "Log In opens the sign-in panel with Google and email",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1048,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 139,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:195:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:195:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:07.026Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-Log-In--c8811-panel-with-Google-and-email-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-Log-In--c8811-panel-with-Google-and-email-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 1052,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 215,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:195:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:195:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:07.768Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-Log-In--c8811-panel-with-Google-and-email-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-Log-In--c8811-panel-with-Google-and-email-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-Log-In--c8811-panel-with-Google-and-email-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-Log-In--c8811-panel-with-Google-and-email-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    },
                    {
                      "workerIndex": 1057,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 114,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:195:22",
                        "location": {
                          "file": "/app/tests/ui/auth.spec.ts",
                          "column": 29,
                          "line": 38
                        },
                        "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m\n \u001b[90m 37 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m whoami(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m string\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {})\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mWhoAmI\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/auth/whoami'\u001b[39m\u001b[33m,\u001b[39m { headers\u001b[33m,\u001b[39m maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m) {\n \u001b[90m 40 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'a redirected /auth/whoami goes to sign-in'\u001b[39m)\u001b[33m.\u001b[39mtoMatch(\u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mreturn\u001b[39m \u001b[33mSIGNED_OUT\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/auth.spec.ts",
                            "column": 29,
                            "line": 38
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/auth/whoami\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |\n  37 | async function whoami(request: import('@playwright/test').APIRequestContext, headers: Record<string, string> = {}): Promise<WhoAmI> {\n> 38 |   const res = await request.get('/auth/whoami', { headers, maxRedirects: 0 });\n     |                             ^\n  39 |   if (res.status() === 302) {\n  40 |     expect(res.headers()['location'], 'a redirected /auth/whoami goes to sign-in').toMatch(/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io/);\n  41 |     return SIGNED_OUT;\n    at whoami (/app/tests/ui/auth.spec.ts:38:29)\n    at /app/tests/ui/auth.spec.ts:195:22"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:08.601Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-Log-In--c8811-panel-with-Google-and-email-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/auth-sign-in-panel-Log-In--c8811-panel-with-Google-and-email-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/auth.spec.ts",
                        "column": 29,
                        "line": 38
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d748ac400d08b85935ef-985d1e0afe9b23e56167",
              "file": "tests/ui/auth.spec.ts",
              "line": 194,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/cms-proxy.spec.ts",
      "file": "tests/ui/cms-proxy.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "/api/cms/ proxy",
          "file": "tests/ui/cms-proxy.spec.ts",
          "line": 12,
          "column": 6,
          "specs": [
            {
              "title": "/api/cms/users/me is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 2,
                      "parallelIndex": 2,
                      "status": "timedOut",
                      "duration": 30024,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.043Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-me-is-404-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 34,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 11272,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.668Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-me-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-me-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 71,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 37,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.744Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-me-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-cc9bb6a3cfc76f59bc01",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/users is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 95,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 33,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.534Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 108,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 73,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.263Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 132,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.125Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-617668a16c2dee63692c",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/users/login is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 154,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 38,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/login\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/login\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/login\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.007Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-login-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 167,
                      "parallelIndex": 2,
                      "status": "timedOut",
                      "duration": 30038,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/login\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:09.717Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-login-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-login-is-404-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 191,
                      "parallelIndex": 2,
                      "status": "timedOut",
                      "duration": 30027,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/login\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:40.321Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-users-login-is-404-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-18de684729d5b7f54b47",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/payload-mcp-api-keys is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 327,
                      "parallelIndex": 2,
                      "status": "timedOut",
                      "duration": 30027,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-mcp-api-keys\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:10.860Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-payload-mcp-api-keys-is-404-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 342,
                      "parallelIndex": 2,
                      "status": "timedOut",
                      "duration": 30049,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-mcp-api-keys\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:41.423Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-payload-mcp-api-keys-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-payload-mcp-api-keys-is-404-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 437,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 19512,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-mcp-api-keys\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-mcp-api-keys\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-mcp-api-keys\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:12.043Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-payload-mcp-api-keys-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-b8a6a58d1ac5d4d968f9",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/payload-preferences is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 499,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-preferences\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-preferences\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-preferences\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.209Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-payload-preferences-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 516,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 65,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-preferences\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-preferences\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-preferences\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:32.950Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-payload-preferences-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-payload-preferences-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 532,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 33,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-preferences\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-preferences\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-preferences\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.705Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-payload-preferences-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-ae25edf4804185cce0cf",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/payload-locked-documents is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 551,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 30,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-locked-documents\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-locked-documents\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-locked-documents\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.407Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-c9971-oad-locked-documents-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 569,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 74,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-locked-documents\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-locked-documents\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-locked-documents\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.097Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-c9971-oad-locked-documents-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-c9971-oad-locked-documents-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 585,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-locked-documents\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-locked-documents\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/payload-locked-documents\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:35.896Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-c9971-oad-locked-documents-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-b50cab05dc798cfacc41",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/posts is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 603,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/posts\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/posts\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/posts\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:36.621Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-posts-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 619,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 68,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/posts\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/posts\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/posts\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.293Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-posts-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-posts-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 635,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/posts\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/posts\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/posts\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.068Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-posts-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-abffd54722acee136ad6",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/media is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 649,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 33,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/media\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/media\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/media\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:38.739Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-media-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 667,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 68,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/media\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/media\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/media\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:39.483Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-media-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-media-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 683,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 34,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/media\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/media\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/media\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.212Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-media-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-5b06a815231650bc7724",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/graphql is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 696,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:40.908Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-graphql-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 716,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 57,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:41.641Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-graphql-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-graphql-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 733,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 30,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.337Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-graphql-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-ce39e6c13a114fa28f07",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/mcp is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 742,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 33,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/mcp\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/mcp\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/mcp\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:43.000Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-mcp-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 759,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 86,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/mcp\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/mcp\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/mcp\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:43.639Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-mcp-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-mcp-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 775,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 37,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/mcp\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/mcp\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/mcp\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:44.351Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-mcp-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-eecb42b6f024183a9e65",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/slug-lookup?collection=politicians&path=x is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 779,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/slug-lookup?collection=politicians&path=x\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/slug-lookup?collection=politicians&path=x\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/slug-lookup?collection=politicians&path=x\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:45.034Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-9193c-n-politicians-path-x-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 797,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 65,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/slug-lookup?collection=politicians&path=x\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/slug-lookup?collection=politicians&path=x\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/slug-lookup?collection=politicians&path=x\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:45.685Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-9193c-n-politicians-path-x-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-9193c-n-politicians-path-x-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 811,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/slug-lookup?collection=politicians&path=x\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/slug-lookup?collection=politicians&path=x\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/slug-lookup?collection=politicians&path=x\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:46.389Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-9193c-n-politicians-path-x-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-3a3d7ba9aee59900e4e8",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/politicians/a/b is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 822,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 33,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians/a/b\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians/a/b\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians/a/b\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:47.041Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-politicians-a-b-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 834,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 54,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians/a/b\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians/a/b\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians/a/b\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:47.663Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-politicians-a-b-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-politicians-a-b-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 846,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians/a/b\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians/a/b\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians/a/b\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:48.321Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-politicians-a-b-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-e26099ab3e6165e9bf8e",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/politicians/%2e%2e/users/me is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 855,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:48.925Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-f5012-cians-2e-2e-users-me-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 866,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 54,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:49.572Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-f5012-cians-2e-2e-users-me-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-f5012-cians-2e-2e-users-me-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 878,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/users/me\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:50.284Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-f5012-cians-2e-2e-users-me-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-5be9c9a7194b19ecd45f",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/politicians%2F..%2Fusers%2Fme is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 887,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians%2F..%2Fusers%2Fme\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians%2F..%2Fusers%2Fme\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians%2F..%2Fusers%2Fme\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:50.875Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-18be8-ians-2F-2Fusers-2Fme-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 897,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 53,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians%2F..%2Fusers%2Fme\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians%2F..%2Fusers%2Fme\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians%2F..%2Fusers%2Fme\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:51.507Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-18be8-ians-2F-2Fusers-2Fme-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-18be8-ians-2F-2Fusers-2Fme-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 909,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians%2F..%2Fusers%2Fme\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians%2F..%2Fusers%2Fme\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians%2F..%2Fusers%2Fme\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:52.416Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-a-18be8-ians-2F-2Fusers-2Fme-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-2a09439d06bbeb58d327",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "/api/cms/ is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 918,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:53.053Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 928,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 51,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:53.628Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    },
                    {
                      "workerIndex": 935,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:31:33",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 33,
                          "line": 31
                        },
                        "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m   ]) {\n \u001b[90m 30 |\u001b[39m     test(\u001b[32m`${path} is 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'X-authentik-email'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'steve@elect.info'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 33 |\u001b[39m         maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 34 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 33,
                            "line": 31
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - X-authentik-email: steve@elect.info\u001b[22m\n\n\n  29 |   ]) {\n  30 |     test(`${path} is 404`, async ({ request }) => {\n> 31 |       const res = await request.get(path, {\n     |                                 ^\n  32 |         headers: { 'X-authentik-email': 'steve@elect.info' },\n  33 |         maxRedirects: 0,\n  34 |       });\n    at /app/tests/ui/cms-proxy.spec.ts:31:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:54.271Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-api-cms-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 33,
                        "line": 31
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-46084719f8cf8fc9e6af",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 30,
              "column": 9
            },
            {
              "title": "writes are 405",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 943,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/cms/politicians\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 2\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/cms/politicians\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 2\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:43:29",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 29,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   test(\u001b[32m'writes are 405'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 42 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m \u001b[33mALLOWED\u001b[39m) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m`/api/cms/${collection}`\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m {} }))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m collection)\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m     }\n \u001b[90m 45 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/cms/users/login'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m {} }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 46 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 29,
                            "line": 43
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/cms/politicians\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 2\u001b[22m\n\n\n  41 |   test('writes are 405', async ({ request }) => {\n  42 |     for (const collection of ALLOWED) {\n> 43 |       expect((await request.post(`/api/cms/${collection}`, { data: {} })).status(), collection).toBe(405);\n     |                             ^\n  44 |     }\n  45 |     expect((await request.post('/api/cms/users/login', { data: {} })).status()).toBe(405);\n  46 |   });\n    at /app/tests/ui/cms-proxy.spec.ts:43:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:54.857Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-writes-are-405-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 29,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 953,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 61,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/cms/politicians\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 2\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/cms/politicians\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 2\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:43:29",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 29,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   test(\u001b[32m'writes are 405'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 42 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m \u001b[33mALLOWED\u001b[39m) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m`/api/cms/${collection}`\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m {} }))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m collection)\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m     }\n \u001b[90m 45 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/cms/users/login'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m {} }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 46 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 29,
                            "line": 43
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/cms/politicians\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 2\u001b[22m\n\n\n  41 |   test('writes are 405', async ({ request }) => {\n  42 |     for (const collection of ALLOWED) {\n> 43 |       expect((await request.post(`/api/cms/${collection}`, { data: {} })).status(), collection).toBe(405);\n     |                             ^\n  44 |     }\n  45 |     expect((await request.post('/api/cms/users/login', { data: {} })).status()).toBe(405);\n  46 |   });\n    at /app/tests/ui/cms-proxy.spec.ts:43:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:55.436Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-writes-are-405-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-writes-are-405-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 29,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 958,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 20,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/cms/politicians\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 2\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/cms/politicians\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 2\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:43:29",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 29,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   test(\u001b[32m'writes are 405'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 42 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m \u001b[33mALLOWED\u001b[39m) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m`/api/cms/${collection}`\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m {} }))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m collection)\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m     }\n \u001b[90m 45 |\u001b[39m     expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/cms/users/login'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m {} }))\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m405\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 46 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 29,
                            "line": 43
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/cms/politicians\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 2\u001b[22m\n\n\n  41 |   test('writes are 405', async ({ request }) => {\n  42 |     for (const collection of ALLOWED) {\n> 43 |       expect((await request.post(`/api/cms/${collection}`, { data: {} })).status(), collection).toBe(405);\n     |                             ^\n  44 |     }\n  45 |     expect((await request.post('/api/cms/users/login', { data: {} })).status()).toBe(405);\n  46 |   });\n    at /app/tests/ui/cms-proxy.spec.ts:43:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:56.094Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-writes-are-405-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 29,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-c3e3f0331df33854dcd3",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 41,
              "column": 7
            },
            {
              "title": "the allowed collections reach the CMS",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 968,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians?limit=0\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians?limit=0\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:51:37",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 37,
                          "line": 51
                        },
                        "snippet": "\u001b[0m \u001b[90m 49 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m \u001b[33mALLOWED\u001b[39m) {\n \u001b[90m 50 |\u001b[39m       \u001b[90m// 200 when the CMS is up; 5xx from nginx when it is down. Never the nginx 404/405.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 51 |\u001b[39m       \u001b[36mconst\u001b[39m status \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/api/cms/${collection}?limit=0`\u001b[39m))\u001b[33m.\u001b[39mstatus()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 52 |\u001b[39m       expect([\u001b[35m404\u001b[39m\u001b[33m,\u001b[39m \u001b[35m405\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${collection}: ${status}`\u001b[39m)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(status)\u001b[33m;\u001b[39m\n \u001b[90m 53 |\u001b[39m     }\n \u001b[90m 54 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 37,
                            "line": 51
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians?limit=0\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  49 |     for (const collection of ALLOWED) {\n  50 |       // 200 when the CMS is up; 5xx from nginx when it is down. Never the nginx 404/405.\n> 51 |       const status = (await request.get(`/api/cms/${collection}?limit=0`)).status();\n     |                                     ^\n  52 |       expect([404, 405], `${collection}: ${status}`).not.toContain(status);\n  53 |     }\n  54 |   });\n    at /app/tests/ui/cms-proxy.spec.ts:51:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:56.665Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-t-21bde-d-collections-reach-the-CMS-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 37,
                        "line": 51
                      }
                    },
                    {
                      "workerIndex": 973,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 52,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians?limit=0\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians?limit=0\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:51:37",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 37,
                          "line": 51
                        },
                        "snippet": "\u001b[0m \u001b[90m 49 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m \u001b[33mALLOWED\u001b[39m) {\n \u001b[90m 50 |\u001b[39m       \u001b[90m// 200 when the CMS is up; 5xx from nginx when it is down. Never the nginx 404/405.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 51 |\u001b[39m       \u001b[36mconst\u001b[39m status \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/api/cms/${collection}?limit=0`\u001b[39m))\u001b[33m.\u001b[39mstatus()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 52 |\u001b[39m       expect([\u001b[35m404\u001b[39m\u001b[33m,\u001b[39m \u001b[35m405\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${collection}: ${status}`\u001b[39m)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(status)\u001b[33m;\u001b[39m\n \u001b[90m 53 |\u001b[39m     }\n \u001b[90m 54 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 37,
                            "line": 51
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians?limit=0\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  49 |     for (const collection of ALLOWED) {\n  50 |       // 200 when the CMS is up; 5xx from nginx when it is down. Never the nginx 404/405.\n> 51 |       const status = (await request.get(`/api/cms/${collection}?limit=0`)).status();\n     |                                     ^\n  52 |       expect([404, 405], `${collection}: ${status}`).not.toContain(status);\n  53 |     }\n  54 |   });\n    at /app/tests/ui/cms-proxy.spec.ts:51:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:57.239Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-t-21bde-d-collections-reach-the-CMS-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-t-21bde-d-collections-reach-the-CMS-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 37,
                        "line": 51
                      }
                    },
                    {
                      "workerIndex": 979,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians?limit=0\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians?limit=0\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/cms-proxy.spec.ts:51:37",
                        "location": {
                          "file": "/app/tests/ui/cms-proxy.spec.ts",
                          "column": 37,
                          "line": 51
                        },
                        "snippet": "\u001b[0m \u001b[90m 49 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m \u001b[33mALLOWED\u001b[39m) {\n \u001b[90m 50 |\u001b[39m       \u001b[90m// 200 when the CMS is up; 5xx from nginx when it is down. Never the nginx 404/405.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 51 |\u001b[39m       \u001b[36mconst\u001b[39m status \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/api/cms/${collection}?limit=0`\u001b[39m))\u001b[33m.\u001b[39mstatus()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 52 |\u001b[39m       expect([\u001b[35m404\u001b[39m\u001b[33m,\u001b[39m \u001b[35m405\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${collection}: ${status}`\u001b[39m)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(status)\u001b[33m;\u001b[39m\n \u001b[90m 53 |\u001b[39m     }\n \u001b[90m 54 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cms-proxy.spec.ts",
                            "column": 37,
                            "line": 51
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/cms/politicians?limit=0\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  49 |     for (const collection of ALLOWED) {\n  50 |       // 200 when the CMS is up; 5xx from nginx when it is down. Never the nginx 404/405.\n> 51 |       const status = (await request.get(`/api/cms/${collection}?limit=0`)).status();\n     |                                     ^\n  52 |       expect([404, 405], `${collection}: ${status}`).not.toContain(status);\n  53 |     }\n  54 |   });\n    at /app/tests/ui/cms-proxy.spec.ts:51:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:57.857Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cms-proxy--api-cms-proxy-t-21bde-d-collections-reach-the-CMS-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cms-proxy.spec.ts",
                        "column": 37,
                        "line": 51
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "71ccbf92d55b4dbfb95f-37e9db234d843b0ff2d8",
              "file": "tests/ui/cms-proxy.spec.ts",
              "line": 48,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/county-filters.spec.ts",
      "file": "tests/ui/county-filters.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "tracts county filter: GEOID option values list the county's tracts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 120000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 3,
                  "parallelIndex": 3,
                  "status": "timedOut",
                  "duration": 120196,
                  "error": {
                    "message": "\u001b[31mTest timeout of 120000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 120000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 120000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/tracts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:01:23.057Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-tracts-coun-8d5fe-es-list-the-county-s-tracts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-tracts-coun-8d5fe-es-list-the-county-s-tracts-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 331,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 69840,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/tracts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/tracts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/tracts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:24.025Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-tracts-coun-8d5fe-es-list-the-county-s-tracts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-tracts-coun-8d5fe-es-list-the-county-s-tracts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-tracts-coun-8d5fe-es-list-the-county-s-tracts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-tracts-coun-8d5fe-es-list-the-county-s-tracts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                },
                {
                  "workerIndex": 557,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 172,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/tracts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/tracts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/tracts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:34.735Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-tracts-coun-8d5fe-es-list-the-county-s-tracts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-tracts-coun-8d5fe-es-list-the-county-s-tracts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "27700f440bd41f34957a-c91732dd519bda18fdc2",
          "file": "tests/ui/county-filters.spec.ts",
          "line": 40,
          "column": 7
        },
        {
          "title": "blocks county filter: GEOID option values list the county's blocks",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 120000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 582,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 167,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:35.731Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-blocks-coun-76060-es-list-the-county-s-blocks-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-blocks-coun-76060-es-list-the-county-s-blocks-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                },
                {
                  "workerIndex": 604,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 251,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:36.701Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-blocks-coun-76060-es-list-the-county-s-blocks-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-blocks-coun-76060-es-list-the-county-s-blocks-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-blocks-coun-76060-es-list-the-county-s-blocks-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-blocks-coun-76060-es-list-the-county-s-blocks-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                },
                {
                  "workerIndex": 628,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 160,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:37.806Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-blocks-coun-76060-es-list-the-county-s-blocks-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-blocks-coun-76060-es-list-the-county-s-blocks-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "27700f440bd41f34957a-f985531d9a6cf726a6b3",
          "file": "tests/ui/county-filters.spec.ts",
          "line": 40,
          "column": 7
        },
        {
          "title": "precincts county filter: GEOID option values list the county's precincts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 120000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 648,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 157,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/precincts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/precincts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/precincts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:38.725Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-precincts-c-f8a85-list-the-county-s-precincts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-precincts-c-f8a85-list-the-county-s-precincts-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                },
                {
                  "workerIndex": 670,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 239,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/precincts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/precincts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/precincts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:39.646Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-precincts-c-f8a85-list-the-county-s-precincts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-precincts-c-f8a85-list-the-county-s-precincts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-precincts-c-f8a85-list-the-county-s-precincts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-precincts-c-f8a85-list-the-county-s-precincts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                },
                {
                  "workerIndex": 694,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 153,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/precincts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/precincts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/precincts/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/county-filters.spec.ts:42:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:40.740Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-precincts-c-f8a85-list-the-county-s-precincts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/county-filters-precincts-c-f8a85-list-the-county-s-precincts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "27700f440bd41f34957a-7c41065a343e42681997",
          "file": "tests/ui/county-filters.spec.ts",
          "line": 40,
          "column": 7
        }
      ]
    },
    {
      "title": "tests/ui/cycle-facet.spec.ts",
      "file": "tests/ui/cycle-facet.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "cycle facet (sites#194, #355)",
          "file": "tests/ui/cycle-facet.spec.ts",
          "line": 15,
          "column": 6,
          "specs": [
            {
              "title": "signed out: shown locked, offers sign-in",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 4,
                      "parallelIndex": 4,
                      "status": "timedOut",
                      "duration": 40039,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 18
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  16 |   test('signed out: shown locked, offers sign-in', async ({ page }) => {\n  17 |     await as(page, '');\n> 18 |     await page.goto('/');\n     |                ^\n  19 |     const cycle = page.locator('#auth-slot [data-control=\"cycle\"]');\n  20 |     await expect(cycle).toBeVisible({ timeout: 15000 });\n  21 |     await expect(cycle).toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/cycle-facet.spec.ts:18:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.052Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-d7771-shown-locked-offers-sign-in-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 46,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 371,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:18:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 18
                        },
                        "snippet": "\u001b[0m \u001b[90m 16 |\u001b[39m   test(\u001b[32m'signed out: shown locked, offers sign-in'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 17 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 18 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 19 |\u001b[39m     \u001b[36mconst\u001b[39m cycle \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m     \u001b[36mawait\u001b[39m expect(cycle)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m     \u001b[36mawait\u001b[39m expect(cycle)\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 18
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  16 |   test('signed out: shown locked, offers sign-in', async ({ page }) => {\n  17 |     await as(page, '');\n> 18 |     await page.goto('/');\n     |                ^\n  19 |     const cycle = page.locator('#auth-slot [data-control=\"cycle\"]');\n  20 |     await expect(cycle).toBeVisible({ timeout: 15000 });\n  21 |     await expect(cycle).toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/cycle-facet.spec.ts:18:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:03.923Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-d7771-shown-locked-offers-sign-in-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-d7771-shown-locked-offers-sign-in-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-d7771-shown-locked-offers-sign-in-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-d7771-shown-locked-offers-sign-in-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 18
                      }
                    },
                    {
                      "workerIndex": 61,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 304,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:18:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 18
                        },
                        "snippet": "\u001b[0m \u001b[90m 16 |\u001b[39m   test(\u001b[32m'signed out: shown locked, offers sign-in'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 17 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 18 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 19 |\u001b[39m     \u001b[36mconst\u001b[39m cycle \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m     \u001b[36mawait\u001b[39m expect(cycle)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m     \u001b[36mawait\u001b[39m expect(cycle)\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 18
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  16 |   test('signed out: shown locked, offers sign-in', async ({ page }) => {\n  17 |     await as(page, '');\n> 18 |     await page.goto('/');\n     |                ^\n  19 |     const cycle = page.locator('#auth-slot [data-control=\"cycle\"]');\n  20 |     await expect(cycle).toBeVisible({ timeout: 15000 });\n  21 |     await expect(cycle).toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/cycle-facet.spec.ts:18:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.078Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-d7771-shown-locked-offers-sign-in-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-d7771-shown-locked-offers-sign-in-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 18
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6978d26ba5f0541ddfd1-e30aa77c81b6e0068a2e",
              "file": "tests/ui/cycle-facet.spec.ts",
              "line": 16,
              "column": 7
            },
            {
              "title": "signed in: picking a cycle reloads with ?cycle= and links keep it",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 83,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 256,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:29:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 29
                        },
                        "snippet": "\u001b[0m \u001b[90m 27 |\u001b[39m   test(\u001b[32m'signed in: picking a cycle reloads with ?cycle= and links keep it'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 28 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 30 |\u001b[39m     \u001b[36mconst\u001b[39m cycle \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m expect(cycle)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m cycle\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 29
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  27 |   test('signed in: picking a cycle reloads with ?cycle= and links keep it', async ({ page }) => {\n  28 |     await as(page, 'jane@example.org');\n> 29 |     await page.goto('/');\n     |                ^\n  30 |     const cycle = page.locator('#auth-slot [data-control=\"cycle\"]');\n  31 |     await expect(cycle).not.toHaveAttribute('aria-disabled', 'true', { timeout: 15000 });\n  32 |     await cycle.click();\n    at /app/tests/ui/cycle-facet.spec.ts:29:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.261Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-a2a9b-ith-cycle-and-links-keep-it-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-a2a9b-ith-cycle-and-links-keep-it-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 29
                      }
                    },
                    {
                      "workerIndex": 113,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 418,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:29:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 29
                        },
                        "snippet": "\u001b[0m \u001b[90m 27 |\u001b[39m   test(\u001b[32m'signed in: picking a cycle reloads with ?cycle= and links keep it'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 28 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 30 |\u001b[39m     \u001b[36mconst\u001b[39m cycle \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m expect(cycle)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m cycle\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 29
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  27 |   test('signed in: picking a cycle reloads with ?cycle= and links keep it', async ({ page }) => {\n  28 |     await as(page, 'jane@example.org');\n> 29 |     await page.goto('/');\n     |                ^\n  30 |     const cycle = page.locator('#auth-slot [data-control=\"cycle\"]');\n  31 |     await expect(cycle).not.toHaveAttribute('aria-disabled', 'true', { timeout: 15000 });\n  32 |     await cycle.click();\n    at /app/tests/ui/cycle-facet.spec.ts:29:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.366Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-a2a9b-ith-cycle-and-links-keep-it-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-a2a9b-ith-cycle-and-links-keep-it-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-a2a9b-ith-cycle-and-links-keep-it-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-a2a9b-ith-cycle-and-links-keep-it-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 29
                      }
                    },
                    {
                      "workerIndex": 143,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 260,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:29:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 29
                        },
                        "snippet": "\u001b[0m \u001b[90m 27 |\u001b[39m   test(\u001b[32m'signed in: picking a cycle reloads with ?cycle= and links keep it'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 28 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 30 |\u001b[39m     \u001b[36mconst\u001b[39m cycle \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m expect(cycle)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m cycle\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 29
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  27 |   test('signed in: picking a cycle reloads with ?cycle= and links keep it', async ({ page }) => {\n  28 |     await as(page, 'jane@example.org');\n> 29 |     await page.goto('/');\n     |                ^\n  30 |     const cycle = page.locator('#auth-slot [data-control=\"cycle\"]');\n  31 |     await expect(cycle).not.toHaveAttribute('aria-disabled', 'true', { timeout: 15000 });\n  32 |     await cycle.click();\n    at /app/tests/ui/cycle-facet.spec.ts:29:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.693Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-a2a9b-ith-cycle-and-links-keep-it-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-a2a9b-ith-cycle-and-links-keep-it-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 29
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6978d26ba5f0541ddfd1-32dc73bc8c14ad3f8f6e",
              "file": "tests/ui/cycle-facet.spec.ts",
              "line": 27,
              "column": 7
            },
            {
              "title": "an invalid ?cycle= means all cycles",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 171,
                      "parallelIndex": 4,
                      "status": "timedOut",
                      "duration": 40035,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 56
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  54 |   test('an invalid ?cycle= means all cycles', async ({ page }) => {\n  55 |     await as(page, 'jane@example.org');\n> 56 |     await page.goto('/?cycle=2023');\n     |                ^\n  57 |     await expect(page.locator('#auth-slot [data-control=\"cycle\"]')).toContainText('All cycles', { timeout: 15000 });\n  58 |   });\n  59 | });\n    at /app/tests/ui/cycle-facet.spec.ts:56:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.781Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-670e3-alid-cycle-means-all-cycles-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 197,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 11718,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:56:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 56
                        },
                        "snippet": "\u001b[0m \u001b[90m 54 |\u001b[39m   test(\u001b[32m'an invalid ?cycle= means all cycles'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 55 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 56 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2023'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 57 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'All cycles'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 58 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 59 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 56
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  54 |   test('an invalid ?cycle= means all cycles', async ({ page }) => {\n  55 |     await as(page, 'jane@example.org');\n> 56 |     await page.goto('/?cycle=2023');\n     |                ^\n  57 |     await expect(page.locator('#auth-slot [data-control=\"cycle\"]')).toContainText('All cycles', { timeout: 15000 });\n  58 |   });\n  59 | });\n    at /app/tests/ui/cycle-facet.spec.ts:56:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.514Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-670e3-alid-cycle-means-all-cycles-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-670e3-alid-cycle-means-all-cycles-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-670e3-alid-cycle-means-all-cycles-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-670e3-alid-cycle-means-all-cycles-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 56
                      }
                    },
                    {
                      "workerIndex": 216,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 175,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:56:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 56
                        },
                        "snippet": "\u001b[0m \u001b[90m 54 |\u001b[39m   test(\u001b[32m'an invalid ?cycle= means all cycles'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 55 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 56 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2023'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 57 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'All cycles'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 58 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 59 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 56
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  54 |   test('an invalid ?cycle= means all cycles', async ({ page }) => {\n  55 |     await as(page, 'jane@example.org');\n> 56 |     await page.goto('/?cycle=2023');\n     |                ^\n  57 |     await expect(page.locator('#auth-slot [data-control=\"cycle\"]')).toContainText('All cycles', { timeout: 15000 });\n  58 |   });\n  59 | });\n    at /app/tests/ui/cycle-facet.spec.ts:56:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:02.944Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-670e3-alid-cycle-means-all-cycles-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-cycle-facet-si-670e3-alid-cycle-means-all-cycles-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 56
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6978d26ba5f0541ddfd1-5be095118f9b0a5d97a3",
              "file": "tests/ui/cycle-facet.spec.ts",
              "line": 54,
              "column": 7
            }
          ]
        },
        {
          "title": "graph view control (sites#355)",
          "file": "tests/ui/cycle-facet.spec.ts",
          "line": 61,
          "column": 6,
          "specs": [
            {
              "title": "a member opens the graph from the bar; no header button",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 229,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 155,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:64:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 64
                        },
                        "snippet": "\u001b[0m \u001b[90m 62 |\u001b[39m   test(\u001b[32m'a member opens the graph from the bar; no header button'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 63 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 64 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 65 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 66 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 67 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'button.eg-open'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 64
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  62 |   test('a member opens the graph from the bar; no header button', async ({ page }) => {\n  63 |     await as(page, 'jane@example.org');\n> 64 |     await page.goto(DNC);\n     |                ^\n  65 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  66 |     await expect(graph).toBeVisible({ timeout: 15000 });\n  67 |     await expect(page.locator('button.eg-open')).toHaveCount(0);\n    at /app/tests/ui/cycle-facet.spec.ts:64:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:03.810Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-37808-om-the-bar-no-header-button-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-37808-om-the-bar-no-header-button-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 64
                      }
                    },
                    {
                      "workerIndex": 239,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 261,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:64:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 64
                        },
                        "snippet": "\u001b[0m \u001b[90m 62 |\u001b[39m   test(\u001b[32m'a member opens the graph from the bar; no header button'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 63 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 64 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 65 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 66 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 67 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'button.eg-open'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 64
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  62 |   test('a member opens the graph from the bar; no header button', async ({ page }) => {\n  63 |     await as(page, 'jane@example.org');\n> 64 |     await page.goto(DNC);\n     |                ^\n  65 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  66 |     await expect(graph).toBeVisible({ timeout: 15000 });\n  67 |     await expect(page.locator('button.eg-open')).toHaveCount(0);\n    at /app/tests/ui/cycle-facet.spec.ts:64:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:04.693Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-37808-om-the-bar-no-header-button-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-37808-om-the-bar-no-header-button-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-37808-om-the-bar-no-header-button-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-37808-om-the-bar-no-header-button-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 64
                      }
                    },
                    {
                      "workerIndex": 253,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:64:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 64
                        },
                        "snippet": "\u001b[0m \u001b[90m 62 |\u001b[39m   test(\u001b[32m'a member opens the graph from the bar; no header button'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 63 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 64 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 65 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 66 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 67 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'button.eg-open'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 64
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  62 |   test('a member opens the graph from the bar; no header button', async ({ page }) => {\n  63 |     await as(page, 'jane@example.org');\n> 64 |     await page.goto(DNC);\n     |                ^\n  65 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  66 |     await expect(graph).toBeVisible({ timeout: 15000 });\n  67 |     await expect(page.locator('button.eg-open')).toHaveCount(0);\n    at /app/tests/ui/cycle-facet.spec.ts:64:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:05.656Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-37808-om-the-bar-no-header-button-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-37808-om-the-bar-no-header-button-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 64
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6978d26ba5f0541ddfd1-59a365b7af459e57220a",
              "file": "tests/ui/cycle-facet.spec.ts",
              "line": 62,
              "column": 7
            },
            {
              "title": "signed out: the graph control is locked",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 268,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 161,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:74:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 74
                        },
                        "snippet": "\u001b[0m \u001b[90m 72 |\u001b[39m   test(\u001b[32m'signed out: the graph control is locked'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 73 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 74 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 75 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 76 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m     \u001b[36mawait\u001b[39m graph\u001b[33m.\u001b[39mclick({ force\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 74
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  72 |   test('signed out: the graph control is locked', async ({ page }) => {\n  73 |     await as(page, '');\n> 74 |     await page.goto(DNC);\n     |                ^\n  75 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  76 |     await expect(graph).toHaveAttribute('aria-disabled', 'true', { timeout: 15000 });\n  77 |     await graph.click({ force: true });\n    at /app/tests/ui/cycle-facet.spec.ts:74:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:06.611Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-fd1b6-the-graph-control-is-locked-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-fd1b6-the-graph-control-is-locked-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 74
                      }
                    },
                    {
                      "workerIndex": 284,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 271,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:74:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 74
                        },
                        "snippet": "\u001b[0m \u001b[90m 72 |\u001b[39m   test(\u001b[32m'signed out: the graph control is locked'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 73 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 74 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 75 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 76 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m     \u001b[36mawait\u001b[39m graph\u001b[33m.\u001b[39mclick({ force\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 74
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  72 |   test('signed out: the graph control is locked', async ({ page }) => {\n  73 |     await as(page, '');\n> 74 |     await page.goto(DNC);\n     |                ^\n  75 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  76 |     await expect(graph).toHaveAttribute('aria-disabled', 'true', { timeout: 15000 });\n  77 |     await graph.click({ force: true });\n    at /app/tests/ui/cycle-facet.spec.ts:74:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:07.502Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-fd1b6-the-graph-control-is-locked-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-fd1b6-the-graph-control-is-locked-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-fd1b6-the-graph-control-is-locked-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-fd1b6-the-graph-control-is-locked-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 74
                      }
                    },
                    {
                      "workerIndex": 300,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 162,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-facet.spec.ts:74:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-facet.spec.ts",
                          "column": 16,
                          "line": 74
                        },
                        "snippet": "\u001b[0m \u001b[90m 72 |\u001b[39m   test(\u001b[32m'signed out: the graph control is locked'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 73 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 74 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 75 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 76 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m     \u001b[36mawait\u001b[39m graph\u001b[33m.\u001b[39mclick({ force\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-facet.spec.ts",
                            "column": 16,
                            "line": 74
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  72 |   test('signed out: the graph control is locked', async ({ page }) => {\n  73 |     await as(page, '');\n> 74 |     await page.goto(DNC);\n     |                ^\n  75 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  76 |     await expect(graph).toHaveAttribute('aria-disabled', 'true', { timeout: 15000 });\n  77 |     await graph.click({ force: true });\n    at /app/tests/ui/cycle-facet.spec.ts:74:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:08.551Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-fd1b6-the-graph-control-is-locked-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-facet-graph-view-con-fd1b6-the-graph-control-is-locked-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-facet.spec.ts",
                        "column": 16,
                        "line": 74
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6978d26ba5f0541ddfd1-df26a6108fba66053c73",
              "file": "tests/ui/cycle-facet.spec.ts",
              "line": 72,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/cycle-index.spec.ts",
      "file": "tests/ui/cycle-index.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "candidates: legacy requests/rendering unchanged without cycle",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 566,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 224,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:34.990Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-88558-ing-unchanged-without-cycle-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-88558-ing-unchanged-without-cycle-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                },
                {
                  "workerIndex": 590,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 312,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:35.984Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-88558-ing-unchanged-without-cycle-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-88558-ing-unchanged-without-cycle-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-88558-ing-unchanged-without-cycle-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-88558-ing-unchanged-without-cycle-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                },
                {
                  "workerIndex": 616,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 189,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:37.180Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-88558-ing-unchanged-without-cycle-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-88558-ing-unchanged-without-cycle-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "07d5b3b25daacf53cd2a-b93113c811770e6390c0",
          "file": "tests/ui/cycle-index.spec.ts",
          "line": 165,
          "column": 9
        },
        {
          "title": "candidates: legacy requests/rendering unchanged ?cycle=2023",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 637,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 205,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:38.159Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-4a35f-dering-unchanged-cycle-2023-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-4a35f-dering-unchanged-cycle-2023-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                },
                {
                  "workerIndex": 658,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 292,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:39.153Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-4a35f-dering-unchanged-cycle-2023-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-4a35f-dering-unchanged-cycle-2023-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-4a35f-dering-unchanged-cycle-2023-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-4a35f-dering-unchanged-cycle-2023-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                },
                {
                  "workerIndex": 686,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 201,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:40.291Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-4a35f-dering-unchanged-cycle-2023-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-candidates-leg-4a35f-dering-unchanged-cycle-2023-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "07d5b3b25daacf53cd2a-d4abf828373c6efc362c",
          "file": "tests/ui/cycle-index.spec.ts",
          "line": 165,
          "column": 9
        },
        {
          "title": "committees: legacy requests/rendering unchanged without cycle",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 709,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 234,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:41.276Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-989dd-ing-unchanged-without-cycle-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-989dd-ing-unchanged-without-cycle-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                },
                {
                  "workerIndex": 729,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 307,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:42.326Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-989dd-ing-unchanged-without-cycle-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-989dd-ing-unchanged-without-cycle-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-989dd-ing-unchanged-without-cycle-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-989dd-ing-unchanged-without-cycle-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                },
                {
                  "workerIndex": 755,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 179,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:43.408Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-989dd-ing-unchanged-without-cycle-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-989dd-ing-unchanged-without-cycle-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "07d5b3b25daacf53cd2a-771beaf7f8de23b34648",
          "file": "tests/ui/cycle-index.spec.ts",
          "line": 165,
          "column": 9
        },
        {
          "title": "committees: legacy requests/rendering unchanged ?cycle=2023",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 773,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 218,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:44.328Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-171c1-dering-unchanged-cycle-2023-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-171c1-dering-unchanged-cycle-2023-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                },
                {
                  "workerIndex": 792,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 277,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:45.361Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-171c1-dering-unchanged-cycle-2023-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-171c1-dering-unchanged-cycle-2023-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-171c1-dering-unchanged-cycle-2023-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-171c1-dering-unchanged-cycle-2023-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                },
                {
                  "workerIndex": 812,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 181,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:167:18",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 18,
                      "line": 167
                    },
                    "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     test(\u001b[32m`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 166 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/${suffix}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m       \u001b[36mconst\u001b[39m browse \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m       expect(hashDocument(browse\u001b[33m.\u001b[39mquery))\u001b[33m.\u001b[39mtoBe(legacyBrowseHash)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 167
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  165 |     test(`${collection}: legacy requests/rendering unchanged ${suffix || 'without cycle'}`, async ({ page }) => {\n  166 |       const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 167 |       await page.goto(`/${collection}/${suffix}`);\n      |                  ^\n  168 |       await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  169 |       const browse = requests.find(r => r.query.includes('browseEntities('))!;\n  170 |       expect(hashDocument(browse.query)).toBe(legacyBrowseHash);\n    at /app/tests/ui/cycle-index.spec.ts:167:18"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:46.414Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-171c1-dering-unchanged-cycle-2023-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-committees-leg-171c1-dering-unchanged-cycle-2023-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 18,
                    "line": 167
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "07d5b3b25daacf53cd2a-be0b5c02cb3f3b6f8fb2",
          "file": "tests/ui/cycle-index.spec.ts",
          "line": 165,
          "column": 9
        },
        {
          "title": "specialized state search and district selector scope their results and counts using exact CSV year tokens",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 828,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 151,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/?cycle=2024&q=Tex\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/?cycle=2024&q=Tex\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/?cycle=2024&q=Tex\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/?cycle=2024&q=Tex\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:194:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 194
                    },
                    "snippet": "\u001b[0m \u001b[90m 192 |\u001b[39m     \u001b[36mreturn\u001b[39m { states\u001b[33m:\u001b[39m [{ id\u001b[33m:\u001b[39m \u001b[32m'state-1'\u001b[39m\u001b[33m,\u001b[39m name\u001b[33m:\u001b[39m \u001b[32m'Texas'\u001b[39m\u001b[33m,\u001b[39m state\u001b[33m:\u001b[39m \u001b[32m'TX'\u001b[39m }]\u001b[33m,\u001b[39m statesConnection\u001b[33m:\u001b[39m { totalCount\u001b[33m:\u001b[39m \u001b[35m1\u001b[39m } }\u001b[33m;\u001b[39m\n \u001b[90m 193 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 194 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/states/?cycle=2024&q=Tex'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 195 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.state-result'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Texas'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 196 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 197 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.state-pagination-info'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'Showing all 1 states'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 194
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/?cycle=2024&q=Tex\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/?cycle=2024&q=Tex\", waiting until \"load\"\u001b[22m\n\n\n  192 |     return { states: [{ id: 'state-1', name: 'Texas', state: 'TX' }], statesConnection: { totalCount: 1 } };\n  193 |   });\n> 194 |   await page.goto('/states/?cycle=2024&q=Tex');\n      |              ^\n  195 |   await expect(page.locator('.state-result')).toContainText('Texas');\n  196 |   await expect(page.locator('.ei-cycle-notice')).toContainText('2024');\n  197 |   await expect(page.locator('.state-pagination-info')).toHaveText('Showing all 1 states');\n    at /app/tests/ui/cycle-index.spec.ts:194:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:47.392Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-specialized-st-fff94-using-exact-CSV-year-tokens-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-specialized-st-fff94-using-exact-CSV-year-tokens-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 194
                  }
                },
                {
                  "workerIndex": 844,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 248,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/?cycle=2024&q=Tex\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/?cycle=2024&q=Tex\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/?cycle=2024&q=Tex\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/?cycle=2024&q=Tex\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:194:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 194
                    },
                    "snippet": "\u001b[0m \u001b[90m 192 |\u001b[39m     \u001b[36mreturn\u001b[39m { states\u001b[33m:\u001b[39m [{ id\u001b[33m:\u001b[39m \u001b[32m'state-1'\u001b[39m\u001b[33m,\u001b[39m name\u001b[33m:\u001b[39m \u001b[32m'Texas'\u001b[39m\u001b[33m,\u001b[39m state\u001b[33m:\u001b[39m \u001b[32m'TX'\u001b[39m }]\u001b[33m,\u001b[39m statesConnection\u001b[33m:\u001b[39m { totalCount\u001b[33m:\u001b[39m \u001b[35m1\u001b[39m } }\u001b[33m;\u001b[39m\n \u001b[90m 193 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 194 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/states/?cycle=2024&q=Tex'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 195 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.state-result'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Texas'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 196 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 197 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.state-pagination-info'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'Showing all 1 states'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 194
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/?cycle=2024&q=Tex\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/?cycle=2024&q=Tex\", waiting until \"load\"\u001b[22m\n\n\n  192 |     return { states: [{ id: 'state-1', name: 'Texas', state: 'TX' }], statesConnection: { totalCount: 1 } };\n  193 |   });\n> 194 |   await page.goto('/states/?cycle=2024&q=Tex');\n      |              ^\n  195 |   await expect(page.locator('.state-result')).toContainText('Texas');\n  196 |   await expect(page.locator('.ei-cycle-notice')).toContainText('2024');\n  197 |   await expect(page.locator('.state-pagination-info')).toHaveText('Showing all 1 states');\n    at /app/tests/ui/cycle-index.spec.ts:194:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:48.312Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-specialized-st-fff94-using-exact-CSV-year-tokens-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-specialized-st-fff94-using-exact-CSV-year-tokens-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-specialized-st-fff94-using-exact-CSV-year-tokens-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-specialized-st-fff94-using-exact-CSV-year-tokens-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 194
                  }
                },
                {
                  "workerIndex": 861,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 181,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/?cycle=2024&q=Tex\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/?cycle=2024&q=Tex\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/?cycle=2024&q=Tex\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/?cycle=2024&q=Tex\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:194:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 194
                    },
                    "snippet": "\u001b[0m \u001b[90m 192 |\u001b[39m     \u001b[36mreturn\u001b[39m { states\u001b[33m:\u001b[39m [{ id\u001b[33m:\u001b[39m \u001b[32m'state-1'\u001b[39m\u001b[33m,\u001b[39m name\u001b[33m:\u001b[39m \u001b[32m'Texas'\u001b[39m\u001b[33m,\u001b[39m state\u001b[33m:\u001b[39m \u001b[32m'TX'\u001b[39m }]\u001b[33m,\u001b[39m statesConnection\u001b[33m:\u001b[39m { totalCount\u001b[33m:\u001b[39m \u001b[35m1\u001b[39m } }\u001b[33m;\u001b[39m\n \u001b[90m 193 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 194 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/states/?cycle=2024&q=Tex'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 195 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.state-result'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Texas'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 196 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 197 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.state-pagination-info'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'Showing all 1 states'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 194
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/?cycle=2024&q=Tex\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/?cycle=2024&q=Tex\", waiting until \"load\"\u001b[22m\n\n\n  192 |     return { states: [{ id: 'state-1', name: 'Texas', state: 'TX' }], statesConnection: { totalCount: 1 } };\n  193 |   });\n> 194 |   await page.goto('/states/?cycle=2024&q=Tex');\n      |              ^\n  195 |   await expect(page.locator('.state-result')).toContainText('Texas');\n  196 |   await expect(page.locator('.ei-cycle-notice')).toContainText('2024');\n  197 |   await expect(page.locator('.state-pagination-info')).toHaveText('Showing all 1 states');\n    at /app/tests/ui/cycle-index.spec.ts:194:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:49.332Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-specialized-st-fff94-using-exact-CSV-year-tokens-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-specialized-st-fff94-using-exact-CSV-year-tokens-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 194
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "07d5b3b25daacf53cd2a-ad364ff10417c47d1ccc",
          "file": "tests/ui/cycle-index.spec.ts",
          "line": 189,
          "column": 5
        },
        {
          "title": "catalog datasource list explicitly remains all cycles without changing its CMS request",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 876,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 164,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/?cycle=2024&q=FEC\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/?cycle=2024&q=FEC\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/?cycle=2024&q=FEC\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/?cycle=2024&q=FEC\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:217:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 217
                    },
                    "snippet": "\u001b[0m \u001b[90m 215 |\u001b[39m test(\u001b[32m'catalog datasource list explicitly remains all cycles without changing its CMS request'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 216 |\u001b[39m   \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 217 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/datasources/?cycle=2024&q=FEC'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 218 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Data sources cover all cycles'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 219 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/datasources/?q=FEC'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 220 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 217
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/?cycle=2024&q=FEC\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/?cycle=2024&q=FEC\", waiting until \"load\"\u001b[22m\n\n\n  215 | test('catalog datasource list explicitly remains all cycles without changing its CMS request', async ({ page }) => {\n  216 |   await mockAnonymousGraphQL(page);\n> 217 |   await page.goto('/datasources/?cycle=2024&q=FEC');\n      |              ^\n  218 |   await expect(page.locator('.ei-cycle-notice')).toContainText('Data sources cover all cycles');\n  219 |   await page.goto('/datasources/?q=FEC');\n  220 |   await expect(page.locator('.ei-cycle-notice')).toHaveCount(0);\n    at /app/tests/ui/cycle-index.spec.ts:217:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:50.245Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-catalog-dataso-6b2d7-ut-changing-its-CMS-request-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-catalog-dataso-6b2d7-ut-changing-its-CMS-request-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 217
                  }
                },
                {
                  "workerIndex": 890,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 248,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/?cycle=2024&q=FEC\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/?cycle=2024&q=FEC\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/?cycle=2024&q=FEC\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/?cycle=2024&q=FEC\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:217:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 217
                    },
                    "snippet": "\u001b[0m \u001b[90m 215 |\u001b[39m test(\u001b[32m'catalog datasource list explicitly remains all cycles without changing its CMS request'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 216 |\u001b[39m   \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 217 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/datasources/?cycle=2024&q=FEC'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 218 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Data sources cover all cycles'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 219 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/datasources/?q=FEC'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 220 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 217
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/?cycle=2024&q=FEC\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/?cycle=2024&q=FEC\", waiting until \"load\"\u001b[22m\n\n\n  215 | test('catalog datasource list explicitly remains all cycles without changing its CMS request', async ({ page }) => {\n  216 |   await mockAnonymousGraphQL(page);\n> 217 |   await page.goto('/datasources/?cycle=2024&q=FEC');\n      |              ^\n  218 |   await expect(page.locator('.ei-cycle-notice')).toContainText('Data sources cover all cycles');\n  219 |   await page.goto('/datasources/?q=FEC');\n  220 |   await expect(page.locator('.ei-cycle-notice')).toHaveCount(0);\n    at /app/tests/ui/cycle-index.spec.ts:217:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:51.118Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-catalog-dataso-6b2d7-ut-changing-its-CMS-request-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-catalog-dataso-6b2d7-ut-changing-its-CMS-request-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-catalog-dataso-6b2d7-ut-changing-its-CMS-request-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-catalog-dataso-6b2d7-ut-changing-its-CMS-request-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 217
                  }
                },
                {
                  "workerIndex": 907,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 175,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/?cycle=2024&q=FEC\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/?cycle=2024&q=FEC\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/?cycle=2024&q=FEC\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/?cycle=2024&q=FEC\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:217:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 217
                    },
                    "snippet": "\u001b[0m \u001b[90m 215 |\u001b[39m test(\u001b[32m'catalog datasource list explicitly remains all cycles without changing its CMS request'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 216 |\u001b[39m   \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 217 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/datasources/?cycle=2024&q=FEC'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 218 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Data sources cover all cycles'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 219 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/datasources/?q=FEC'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 220 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 217
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/?cycle=2024&q=FEC\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/?cycle=2024&q=FEC\", waiting until \"load\"\u001b[22m\n\n\n  215 | test('catalog datasource list explicitly remains all cycles without changing its CMS request', async ({ page }) => {\n  216 |   await mockAnonymousGraphQL(page);\n> 217 |   await page.goto('/datasources/?cycle=2024&q=FEC');\n      |              ^\n  218 |   await expect(page.locator('.ei-cycle-notice')).toContainText('Data sources cover all cycles');\n  219 |   await page.goto('/datasources/?q=FEC');\n  220 |   await expect(page.locator('.ei-cycle-notice')).toHaveCount(0);\n    at /app/tests/ui/cycle-index.spec.ts:217:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:52.326Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-catalog-dataso-6b2d7-ut-changing-its-CMS-request-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-catalog-dataso-6b2d7-ut-changing-its-CMS-request-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 217
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "07d5b3b25daacf53cd2a-e6514b78618b360eea5f",
          "file": "tests/ui/cycle-index.spec.ts",
          "line": 215,
          "column": 5
        },
        {
          "title": "homepage never waits or displays zero for pending heavy counts, and fills them on the next visit without polling",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 919,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 166,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:230:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 230
                    },
                    "snippet": "\u001b[0m \u001b[90m 228 |\u001b[39m     allCycles\u001b[33m:\u001b[39m [\u001b[32m'blocks'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'counties'\u001b[39m]\u001b[33m,\u001b[39m pending\u001b[33m:\u001b[39m warm \u001b[33m?\u001b[39m [] \u001b[33m:\u001b[39m [\u001b[32m'individuals'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'employers'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'vendors'\u001b[39m]\u001b[33m,\u001b[39m\n \u001b[90m 229 |\u001b[39m   } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 230 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 231 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'7'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 232 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m field \u001b[36mof\u001b[39m [\u001b[32m'individuals'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'employers'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'vendors'\u001b[39m]) {\n \u001b[90m 233 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`#count-${field}`\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'…'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 230
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  228 |     allCycles: ['blocks', 'counties'], pending: warm ? [] : ['individuals', 'employers', 'vendors'],\n  229 |   } }));\n> 230 |   await page.goto('/?cycle=2024');\n      |              ^\n  231 |   await expect(page.locator('#count-politicians')).toHaveText('7');\n  232 |   for (const field of ['individuals', 'employers', 'vendors']) {\n  233 |     await expect(page.locator(`#count-${field}`)).toHaveText('…');\n    at /app/tests/ui/cycle-index.spec.ts:230:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:53.199Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-homepage-never-420b7--next-visit-without-polling-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-homepage-never-420b7--next-visit-without-polling-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 230
                  }
                },
                {
                  "workerIndex": 931,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 240,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:230:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 230
                    },
                    "snippet": "\u001b[0m \u001b[90m 228 |\u001b[39m     allCycles\u001b[33m:\u001b[39m [\u001b[32m'blocks'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'counties'\u001b[39m]\u001b[33m,\u001b[39m pending\u001b[33m:\u001b[39m warm \u001b[33m?\u001b[39m [] \u001b[33m:\u001b[39m [\u001b[32m'individuals'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'employers'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'vendors'\u001b[39m]\u001b[33m,\u001b[39m\n \u001b[90m 229 |\u001b[39m   } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 230 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 231 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'7'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 232 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m field \u001b[36mof\u001b[39m [\u001b[32m'individuals'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'employers'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'vendors'\u001b[39m]) {\n \u001b[90m 233 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`#count-${field}`\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'…'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 230
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  228 |     allCycles: ['blocks', 'counties'], pending: warm ? [] : ['individuals', 'employers', 'vendors'],\n  229 |   } }));\n> 230 |   await page.goto('/?cycle=2024');\n      |              ^\n  231 |   await expect(page.locator('#count-politicians')).toHaveText('7');\n  232 |   for (const field of ['individuals', 'employers', 'vendors']) {\n  233 |     await expect(page.locator(`#count-${field}`)).toHaveText('…');\n    at /app/tests/ui/cycle-index.spec.ts:230:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:54.026Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-homepage-never-420b7--next-visit-without-polling-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-homepage-never-420b7--next-visit-without-polling-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-homepage-never-420b7--next-visit-without-polling-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-homepage-never-420b7--next-visit-without-polling-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 230
                  }
                },
                {
                  "workerIndex": 945,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 156,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:230:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 230
                    },
                    "snippet": "\u001b[0m \u001b[90m 228 |\u001b[39m     allCycles\u001b[33m:\u001b[39m [\u001b[32m'blocks'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'counties'\u001b[39m]\u001b[33m,\u001b[39m pending\u001b[33m:\u001b[39m warm \u001b[33m?\u001b[39m [] \u001b[33m:\u001b[39m [\u001b[32m'individuals'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'employers'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'vendors'\u001b[39m]\u001b[33m,\u001b[39m\n \u001b[90m 229 |\u001b[39m   } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 230 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 231 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'7'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 232 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m field \u001b[36mof\u001b[39m [\u001b[32m'individuals'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'employers'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'vendors'\u001b[39m]) {\n \u001b[90m 233 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`#count-${field}`\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'…'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 230
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  228 |     allCycles: ['blocks', 'counties'], pending: warm ? [] : ['individuals', 'employers', 'vendors'],\n  229 |   } }));\n> 230 |   await page.goto('/?cycle=2024');\n      |              ^\n  231 |   await expect(page.locator('#count-politicians')).toHaveText('7');\n  232 |   for (const field of ['individuals', 'employers', 'vendors']) {\n  233 |     await expect(page.locator(`#count-${field}`)).toHaveText('…');\n    at /app/tests/ui/cycle-index.spec.ts:230:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:54.948Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-homepage-never-420b7--next-visit-without-polling-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-homepage-never-420b7--next-visit-without-polling-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 230
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "07d5b3b25daacf53cd2a-2345a0d898bb53afb7f6",
          "file": "tests/ui/cycle-index.spec.ts",
          "line": 223,
          "column": 5
        },
        {
          "title": "slow Employer directory explicitly stays all cycles, while measured-fast Vendor lists retain the cycle",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 955,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 144,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:252:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 252
                    },
                    "snippet": "\u001b[0m \u001b[90m 250 |\u001b[39m test(\u001b[32m'slow Employer directory explicitly stays all cycles, while measured-fast Vendor lists retain the cycle'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 251 |\u001b[39m   \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 252 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/employers/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 253 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 254 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'all cycles'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 255 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'slow graph scans'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 252
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  250 | test('slow Employer directory explicitly stays all cycles, while measured-fast Vendor lists retain the cycle', async ({ page }) => {\n  251 |   const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 252 |   await page.goto('/employers/?cycle=2024');\n      |              ^\n  253 |   await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  254 |   await expect(page.locator('.ei-cycle-notice')).toContainText('all cycles');\n  255 |   await expect(page.locator('.ei-cycle-notice')).toContainText('slow graph scans');\n    at /app/tests/ui/cycle-index.spec.ts:252:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:55.769Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-slow-Employer--a9165-ndor-lists-retain-the-cycle-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-slow-Employer--a9165-ndor-lists-retain-the-cycle-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 252
                  }
                },
                {
                  "workerIndex": 966,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 226,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:252:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 252
                    },
                    "snippet": "\u001b[0m \u001b[90m 250 |\u001b[39m test(\u001b[32m'slow Employer directory explicitly stays all cycles, while measured-fast Vendor lists retain the cycle'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 251 |\u001b[39m   \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 252 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/employers/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 253 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 254 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'all cycles'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 255 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'slow graph scans'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 252
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  250 | test('slow Employer directory explicitly stays all cycles, while measured-fast Vendor lists retain the cycle', async ({ page }) => {\n  251 |   const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 252 |   await page.goto('/employers/?cycle=2024');\n      |              ^\n  253 |   await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  254 |   await expect(page.locator('.ei-cycle-notice')).toContainText('all cycles');\n  255 |   await expect(page.locator('.ei-cycle-notice')).toContainText('slow graph scans');\n    at /app/tests/ui/cycle-index.spec.ts:252:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:56.619Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-slow-Employer--a9165-ndor-lists-retain-the-cycle-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-slow-Employer--a9165-ndor-lists-retain-the-cycle-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-slow-Employer--a9165-ndor-lists-retain-the-cycle-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-slow-Employer--a9165-ndor-lists-retain-the-cycle-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 252
                  }
                },
                {
                  "workerIndex": 977,
                  "parallelIndex": 5,
                  "status": "failed",
                  "duration": 156,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:252:14",
                    "location": {
                      "file": "/app/tests/ui/cycle-index.spec.ts",
                      "column": 14,
                      "line": 252
                    },
                    "snippet": "\u001b[0m \u001b[90m 250 |\u001b[39m test(\u001b[32m'slow Employer directory explicitly stays all cycles, while measured-fast Vendor lists retain the cycle'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 251 |\u001b[39m   \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 252 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/employers/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 253 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 254 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'all cycles'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 255 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'slow graph scans'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 14,
                        "line": 252
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  250 | test('slow Employer directory explicitly stays all cycles, while measured-fast Vendor lists retain the cycle', async ({ page }) => {\n  251 |   const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 252 |   await page.goto('/employers/?cycle=2024');\n      |              ^\n  253 |   await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  254 |   await expect(page.locator('.ei-cycle-notice')).toContainText('all cycles');\n  255 |   await expect(page.locator('.ei-cycle-notice')).toContainText('slow graph scans');\n    at /app/tests/ui/cycle-index.spec.ts:252:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:57.517Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-slow-Employer--a9165-ndor-lists-retain-the-cycle-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-slow-Employer--a9165-ndor-lists-retain-the-cycle-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/cycle-index.spec.ts",
                    "column": 14,
                    "line": 252
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "07d5b3b25daacf53cd2a-1b35cdfa66c055f8c936",
          "file": "tests/ui/cycle-index.spec.ts",
          "line": 250,
          "column": 5
        }
      ],
      "suites": [
        {
          "title": "cycle-index URL contract (sites#194)",
          "file": "tests/ui/cycle-index.spec.ts",
          "line": 44,
          "column": 6,
          "specs": [
            {
              "title": "homepage uses the fixed cycle-count document only for a supported cycle",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 5,
                      "parallelIndex": 5,
                      "status": "timedOut",
                      "duration": 40043,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 16,
                            "line": 53
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  51 |     });\n  52 |\n> 53 |     await page.goto('/?cycle=2024');\n     |                ^\n  54 |     await expect(page.locator('.ei-cycle-notice')).toContainText(/2024/);\n  55 |     await expect.poll(() => requests.length).toBeGreaterThan(0);\n  56 |     const countRequest = requests.find(request => request.query.includes('cycleEntityCounts'));\n    at /app/tests/ui/cycle-index.spec.ts:53:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.066Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-5543a--only-for-a-supported-cycle-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 48,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 328,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:53:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 16,
                          "line": 53
                        },
                        "snippet": "\u001b[0m \u001b[90m 51 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 52 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 53 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 54 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/2024/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m     \u001b[36mawait\u001b[39m expect\u001b[33m.\u001b[39mpoll(() \u001b[33m=>\u001b[39m requests\u001b[33m.\u001b[39mlength)\u001b[33m.\u001b[39mtoBeGreaterThan(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 56 |\u001b[39m     \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'cycleEntityCounts'\u001b[39m))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 16,
                            "line": 53
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  51 |     });\n  52 |\n> 53 |     await page.goto('/?cycle=2024');\n     |                ^\n  54 |     await expect(page.locator('.ei-cycle-notice')).toContainText(/2024/);\n  55 |     await expect.poll(() => requests.length).toBeGreaterThan(0);\n  56 |     const countRequest = requests.find(request => request.query.includes('cycleEntityCounts'));\n    at /app/tests/ui/cycle-index.spec.ts:53:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:03.949Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-5543a--only-for-a-supported-cycle-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-5543a--only-for-a-supported-cycle-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-5543a--only-for-a-supported-cycle-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-5543a--only-for-a-supported-cycle-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 16,
                        "line": 53
                      }
                    },
                    {
                      "workerIndex": 60,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 266,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:53:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 16,
                          "line": 53
                        },
                        "snippet": "\u001b[0m \u001b[90m 51 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 52 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 53 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 54 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/2024/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m     \u001b[36mawait\u001b[39m expect\u001b[33m.\u001b[39mpoll(() \u001b[33m=>\u001b[39m requests\u001b[33m.\u001b[39mlength)\u001b[33m.\u001b[39mtoBeGreaterThan(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 56 |\u001b[39m     \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'cycleEntityCounts'\u001b[39m))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 16,
                            "line": 53
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  51 |     });\n  52 |\n> 53 |     await page.goto('/?cycle=2024');\n     |                ^\n  54 |     await expect(page.locator('.ei-cycle-notice')).toContainText(/2024/);\n  55 |     await expect.poll(() => requests.length).toBeGreaterThan(0);\n  56 |     const countRequest = requests.find(request => request.query.includes('cycleEntityCounts'));\n    at /app/tests/ui/cycle-index.spec.ts:53:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.064Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-5543a--only-for-a-supported-cycle-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-5543a--only-for-a-supported-cycle-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 16,
                        "line": 53
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "07d5b3b25daacf53cd2a-22bd75ed47108d3cc049",
              "file": "tests/ui/cycle-index.spec.ts",
              "line": 45,
              "column": 7
            },
            {
              "title": "homepage leaves the legacy anonymous counts query unchanged (no cycle)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 81,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 279,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:70:18",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 18,
                          "line": 70
                        },
                        "snippet": "\u001b[0m \u001b[90m 68 |\u001b[39m     test(\u001b[32m`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 69 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m ({ entityCounts\u001b[33m:\u001b[39m \u001b[33mObject\u001b[39m\u001b[33m.\u001b[39mfromEntries(legacyCountFields\u001b[33m.\u001b[39mmap(field \u001b[33m=>\u001b[39m [field\u001b[33m,\u001b[39m \u001b[35m12\u001b[39m])) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 70 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${query}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 71 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'12'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m       \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'entityCounts'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 73 |\u001b[39m       expect(countRequest)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 18,
                            "line": 70
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  68 |     test(`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`, async ({ page }) => {\n  69 |       const requests = await mockAnonymousGraphQL(page, () => ({ entityCounts: Object.fromEntries(legacyCountFields.map(field => [field, 12])) }));\n> 70 |       await page.goto(`/${query}`);\n     |                  ^\n  71 |       await expect(page.locator('#count-politicians')).toHaveText('12');\n  72 |       const countRequest = requests.find(request => request.query.includes('entityCounts'));\n  73 |       expect(countRequest).toBeTruthy();\n    at /app/tests/ui/cycle-index.spec.ts:70:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.233Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-63762-s-query-unchanged-no-cycle--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-63762-s-query-unchanged-no-cycle--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 70
                      }
                    },
                    {
                      "workerIndex": 112,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 434,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:70:18",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 18,
                          "line": 70
                        },
                        "snippet": "\u001b[0m \u001b[90m 68 |\u001b[39m     test(\u001b[32m`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 69 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m ({ entityCounts\u001b[33m:\u001b[39m \u001b[33mObject\u001b[39m\u001b[33m.\u001b[39mfromEntries(legacyCountFields\u001b[33m.\u001b[39mmap(field \u001b[33m=>\u001b[39m [field\u001b[33m,\u001b[39m \u001b[35m12\u001b[39m])) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 70 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${query}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 71 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'12'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m       \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'entityCounts'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 73 |\u001b[39m       expect(countRequest)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 18,
                            "line": 70
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  68 |     test(`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`, async ({ page }) => {\n  69 |       const requests = await mockAnonymousGraphQL(page, () => ({ entityCounts: Object.fromEntries(legacyCountFields.map(field => [field, 12])) }));\n> 70 |       await page.goto(`/${query}`);\n     |                  ^\n  71 |       await expect(page.locator('#count-politicians')).toHaveText('12');\n  72 |       const countRequest = requests.find(request => request.query.includes('entityCounts'));\n  73 |       expect(countRequest).toBeTruthy();\n    at /app/tests/ui/cycle-index.spec.ts:70:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.364Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-63762-s-query-unchanged-no-cycle--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-63762-s-query-unchanged-no-cycle--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-63762-s-query-unchanged-no-cycle--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-63762-s-query-unchanged-no-cycle--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 70
                      }
                    },
                    {
                      "workerIndex": 147,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 232,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:70:18",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 18,
                          "line": 70
                        },
                        "snippet": "\u001b[0m \u001b[90m 68 |\u001b[39m     test(\u001b[32m`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 69 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m ({ entityCounts\u001b[33m:\u001b[39m \u001b[33mObject\u001b[39m\u001b[33m.\u001b[39mfromEntries(legacyCountFields\u001b[33m.\u001b[39mmap(field \u001b[33m=>\u001b[39m [field\u001b[33m,\u001b[39m \u001b[35m12\u001b[39m])) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 70 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${query}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 71 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'12'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m       \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'entityCounts'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 73 |\u001b[39m       expect(countRequest)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 18,
                            "line": 70
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  68 |     test(`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`, async ({ page }) => {\n  69 |       const requests = await mockAnonymousGraphQL(page, () => ({ entityCounts: Object.fromEntries(legacyCountFields.map(field => [field, 12])) }));\n> 70 |       await page.goto(`/${query}`);\n     |                  ^\n  71 |       await expect(page.locator('#count-politicians')).toHaveText('12');\n  72 |       const countRequest = requests.find(request => request.query.includes('entityCounts'));\n  73 |       expect(countRequest).toBeTruthy();\n    at /app/tests/ui/cycle-index.spec.ts:70:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.729Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-63762-s-query-unchanged-no-cycle--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-63762-s-query-unchanged-no-cycle--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 70
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "07d5b3b25daacf53cd2a-eaf998ed2344bec97480",
              "file": "tests/ui/cycle-index.spec.ts",
              "line": 68,
              "column": 9
            },
            {
              "title": "homepage leaves the legacy anonymous counts query unchanged (?cycle=2023)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 175,
                      "parallelIndex": 5,
                      "status": "timedOut",
                      "duration": 40037,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 18,
                            "line": 70
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  68 |     test(`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`, async ({ page }) => {\n  69 |       const requests = await mockAnonymousGraphQL(page, () => ({ entityCounts: Object.fromEntries(legacyCountFields.map(field => [field, 12])) }));\n> 70 |       await page.goto(`/${query}`);\n     |                  ^\n  71 |       await expect(page.locator('#count-politicians')).toHaveText('12');\n  72 |       const countRequest = requests.find(request => request.query.includes('entityCounts'));\n  73 |       expect(countRequest).toBeTruthy();\n    at /app/tests/ui/cycle-index.spec.ts:70:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.844Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-fbe7c-query-unchanged-cycle-2023--ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 199,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 11498,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:70:18",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 18,
                          "line": 70
                        },
                        "snippet": "\u001b[0m \u001b[90m 68 |\u001b[39m     test(\u001b[32m`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 69 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m ({ entityCounts\u001b[33m:\u001b[39m \u001b[33mObject\u001b[39m\u001b[33m.\u001b[39mfromEntries(legacyCountFields\u001b[33m.\u001b[39mmap(field \u001b[33m=>\u001b[39m [field\u001b[33m,\u001b[39m \u001b[35m12\u001b[39m])) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 70 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${query}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 71 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'12'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m       \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'entityCounts'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 73 |\u001b[39m       expect(countRequest)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 18,
                            "line": 70
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  68 |     test(`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`, async ({ page }) => {\n  69 |       const requests = await mockAnonymousGraphQL(page, () => ({ entityCounts: Object.fromEntries(legacyCountFields.map(field => [field, 12])) }));\n> 70 |       await page.goto(`/${query}`);\n     |                  ^\n  71 |       await expect(page.locator('#count-politicians')).toHaveText('12');\n  72 |       const countRequest = requests.find(request => request.query.includes('entityCounts'));\n  73 |       expect(countRequest).toBeTruthy();\n    at /app/tests/ui/cycle-index.spec.ts:70:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.630Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-fbe7c-query-unchanged-cycle-2023--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-fbe7c-query-unchanged-cycle-2023--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-fbe7c-query-unchanged-cycle-2023--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-fbe7c-query-unchanged-cycle-2023--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 70
                      }
                    },
                    {
                      "workerIndex": 214,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 163,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:70:18",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 18,
                          "line": 70
                        },
                        "snippet": "\u001b[0m \u001b[90m 68 |\u001b[39m     test(\u001b[32m`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 69 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m ({ entityCounts\u001b[33m:\u001b[39m \u001b[33mObject\u001b[39m\u001b[33m.\u001b[39mfromEntries(legacyCountFields\u001b[33m.\u001b[39mmap(field \u001b[33m=>\u001b[39m [field\u001b[33m,\u001b[39m \u001b[35m12\u001b[39m])) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 70 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${query}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 71 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'12'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m       \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'entityCounts'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 73 |\u001b[39m       expect(countRequest)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 18,
                            "line": 70
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2023\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2023\", waiting until \"load\"\u001b[22m\n\n\n  68 |     test(`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`, async ({ page }) => {\n  69 |       const requests = await mockAnonymousGraphQL(page, () => ({ entityCounts: Object.fromEntries(legacyCountFields.map(field => [field, 12])) }));\n> 70 |       await page.goto(`/${query}`);\n     |                  ^\n  71 |       await expect(page.locator('#count-politicians')).toHaveText('12');\n  72 |       const countRequest = requests.find(request => request.query.includes('entityCounts'));\n  73 |       expect(countRequest).toBeTruthy();\n    at /app/tests/ui/cycle-index.spec.ts:70:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:02.854Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-fbe7c-query-unchanged-cycle-2023--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-fbe7c-query-unchanged-cycle-2023--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 70
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "07d5b3b25daacf53cd2a-d84c51ce2ce2b956ef67",
              "file": "tests/ui/cycle-index.spec.ts",
              "line": 68,
              "column": 9
            },
            {
              "title": "homepage leaves the legacy anonymous counts query unchanged (?cycle=invalid)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 226,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=invalid\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=invalid\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=invalid\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=invalid\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:70:18",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 18,
                          "line": 70
                        },
                        "snippet": "\u001b[0m \u001b[90m 68 |\u001b[39m     test(\u001b[32m`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 69 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m ({ entityCounts\u001b[33m:\u001b[39m \u001b[33mObject\u001b[39m\u001b[33m.\u001b[39mfromEntries(legacyCountFields\u001b[33m.\u001b[39mmap(field \u001b[33m=>\u001b[39m [field\u001b[33m,\u001b[39m \u001b[35m12\u001b[39m])) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 70 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${query}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 71 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'12'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m       \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'entityCounts'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 73 |\u001b[39m       expect(countRequest)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 18,
                            "line": 70
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=invalid\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=invalid\", waiting until \"load\"\u001b[22m\n\n\n  68 |     test(`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`, async ({ page }) => {\n  69 |       const requests = await mockAnonymousGraphQL(page, () => ({ entityCounts: Object.fromEntries(legacyCountFields.map(field => [field, 12])) }));\n> 70 |       await page.goto(`/${query}`);\n     |                  ^\n  71 |       await expect(page.locator('#count-politicians')).toHaveText('12');\n  72 |       const countRequest = requests.find(request => request.query.includes('entityCounts'));\n  73 |       expect(countRequest).toBeTruthy();\n    at /app/tests/ui/cycle-index.spec.ts:70:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:03.797Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-9f23a-ry-unchanged-cycle-invalid--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-9f23a-ry-unchanged-cycle-invalid--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 70
                      }
                    },
                    {
                      "workerIndex": 240,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 277,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=invalid\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=invalid\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=invalid\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=invalid\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:70:18",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 18,
                          "line": 70
                        },
                        "snippet": "\u001b[0m \u001b[90m 68 |\u001b[39m     test(\u001b[32m`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 69 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m ({ entityCounts\u001b[33m:\u001b[39m \u001b[33mObject\u001b[39m\u001b[33m.\u001b[39mfromEntries(legacyCountFields\u001b[33m.\u001b[39mmap(field \u001b[33m=>\u001b[39m [field\u001b[33m,\u001b[39m \u001b[35m12\u001b[39m])) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 70 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${query}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 71 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'12'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m       \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'entityCounts'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 73 |\u001b[39m       expect(countRequest)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 18,
                            "line": 70
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=invalid\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=invalid\", waiting until \"load\"\u001b[22m\n\n\n  68 |     test(`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`, async ({ page }) => {\n  69 |       const requests = await mockAnonymousGraphQL(page, () => ({ entityCounts: Object.fromEntries(legacyCountFields.map(field => [field, 12])) }));\n> 70 |       await page.goto(`/${query}`);\n     |                  ^\n  71 |       await expect(page.locator('#count-politicians')).toHaveText('12');\n  72 |       const countRequest = requests.find(request => request.query.includes('entityCounts'));\n  73 |       expect(countRequest).toBeTruthy();\n    at /app/tests/ui/cycle-index.spec.ts:70:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:04.732Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-9f23a-ry-unchanged-cycle-invalid--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-9f23a-ry-unchanged-cycle-invalid--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-9f23a-ry-unchanged-cycle-invalid--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-9f23a-ry-unchanged-cycle-invalid--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 70
                      }
                    },
                    {
                      "workerIndex": 255,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=invalid\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=invalid\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=invalid\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=invalid\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:70:18",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 18,
                          "line": 70
                        },
                        "snippet": "\u001b[0m \u001b[90m 68 |\u001b[39m     test(\u001b[32m`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 69 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m ({ entityCounts\u001b[33m:\u001b[39m \u001b[33mObject\u001b[39m\u001b[33m.\u001b[39mfromEntries(legacyCountFields\u001b[33m.\u001b[39mmap(field \u001b[33m=>\u001b[39m [field\u001b[33m,\u001b[39m \u001b[35m12\u001b[39m])) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 70 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${query}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 71 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'12'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m       \u001b[36mconst\u001b[39m countRequest \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'entityCounts'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 73 |\u001b[39m       expect(countRequest)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 18,
                            "line": 70
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=invalid\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=invalid\", waiting until \"load\"\u001b[22m\n\n\n  68 |     test(`homepage leaves the legacy anonymous counts query unchanged (${query || 'no cycle'})`, async ({ page }) => {\n  69 |       const requests = await mockAnonymousGraphQL(page, () => ({ entityCounts: Object.fromEntries(legacyCountFields.map(field => [field, 12])) }));\n> 70 |       await page.goto(`/${query}`);\n     |                  ^\n  71 |       await expect(page.locator('#count-politicians')).toHaveText('12');\n  72 |       const countRequest = requests.find(request => request.query.includes('entityCounts'));\n  73 |       expect(countRequest).toBeTruthy();\n    at /app/tests/ui/cycle-index.spec.ts:70:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:05.711Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-9f23a-ry-unchanged-cycle-invalid--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-9f23a-ry-unchanged-cycle-invalid--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 18,
                        "line": 70
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "07d5b3b25daacf53cd2a-d04b1f0327abf30221ad",
              "file": "tests/ui/cycle-index.spec.ts",
              "line": 68,
              "column": 9
            },
            {
              "title": "supported candidate and committee browse/search requests carry cycle and retain URL state",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 271,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:85:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 16,
                          "line": 85
                        },
                        "snippet": "\u001b[0m \u001b[90m 83 |\u001b[39m   test(\u001b[32m'supported candidate and committee browse/search requests carry cycle and retain URL state'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 84 |\u001b[39m     \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 85 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/candidates/?cycle=2024&page=2&f_state=TX'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 86 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/2024/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 87 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 88 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 16,
                            "line": 85
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\", waiting until \"load\"\u001b[22m\n\n\n  83 |   test('supported candidate and committee browse/search requests carry cycle and retain URL state', async ({ page }) => {\n  84 |     const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 85 |     await page.goto('/candidates/?cycle=2024&page=2&f_state=TX');\n     |                ^\n  86 |     await expect(page.locator('.ei-cycle-notice')).toContainText(/2024/);\n  87 |     await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  88 |\n    at /app/tests/ui/cycle-index.spec.ts:85:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:06.656Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-c53a8--cycle-and-retain-URL-state-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-c53a8--cycle-and-retain-URL-state-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 16,
                        "line": 85
                      }
                    },
                    {
                      "workerIndex": 287,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 270,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:85:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 16,
                          "line": 85
                        },
                        "snippet": "\u001b[0m \u001b[90m 83 |\u001b[39m   test(\u001b[32m'supported candidate and committee browse/search requests carry cycle and retain URL state'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 84 |\u001b[39m     \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m entityResponse)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 85 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/candidates/?cycle=2024&page=2&f_state=TX'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 86 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/2024/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 87 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 88 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 16,
                            "line": 85
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\", waiting until \"load\"\u001b[22m\n\n\n  83 |   test('supported candidate and committee browse/search requests carry cycle and retain URL state', async ({ page }) => {\n  84 |     const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 85 |     await page.goto('/candidates/?cycle=2024&page=2&f_state=TX');\n     |                ^\n  86 |     await expect(page.locator('.ei-cycle-notice')).toContainText(/2024/);\n  87 |     await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  88 |\n    at /app/tests/ui/cycle-index.spec.ts:85:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:07.611Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-c53a8--cycle-and-retain-URL-state-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-c53a8--cycle-and-retain-URL-state-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-c53a8--cycle-and-retain-URL-state-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-c53a8--cycle-and-retain-URL-state-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 16,
                        "line": 85
                      }
                    },
                    {
                      "workerIndex": 304,
                      "parallelIndex": 5,
                      "status": "timedOut",
                      "duration": 40035,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 16,
                            "line": 85
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/?cycle=2024&page=2&f_state=TX\", waiting until \"load\"\u001b[22m\n\n\n  83 |   test('supported candidate and committee browse/search requests carry cycle and retain URL state', async ({ page }) => {\n  84 |     const requests = await mockAnonymousGraphQL(page, entityResponse);\n> 85 |     await page.goto('/candidates/?cycle=2024&page=2&f_state=TX');\n     |                ^\n  86 |     await expect(page.locator('.ei-cycle-notice')).toContainText(/2024/);\n  87 |     await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  88 |\n    at /app/tests/ui/cycle-index.spec.ts:85:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:08.679Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-c53a8--cycle-and-retain-URL-state-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "07d5b3b25daacf53cd2a-598053d864c7c1b7d87f",
              "file": "tests/ui/cycle-index.spec.ts",
              "line": 83,
              "column": 7
            },
            {
              "title": "supported index types scope results; unsupported county counts stay lifetime and explain scope",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 348,
                      "parallelIndex": 5,
                      "status": "timedOut",
                      "duration": 40045,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 16,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  118 |   test('supported index types scope results; unsupported county counts stay lifetime and explain scope', async ({ page }) => {\n  119 |     const requests = await mockAnonymousGraphQL(page, request => request.query.includes('Entities(') ? entityResponse(request) : request.query.includes('query Counties') ? { counties: [], countiesConnection: { totalCount: 0 } } : { states: [{ name: 'Texas', state: 'TX' }] });\n> 120 |     await page.goto('/parties/?cycle=2024');\n      |                ^\n  121 |     await expect(page.locator('.ei-cycle-notice')).toContainText(/2024/);\n  122 |     await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  123 |     const parties = requests.find(request => request.query.includes('browseEntities('));\n    at /app/tests/ui/cycle-index.spec.ts:120:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:49.337Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-eb97d--lifetime-and-explain-scope-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 466,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 224,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:120:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 16,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m   test(\u001b[32m'supported index types scope results; unsupported county counts stay lifetime and explain scope'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m     \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'Entities('\u001b[39m) \u001b[33m?\u001b[39m entityResponse(request) \u001b[33m:\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'query Counties'\u001b[39m) \u001b[33m?\u001b[39m { counties\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m countiesConnection\u001b[33m:\u001b[39m { totalCount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m } } \u001b[33m:\u001b[39m { states\u001b[33m:\u001b[39m [{ name\u001b[33m:\u001b[39m \u001b[32m'Texas'\u001b[39m\u001b[33m,\u001b[39m state\u001b[33m:\u001b[39m \u001b[32m'TX'\u001b[39m }] })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/parties/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/2024/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m     \u001b[36mconst\u001b[39m parties \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 16,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  118 |   test('supported index types scope results; unsupported county counts stay lifetime and explain scope', async ({ page }) => {\n  119 |     const requests = await mockAnonymousGraphQL(page, request => request.query.includes('Entities(') ? entityResponse(request) : request.query.includes('query Counties') ? { counties: [], countiesConnection: { totalCount: 0 } } : { states: [{ name: 'Texas', state: 'TX' }] });\n> 120 |     await page.goto('/parties/?cycle=2024');\n      |                ^\n  121 |     await expect(page.locator('.ei-cycle-notice')).toContainText(/2024/);\n  122 |     await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  123 |     const parties = requests.find(request => request.query.includes('browseEntities('));\n    at /app/tests/ui/cycle-index.spec.ts:120:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:30.074Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-eb97d--lifetime-and-explain-scope-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-eb97d--lifetime-and-explain-scope-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-eb97d--lifetime-and-explain-scope-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-eb97d--lifetime-and-explain-scope-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 16,
                        "line": 120
                      }
                    },
                    {
                      "workerIndex": 477,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/cycle-index.spec.ts:120:16",
                        "location": {
                          "file": "/app/tests/ui/cycle-index.spec.ts",
                          "column": 16,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m   test(\u001b[32m'supported index types scope results; unsupported county counts stay lifetime and explain scope'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m     \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m mockAnonymousGraphQL(page\u001b[33m,\u001b[39m request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'Entities('\u001b[39m) \u001b[33m?\u001b[39m entityResponse(request) \u001b[33m:\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'query Counties'\u001b[39m) \u001b[33m?\u001b[39m { counties\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m countiesConnection\u001b[33m:\u001b[39m { totalCount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m } } \u001b[33m:\u001b[39m { states\u001b[33m:\u001b[39m [{ name\u001b[33m:\u001b[39m \u001b[32m'Texas'\u001b[39m\u001b[33m,\u001b[39m state\u001b[33m:\u001b[39m \u001b[32m'TX'\u001b[39m }] })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/parties/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.ei-cycle-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/2024/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m     \u001b[36mconst\u001b[39m parties \u001b[33m=\u001b[39m requests\u001b[33m.\u001b[39mfind(request \u001b[33m=>\u001b[39m request\u001b[33m.\u001b[39mquery\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities('\u001b[39m))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/cycle-index.spec.ts",
                            "column": 16,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  118 |   test('supported index types scope results; unsupported county counts stay lifetime and explain scope', async ({ page }) => {\n  119 |     const requests = await mockAnonymousGraphQL(page, request => request.query.includes('Entities(') ? entityResponse(request) : request.query.includes('query Counties') ? { counties: [], countiesConnection: { totalCount: 0 } } : { states: [{ name: 'Texas', state: 'TX' }] });\n> 120 |     await page.goto('/parties/?cycle=2024');\n      |                ^\n  121 |     await expect(page.locator('.ei-cycle-notice')).toContainText(/2024/);\n  122 |     await expect(page.locator('.entity-search-result').first()).toBeVisible();\n  123 |     const parties = requests.find(request => request.query.includes('browseEntities('));\n    at /app/tests/ui/cycle-index.spec.ts:120:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:30.966Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-eb97d--lifetime-and-explain-scope-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-eb97d--lifetime-and-explain-scope-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/cycle-index.spec.ts",
                        "column": 16,
                        "line": 120
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "07d5b3b25daacf53cd2a-275f1b6e0da5808ad21d",
              "file": "tests/ui/cycle-index.spec.ts",
              "line": 118,
              "column": 7
            },
            {
              "title": "individual global cycle facet is passed to the API independently of lifetime/profile data",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 494,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 153,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/cycle-index.spec.ts:138:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/cycle-index.spec.ts:138:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:31.883Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-78d64-ly-of-lifetime-profile-data-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-78d64-ly-of-lifetime-profile-data-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 515,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 310,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/cycle-index.spec.ts:138:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/cycle-index.spec.ts:138:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:32.799Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-78d64-ly-of-lifetime-profile-data-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-78d64-ly-of-lifetime-profile-data-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-78d64-ly-of-lifetime-profile-data-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-78d64-ly-of-lifetime-profile-data-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 539,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 179,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/cycle-index.spec.ts:138:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/cycle-index.spec.ts:138:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.976Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-78d64-ly-of-lifetime-profile-data-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/cycle-index-cycle-index-UR-78d64-ly-of-lifetime-profile-data-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "07d5b3b25daacf53cd2a-dc8d6406aa6c5ca9cdac",
              "file": "tests/ui/cycle-index.spec.ts",
              "line": 137,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/data-contracts.spec.ts",
      "file": "tests/ui/data-contracts.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "graph data contracts",
          "file": "tests/ui/data-contracts.spec.ts",
          "line": 24,
          "column": 6,
          "specs": [
            {
              "title": "county state_fips + county_fips is the GEOID tracts and blocks join on",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 6,
                      "parallelIndex": 6,
                      "status": "timedOut",
                      "duration": 30021,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 140\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:26:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.157Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--abc6d-D-tracts-and-blocks-join-on-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 36,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 11302,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 140\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 140\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:26:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 140\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:26:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.782Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--abc6d-D-tracts-and-blocks-join-on-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--abc6d-D-tracts-and-blocks-join-on-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 74,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 33,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 140\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 140\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:26:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 140\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:26:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:06.063Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--abc6d-D-tracts-and-blocks-join-on-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "370fc745607416148837-f384fe1a5980f6fbbab9",
              "file": "tests/ui/data-contracts.spec.ts",
              "line": 25,
              "column": 7
            },
            {
              "title": "precincts join on the 5-digit county GEOID",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 100,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 100\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 100\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:51:27",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 100\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:51:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.849Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--b7f4b-on-the-5-digit-county-GEOID-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 123,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 100,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 100\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 100\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:51:27",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 100\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:51:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.659Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--b7f4b-on-the-5-digit-county-GEOID-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--b7f4b-on-the-5-digit-county-GEOID-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 138,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 100\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 100\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:51:27",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 100\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:51:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.564Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--b7f4b-on-the-5-digit-county-GEOID-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "370fc745607416148837-4429b8eac19c273f24bb",
              "file": "tests/ui/data-contracts.spec.ts",
              "line": 50,
              "column": 7
            },
            {
              "title": "candidate ids are UUID5s and carry their FEC id",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 162,
                      "parallelIndex": 6,
                      "status": "timedOut",
                      "duration": 30032,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 128\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:59:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.395Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--a1727-ID5s-and-carry-their-FEC-id-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 189,
                      "parallelIndex": 6,
                      "status": "timedOut",
                      "duration": 30036,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 128\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:59:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:40.015Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--a1727-ID5s-and-carry-their-FEC-id-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--a1727-ID5s-and-carry-their-FEC-id-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 325,
                      "parallelIndex": 6,
                      "status": "timedOut",
                      "duration": 30025,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 128\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:59:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:10.626Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--a1727-ID5s-and-carry-their-FEC-id-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "370fc745607416148837-0d399e3f265b47191366",
              "file": "tests/ui/data-contracts.spec.ts",
              "line": 58,
              "column": 7
            },
            {
              "title": "Party exposes its FEC code",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 339,
                      "parallelIndex": 6,
                      "status": "timedOut",
                      "duration": 30024,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 118\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:73:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:41.177Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--26885--Party-exposes-its-FEC-code-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 435,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 19324,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 118\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 118\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:73:34",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 118\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:73:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:11.735Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--26885--Party-exposes-its-FEC-code-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--26885--Party-exposes-its-FEC-code-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 491,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 118\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 118\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:73:34",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 118\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:73:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:31.746Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--26885--Party-exposes-its-FEC-code-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "370fc745607416148837-a452252060391ae22369",
              "file": "tests/ui/data-contracts.spec.ts",
              "line": 71,
              "column": 7
            },
            {
              "title": "the graph serves every scalar the schema declares (seeded sample per type)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 240000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 506,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 203\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 203\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:102:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 203\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:102:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.477Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--96f60-res-seeded-sample-per-type--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 523,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 62,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 203\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 203\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:102:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 203\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:102:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:33.216Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--96f60-res-seeded-sample-per-type--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--96f60-res-seeded-sample-per-type--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 544,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 203\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 203\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:102:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 203\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:102:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:34.058Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--96f60-res-seeded-sample-per-type--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "370fc745607416148837-83e55b3a887e2ecf6eaf",
              "file": "tests/ui/data-contracts.spec.ts",
              "line": 81,
              "column": 7
            },
            {
              "title": "entity counts stay above the accepted baseline",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 561,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 192\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 192\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:166:39",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 192\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:166:39"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.780Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--09b9a-above-the-accepted-baseline-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 578,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 61,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 192\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 192\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:166:39",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 192\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:166:39"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.511Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--09b9a-above-the-accepted-baseline-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--09b9a-above-the-accepted-baseline-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 597,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 192\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 192\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:166:39",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 192\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/data-contracts.spec.ts:166:39"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.334Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/data-contracts-graph-data--09b9a-above-the-accepted-baseline-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "370fc745607416148837-d1674ff7d0fddc5795da",
              "file": "tests/ui/data-contracts.spec.ts",
              "line": 164,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/disabled-pages.spec.ts",
      "file": "tests/ui/disabled-pages.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "disabled entity pages",
          "file": "tests/ui/disabled-pages.spec.ts",
          "line": 8,
          "column": 6,
          "specs": [
            {
              "title": "/contributors returns 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 7,
                      "parallelIndex": 7,
                      "status": "timedOut",
                      "duration": 40039,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.044Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 45,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 324,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:03.899Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 57,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 288,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.050Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-eeaf2a96904f5fab5855",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 11,
              "column": 11
            },
            {
              "title": "/contributors/ returns 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 82,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 238,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.240Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 111,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 390,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.375Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 144,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 233,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.693Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-15012-es-contributors-returns-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-4ef4084687b4fd401e0e",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 11,
              "column": 11
            },
            {
              "title": "/contributors/any-entity-id/ returns 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 170,
                      "parallelIndex": 7,
                      "status": "timedOut",
                      "duration": 40034,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.791Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-dad75-s-any-entity-id-returns-404-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 198,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 11628,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/any-entity-id/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.587Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-dad75-s-any-entity-id-returns-404-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-dad75-s-any-entity-id-returns-404-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-dad75-s-any-entity-id-returns-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-dad75-s-any-entity-id-returns-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 215,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 143,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/any-entity-id/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/contributors/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/contributors/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:02.899Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-dad75-s-any-entity-id-returns-404-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-dad75-s-any-entity-id-returns-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-e3ed295c83582d4283c6",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 11,
              "column": 11
            },
            {
              "title": "homepage has no link or visible card for /contributors/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 228,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 158,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:18:18",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 18,
                          "line": 18
                        },
                        "snippet": "\u001b[0m \u001b[90m 16 |\u001b[39m\n \u001b[90m 17 |\u001b[39m     test(\u001b[32m`homepage has no link or visible card for /${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 18 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`a[href^=\"/${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`[data-collection=\"${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 18,
                            "line": 18
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  16 |\n  17 |     test(`homepage has no link or visible card for /${collection}/`, async ({ page }) => {\n> 18 |       await page.goto('/');\n     |                  ^\n  19 |       await expect(page.locator(`a[href^=\"/${collection}\"]`)).toHaveCount(0);\n  20 |       await expect(page.locator(`[data-collection=\"${collection}\"]`)).toBeHidden();\n  21 |     });\n    at /app/tests/ui/disabled-pages.spec.ts:18:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:03.831Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-a3004-ible-card-for-contributors--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-a3004-ible-card-for-contributors--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 18,
                        "line": 18
                      }
                    },
                    {
                      "workerIndex": 242,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 266,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:18:18",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 18,
                          "line": 18
                        },
                        "snippet": "\u001b[0m \u001b[90m 16 |\u001b[39m\n \u001b[90m 17 |\u001b[39m     test(\u001b[32m`homepage has no link or visible card for /${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 18 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`a[href^=\"/${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`[data-collection=\"${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 18,
                            "line": 18
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  16 |\n  17 |     test(`homepage has no link or visible card for /${collection}/`, async ({ page }) => {\n> 18 |       await page.goto('/');\n     |                  ^\n  19 |       await expect(page.locator(`a[href^=\"/${collection}\"]`)).toHaveCount(0);\n  20 |       await expect(page.locator(`[data-collection=\"${collection}\"]`)).toBeHidden();\n  21 |     });\n    at /app/tests/ui/disabled-pages.spec.ts:18:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:04.697Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-a3004-ible-card-for-contributors--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-a3004-ible-card-for-contributors--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-a3004-ible-card-for-contributors--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-a3004-ible-card-for-contributors--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 18,
                        "line": 18
                      }
                    },
                    {
                      "workerIndex": 254,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 160,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:18:18",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 18,
                          "line": 18
                        },
                        "snippet": "\u001b[0m \u001b[90m 16 |\u001b[39m\n \u001b[90m 17 |\u001b[39m     test(\u001b[32m`homepage has no link or visible card for /${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 18 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`a[href^=\"/${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`[data-collection=\"${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 18,
                            "line": 18
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  16 |\n  17 |     test(`homepage has no link or visible card for /${collection}/`, async ({ page }) => {\n> 18 |       await page.goto('/');\n     |                  ^\n  19 |       await expect(page.locator(`a[href^=\"/${collection}\"]`)).toHaveCount(0);\n  20 |       await expect(page.locator(`[data-collection=\"${collection}\"]`)).toBeHidden();\n  21 |     });\n    at /app/tests/ui/disabled-pages.spec.ts:18:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:05.701Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-a3004-ible-card-for-contributors--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-a3004-ible-card-for-contributors--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 18,
                        "line": 18
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-dc932c58cabd7e95e978",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 17,
              "column": 9
            },
            {
              "title": "/codesources returns 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 269,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 150,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:06.608Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 285,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 264,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:07.532Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 302,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 155,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:08.594Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-fb06178d006e6578315a",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 11,
              "column": 11
            },
            {
              "title": "/codesources/ returns 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 317,
                      "parallelIndex": 7,
                      "status": "timedOut",
                      "duration": 40032,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:09.437Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 357,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 11504,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:50.062Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 367,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 160,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:02.319Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-entity-pages-codesources-returns-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-8235710cd0b53cf94f3d",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 11,
              "column": 11
            },
            {
              "title": "/codesources/any-entity-id/ returns 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 376,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/any-entity-id/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:03.242Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-808a2-s-any-entity-id-returns-404-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-808a2-s-any-entity-id-returns-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 385,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 230,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/any-entity-id/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:04.117Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-808a2-s-any-entity-id-returns-404-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-808a2-s-any-entity-id-returns-404-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-808a2-s-any-entity-id-returns-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-808a2-s-any-entity-id-returns-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 396,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 174,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/any-entity-id/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:12:37",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 37,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`/${collection}/any-entity-id/`\u001b[39m]) {\n \u001b[90m 11 |\u001b[39m       test(\u001b[32m`${path} returns 404`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m         \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m         expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m       })\u001b[33m;\u001b[39m\n \u001b[90m 15 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 37,
                            "line": 12
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/codesources/any-entity-id/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/codesources/any-entity-id/\", waiting until \"load\"\u001b[22m\n\n\n  10 |     for (const path of [`/${collection}`, `/${collection}/`, `/${collection}/any-entity-id/`]) {\n  11 |       test(`${path} returns 404`, async ({ page }) => {\n> 12 |         const response = await page.goto(path);\n     |                                     ^\n  13 |         expect(response?.status()).toBe(404);\n  14 |       });\n  15 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:12:37"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:05.090Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-808a2-s-any-entity-id-returns-404-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-808a2-s-any-entity-id-returns-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 37,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-d46c47f30cca6317f3ef",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 11,
              "column": 11
            },
            {
              "title": "homepage has no link or visible card for /codesources/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 406,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 153,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:18:18",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 18,
                          "line": 18
                        },
                        "snippet": "\u001b[0m \u001b[90m 16 |\u001b[39m\n \u001b[90m 17 |\u001b[39m     test(\u001b[32m`homepage has no link or visible card for /${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 18 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`a[href^=\"/${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`[data-collection=\"${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 18,
                            "line": 18
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  16 |\n  17 |     test(`homepage has no link or visible card for /${collection}/`, async ({ page }) => {\n> 18 |       await page.goto('/');\n     |                  ^\n  19 |       await expect(page.locator(`a[href^=\"/${collection}\"]`)).toHaveCount(0);\n  20 |       await expect(page.locator(`[data-collection=\"${collection}\"]`)).toBeHidden();\n  21 |     });\n    at /app/tests/ui/disabled-pages.spec.ts:18:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:05.931Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-269ae-sible-card-for-codesources--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-269ae-sible-card-for-codesources--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 18,
                        "line": 18
                      }
                    },
                    {
                      "workerIndex": 417,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 221,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:18:18",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 18,
                          "line": 18
                        },
                        "snippet": "\u001b[0m \u001b[90m 16 |\u001b[39m\n \u001b[90m 17 |\u001b[39m     test(\u001b[32m`homepage has no link or visible card for /${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 18 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`a[href^=\"/${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`[data-collection=\"${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 18,
                            "line": 18
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  16 |\n  17 |     test(`homepage has no link or visible card for /${collection}/`, async ({ page }) => {\n> 18 |       await page.goto('/');\n     |                  ^\n  19 |       await expect(page.locator(`a[href^=\"/${collection}\"]`)).toHaveCount(0);\n  20 |       await expect(page.locator(`[data-collection=\"${collection}\"]`)).toBeHidden();\n  21 |     });\n    at /app/tests/ui/disabled-pages.spec.ts:18:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:06.755Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-269ae-sible-card-for-codesources--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-269ae-sible-card-for-codesources--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-269ae-sible-card-for-codesources--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-269ae-sible-card-for-codesources--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 18,
                        "line": 18
                      }
                    },
                    {
                      "workerIndex": 427,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 19834,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:18:18",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 18,
                          "line": 18
                        },
                        "snippet": "\u001b[0m \u001b[90m 16 |\u001b[39m\n \u001b[90m 17 |\u001b[39m     test(\u001b[32m`homepage has no link or visible card for /${collection}/`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 18 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`a[href^=\"/${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`[data-collection=\"${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 18,
                            "line": 18
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  16 |\n  17 |     test(`homepage has no link or visible card for /${collection}/`, async ({ page }) => {\n> 18 |       await page.goto('/');\n     |                  ^\n  19 |       await expect(page.locator(`a[href^=\"/${collection}\"]`)).toHaveCount(0);\n  20 |       await expect(page.locator(`[data-collection=\"${collection}\"]`)).toBeHidden();\n  21 |     });\n    at /app/tests/ui/disabled-pages.spec.ts:18:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:07.647Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-269ae-sible-card-for-codesources--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-269ae-sible-card-for-codesources--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 18,
                        "line": 18
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-315ac629d40ead7d7e3f",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 17,
              "column": 9
            },
            {
              "title": "homepage still shows enabled entity cards",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 446,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 149,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:25:16",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 16,
                          "line": 25
                        },
                        "snippet": "\u001b[0m \u001b[90m 23 |\u001b[39m\n \u001b[90m 24 |\u001b[39m   test(\u001b[32m'homepage still shows enabled entity cards'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 25 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'committees'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'vendors'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'counties'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'places'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'datasources'\u001b[39m]) {\n \u001b[90m 27 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`a[data-collection=\"${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 16,
                            "line": 25
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  23 |\n  24 |   test('homepage still shows enabled entity cards', async ({ page }) => {\n> 25 |     await page.goto('/');\n     |                ^\n  26 |     for (const collection of ['committees', 'vendors', 'counties', 'places', 'datasources']) {\n  27 |       await expect(page.locator(`a[data-collection=\"${collection}\"]`)).toBeVisible();\n  28 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:25:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:28.085Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-839ee--shows-enabled-entity-cards-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-839ee--shows-enabled-entity-cards-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 16,
                        "line": 25
                      }
                    },
                    {
                      "workerIndex": 451,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 226,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:25:16",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 16,
                          "line": 25
                        },
                        "snippet": "\u001b[0m \u001b[90m 23 |\u001b[39m\n \u001b[90m 24 |\u001b[39m   test(\u001b[32m'homepage still shows enabled entity cards'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 25 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'committees'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'vendors'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'counties'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'places'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'datasources'\u001b[39m]) {\n \u001b[90m 27 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`a[data-collection=\"${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 16,
                            "line": 25
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  23 |\n  24 |   test('homepage still shows enabled entity cards', async ({ page }) => {\n> 25 |     await page.goto('/');\n     |                ^\n  26 |     for (const collection of ['committees', 'vendors', 'counties', 'places', 'datasources']) {\n  27 |       await expect(page.locator(`a[data-collection=\"${collection}\"]`)).toBeVisible();\n  28 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:25:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:28.926Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-839ee--shows-enabled-entity-cards-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-839ee--shows-enabled-entity-cards-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-839ee--shows-enabled-entity-cards-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-839ee--shows-enabled-entity-cards-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 16,
                        "line": 25
                      }
                    },
                    {
                      "workerIndex": 460,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 158,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:25:16",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 16,
                          "line": 25
                        },
                        "snippet": "\u001b[0m \u001b[90m 23 |\u001b[39m\n \u001b[90m 24 |\u001b[39m   test(\u001b[32m'homepage still shows enabled entity cards'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 25 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'committees'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'vendors'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'counties'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'places'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'datasources'\u001b[39m]) {\n \u001b[90m 27 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m`a[data-collection=\"${collection}\"]`\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 16,
                            "line": 25
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  23 |\n  24 |   test('homepage still shows enabled entity cards', async ({ page }) => {\n> 25 |     await page.goto('/');\n     |                ^\n  26 |     for (const collection of ['committees', 'vendors', 'counties', 'places', 'datasources']) {\n  27 |       await expect(page.locator(`a[data-collection=\"${collection}\"]`)).toBeVisible();\n  28 |     }\n    at /app/tests/ui/disabled-pages.spec.ts:25:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:29.808Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-839ee--shows-enabled-entity-cards-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-839ee--shows-enabled-entity-cards-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 16,
                        "line": 25
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-9cd10ec808f3bc4b54f0",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 24,
              "column": 7
            },
            {
              "title": "homepage loads without script errors",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 472,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 148,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:34:16",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 16,
                          "line": 34
                        },
                        "snippet": "\u001b[0m \u001b[90m 32 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m err \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(err\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 35 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForLoadState(\u001b[32m'networkidle'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 36 |\u001b[39m     expect(errors)\u001b[33m.\u001b[39mtoEqual([])\u001b[33m;\u001b[39m\n \u001b[90m 37 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 16,
                            "line": 34
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  32 |     const errors: string[] = [];\n  33 |     page.on('pageerror', err => errors.push(err.message));\n> 34 |     await page.goto('/');\n     |                ^\n  35 |     await page.waitForLoadState('networkidle');\n  36 |     expect(errors).toEqual([]);\n  37 |   });\n    at /app/tests/ui/disabled-pages.spec.ts:34:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:30.661Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-9b095-loads-without-script-errors-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-9b095-loads-without-script-errors-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 16,
                        "line": 34
                      }
                    },
                    {
                      "workerIndex": 482,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 288,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:34:16",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 16,
                          "line": 34
                        },
                        "snippet": "\u001b[0m \u001b[90m 32 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m err \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(err\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 35 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForLoadState(\u001b[32m'networkidle'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 36 |\u001b[39m     expect(errors)\u001b[33m.\u001b[39mtoEqual([])\u001b[33m;\u001b[39m\n \u001b[90m 37 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 16,
                            "line": 34
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  32 |     const errors: string[] = [];\n  33 |     page.on('pageerror', err => errors.push(err.message));\n> 34 |     await page.goto('/');\n     |                ^\n  35 |     await page.waitForLoadState('networkidle');\n  36 |     expect(errors).toEqual([]);\n  37 |   });\n    at /app/tests/ui/disabled-pages.spec.ts:34:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:31.540Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-9b095-loads-without-script-errors-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-9b095-loads-without-script-errors-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-9b095-loads-without-script-errors-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-9b095-loads-without-script-errors-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 16,
                        "line": 34
                      }
                    },
                    {
                      "workerIndex": 510,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 186,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:34:16",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 16,
                          "line": 34
                        },
                        "snippet": "\u001b[0m \u001b[90m 32 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m err \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(err\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 35 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForLoadState(\u001b[32m'networkidle'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 36 |\u001b[39m     expect(errors)\u001b[33m.\u001b[39mtoEqual([])\u001b[33m;\u001b[39m\n \u001b[90m 37 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 16,
                            "line": 34
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  32 |     const errors: string[] = [];\n  33 |     page.on('pageerror', err => errors.push(err.message));\n> 34 |     await page.goto('/');\n     |                ^\n  35 |     await page.waitForLoadState('networkidle');\n  36 |     expect(errors).toEqual([]);\n  37 |   });\n    at /app/tests/ui/disabled-pages.spec.ts:34:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:32.638Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-9b095-loads-without-script-errors-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-9b095-loads-without-script-errors-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 16,
                        "line": 34
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-4bdcb6be185099980649",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 31,
              "column": 7
            },
            {
              "title": "disabled-pages runtime script is served",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 530,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 154,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/disabled-pages.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/disabled-pages.js\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/disabled-pages.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/disabled-pages.js\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:40:33",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 33,
                          "line": 40
                        },
                        "snippet": "\u001b[0m \u001b[90m 38 |\u001b[39m\n \u001b[90m 39 |\u001b[39m   test(\u001b[32m'disabled-pages runtime script is served'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 40 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/js/disabled-pages.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 41 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 43 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 33,
                            "line": 40
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/disabled-pages.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/disabled-pages.js\", waiting until \"load\"\u001b[22m\n\n\n  38 |\n  39 |   test('disabled-pages runtime script is served', async ({ page }) => {\n> 40 |     const response = await page.goto('/js/disabled-pages.js');\n     |                                 ^\n  41 |     expect(response?.status()).toBe(200);\n  42 |   });\n  43 | });\n    at /app/tests/ui/disabled-pages.spec.ts:40:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:33.599Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-07214-es-runtime-script-is-served-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-07214-es-runtime-script-is-served-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 33,
                        "line": 40
                      }
                    },
                    {
                      "workerIndex": 552,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 270,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/disabled-pages.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/disabled-pages.js\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/disabled-pages.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/disabled-pages.js\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:40:33",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 33,
                          "line": 40
                        },
                        "snippet": "\u001b[0m \u001b[90m 38 |\u001b[39m\n \u001b[90m 39 |\u001b[39m   test(\u001b[32m'disabled-pages runtime script is served'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 40 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/js/disabled-pages.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 41 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 43 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 33,
                            "line": 40
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/disabled-pages.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/disabled-pages.js\", waiting until \"load\"\u001b[22m\n\n\n  38 |\n  39 |   test('disabled-pages runtime script is served', async ({ page }) => {\n> 40 |     const response = await page.goto('/js/disabled-pages.js');\n     |                                 ^\n  41 |     expect(response?.status()).toBe(200);\n  42 |   });\n  43 | });\n    at /app/tests/ui/disabled-pages.spec.ts:40:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:34.522Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-07214-es-runtime-script-is-served-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-07214-es-runtime-script-is-served-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-07214-es-runtime-script-is-served-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-07214-es-runtime-script-is-served-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 33,
                        "line": 40
                      }
                    },
                    {
                      "workerIndex": 581,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 147,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/disabled-pages.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/disabled-pages.js\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/disabled-pages.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/disabled-pages.js\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/disabled-pages.spec.ts:40:33",
                        "location": {
                          "file": "/app/tests/ui/disabled-pages.spec.ts",
                          "column": 33,
                          "line": 40
                        },
                        "snippet": "\u001b[0m \u001b[90m 38 |\u001b[39m\n \u001b[90m 39 |\u001b[39m   test(\u001b[32m'disabled-pages runtime script is served'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 40 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/js/disabled-pages.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 41 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 43 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/disabled-pages.spec.ts",
                            "column": 33,
                            "line": 40
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/disabled-pages.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/disabled-pages.js\", waiting until \"load\"\u001b[22m\n\n\n  38 |\n  39 |   test('disabled-pages runtime script is served', async ({ page }) => {\n> 40 |     const response = await page.goto('/js/disabled-pages.js');\n     |                                 ^\n  41 |     expect(response?.status()).toBe(200);\n  42 |   });\n  43 | });\n    at /app/tests/ui/disabled-pages.spec.ts:40:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:35.608Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-07214-es-runtime-script-is-served-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/disabled-pages-disabled-en-07214-es-runtime-script-is-served-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/disabled-pages.spec.ts",
                        "column": 33,
                        "line": 40
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "76b2ced8126cfc1f8d6e-41968bac84ec1d02c2e6",
              "file": "tests/ui/disabled-pages.spec.ts",
              "line": 39,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/district-delegates.spec.ts",
      "file": "tests/ui/district-delegates.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "AS delegate district has a current00 canonical and historical98 redirect",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 8,
                  "parallelIndex": 8,
                  "status": "timedOut",
                  "duration": 40041,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=AS&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test timeout of 30000ms exceeded.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:01:23.141Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-AS-dele-0621b-l-and-historical98-redirect-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 47,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 323,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=AS&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=AS&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=AS&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=AS&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=AS&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=AS&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:02:03.904Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-AS-dele-0621b-l-and-historical98-redirect-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-AS-dele-0621b-l-and-historical98-redirect-ui-retry1/error-context.md"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-AS-dele-0621b-l-and-historical98-redirect-ui-retry1/video.webm"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-AS-dele-0621b-l-and-historical98-redirect-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                },
                {
                  "workerIndex": 58,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 255,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=AS&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=AS&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=AS&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=AS&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=AS&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=AS&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:02:05.015Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-AS-dele-0621b-l-and-historical98-redirect-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-AS-dele-0621b-l-and-historical98-redirect-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "878bfbb19a6f264d20bb-e956837d0c897f40f7bd",
          "file": "tests/ui/district-delegates.spec.ts",
          "line": 11,
          "column": 7
        },
        {
          "title": "GU delegate district has a current00 canonical and historical98 redirect",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 79,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 215,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=GU&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=GU&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=GU&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=GU&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=GU&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=GU&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:02:06.189Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-GU-dele-cc4e2-l-and-historical98-redirect-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-GU-dele-cc4e2-l-and-historical98-redirect-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                },
                {
                  "workerIndex": 107,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 395,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=GU&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=GU&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=GU&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=GU&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=GU&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=GU&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:02:07.260Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-GU-dele-cc4e2-l-and-historical98-redirect-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-GU-dele-cc4e2-l-and-historical98-redirect-ui-retry1/error-context.md"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-GU-dele-cc4e2-l-and-historical98-redirect-ui-retry1/video.webm"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-GU-dele-cc4e2-l-and-historical98-redirect-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                },
                {
                  "workerIndex": 140,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 259,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=GU&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=GU&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=GU&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=GU&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=GU&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=GU&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:02:08.599Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-GU-dele-cc4e2-l-and-historical98-redirect-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-GU-dele-cc4e2-l-and-historical98-redirect-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "878bfbb19a6f264d20bb-ea77f7bfef78384e351e",
          "file": "tests/ui/district-delegates.spec.ts",
          "line": 11,
          "column": 7
        },
        {
          "title": "MP delegate district has a current00 canonical and historical98 redirect",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 165,
                  "parallelIndex": 8,
                  "status": "timedOut",
                  "duration": 40047,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=MP&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test timeout of 30000ms exceeded.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:02:09.687Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-MP-dele-d4c82-l-and-historical98-redirect-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 195,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 11605,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=MP&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=MP&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=MP&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=MP&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=MP&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=MP&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:02:50.439Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-MP-dele-d4c82-l-and-historical98-redirect-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-MP-dele-d4c82-l-and-historical98-redirect-ui-retry1/error-context.md"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-MP-dele-d4c82-l-and-historical98-redirect-ui-retry1/video.webm"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-MP-dele-d4c82-l-and-historical98-redirect-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                },
                {
                  "workerIndex": 212,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 157,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=MP&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=MP&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=MP&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=MP&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=MP&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=MP&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:02.777Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-MP-dele-d4c82-l-and-historical98-redirect-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-MP-dele-d4c82-l-and-historical98-redirect-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "878bfbb19a6f264d20bb-3d136330ec679ff6f05a",
          "file": "tests/ui/district-delegates.spec.ts",
          "line": 11,
          "column": 7
        },
        {
          "title": "VI delegate district has a current00 canonical and historical98 redirect",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 225,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 143,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=VI&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=VI&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=VI&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=VI&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=VI&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=VI&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:03.631Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-VI-dele-acc09-l-and-historical98-redirect-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-VI-dele-acc09-l-and-historical98-redirect-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                },
                {
                  "workerIndex": 238,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 230,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=VI&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=VI&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=VI&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=VI&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=VI&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=VI&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:04.463Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-VI-dele-acc09-l-and-historical98-redirect-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-VI-dele-acc09-l-and-historical98-redirect-ui-retry1/error-context.md"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-VI-dele-acc09-l-and-historical98-redirect-ui-retry1/video.webm"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-VI-dele-acc09-l-and-historical98-redirect-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                },
                {
                  "workerIndex": 251,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 156,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=VI&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=VI&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=VI&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=VI&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=VI&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=VI&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:05.435Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-VI-dele-acc09-l-and-historical98-redirect-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-VI-dele-acc09-l-and-historical98-redirect-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "878bfbb19a6f264d20bb-b5a80f433e14bd85b55d",
          "file": "tests/ui/district-delegates.spec.ts",
          "line": 11,
          "column": 7
        },
        {
          "title": "DC delegate district has a current00 canonical and historical98 redirect",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 267,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 160,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=DC&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=DC&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=DC&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=DC&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=DC&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=DC&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:06.313Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-DC-dele-bb890-l-and-historical98-redirect-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-DC-dele-bb890-l-and-historical98-redirect-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                },
                {
                  "workerIndex": 283,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 259,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=DC&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=DC&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=DC&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=DC&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=DC&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=DC&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:07.216Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-DC-dele-bb890-l-and-historical98-redirect-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-DC-dele-bb890-l-and-historical98-redirect-ui-retry1/error-context.md"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-DC-dele-bb890-l-and-historical98-redirect-ui-retry1/video.webm"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-DC-dele-bb890-l-and-historical98-redirect-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                },
                {
                  "workerIndex": 299,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 153,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=DC&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=DC&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=DC&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=DC&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=DC&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=DC&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:08.284Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-DC-dele-bb890-l-and-historical98-redirect-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-DC-dele-bb890-l-and-historical98-redirect-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "878bfbb19a6f264d20bb-b0137c4c028c3e01b1d4",
          "file": "tests/ui/district-delegates.spec.ts",
          "line": 11,
          "column": 7
        },
        {
          "title": "PR delegate district has a current00 canonical and historical98 redirect",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 312,
                  "parallelIndex": 8,
                  "status": "timedOut",
                  "duration": 40036,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=PR&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test timeout of 30000ms exceeded.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:09.135Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-PR-dele-6e115-l-and-historical98-redirect-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 353,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 11638,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=PR&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=PR&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=PR&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=PR&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=PR&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=PR&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:49.823Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-PR-dele-6e115-l-and-historical98-redirect-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-PR-dele-6e115-l-and-historical98-redirect-ui-retry1/error-context.md"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-PR-dele-6e115-l-and-historical98-redirect-ui-retry1/video.webm"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-PR-dele-6e115-l-and-historical98-redirect-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                },
                {
                  "workerIndex": 365,
                  "parallelIndex": 8,
                  "status": "failed",
                  "duration": 156,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=PR&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=PR&tab=congressional\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=PR&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=PR&tab=congressional\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-delegates.spec.ts:22:16",
                    "location": {
                      "file": "/app/tests/ui/district-delegates.spec.ts",
                      "column": 16,
                      "line": 22
                    },
                    "snippet": "\u001b[0m \u001b[90m 20 |\u001b[39m       } \u001b[36mcatch\u001b[39m { \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m }\n \u001b[90m 21 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 22 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/districts/?state=${state}&tab=congressional`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m payload \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m dataResponse)\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(payload\u001b[33m.\u001b[39merrors\u001b[33m,\u001b[39m \u001b[32m`${state}: current inventory query must succeed`\u001b[39m)\u001b[33m.\u001b[39mtoBeUndefined()\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     \u001b[36mconst\u001b[39m inventory \u001b[33m=\u001b[39m payload\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 16,
                        "line": 22
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?state=PR&tab=congressional\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?state=PR&tab=congressional\", waiting until \"load\"\u001b[22m\n\n\n  20 |       } catch { return false; }\n  21 |     });\n> 22 |     await page.goto(`/districts/?state=${state}&tab=congressional`);\n     |                ^\n  23 |     const payload = await (await dataResponse).json();\n  24 |     expect(payload.errors, `${state}: current inventory query must succeed`).toBeUndefined();\n  25 |     const inventory = payload.data?.browseEntities;\n    at /app/tests/ui/district-delegates.spec.ts:22:16"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-delegates.spec.ts",
                        "column": 31,
                        "line": 12
                      },
                      "message": "Error: page.waitForResponse: Test ended.\n\n  10 | for (const state of ['AS', 'GU', 'MP', 'VI', 'DC', 'PR']) {\n  11 |   test(`${state} delegate district has a current00 canonical and historical98 redirect`, async ({ page, request }) => {\n> 12 |     const dataResponse = page.waitForResponse(response => {\n     |                               ^\n  13 |       if (!response.url().includes('/api/graphql') || response.request().method() !== 'POST') return false;\n  14 |       try {\n  15 |         const body = response.request().postDataJSON();\n    at /app/tests/ui/district-delegates.spec.ts:12:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:02.260Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-PR-dele-6e115-l-and-historical98-redirect-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-delegates-PR-dele-6e115-l-and-historical98-redirect-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-delegates.spec.ts",
                    "column": 16,
                    "line": 22
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "878bfbb19a6f264d20bb-8e97b638d5e896c3796d",
          "file": "tests/ui/district-delegates.spec.ts",
          "line": 11,
          "column": 7
        }
      ]
    },
    {
      "title": "tests/ui/district-maps.spec.ts",
      "file": "tests/ui/district-maps.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "congressional map of TX: boundaries within budget, polygons keyed to graph Districts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 9,
                  "parallelIndex": 9,
                  "status": "timedOut",
                  "duration": 90164,
                  "error": {
                    "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/us-districts-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:01:23.144Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-congressiona-50304-ns-keyed-to-graph-Districts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-congressiona-50304-ns-keyed-to-graph-Districts-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 208,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 11384,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/us-districts-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/us-districts-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/us-districts-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:02:53.989Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-congressiona-50304-ns-keyed-to-graph-Districts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-congressiona-50304-ns-keyed-to-graph-Districts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-congressiona-50304-ns-keyed-to-graph-Districts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-congressiona-50304-ns-keyed-to-graph-Districts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                },
                {
                  "workerIndex": 259,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 155,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/us-districts-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/us-districts-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/us-districts-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:06.110Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-congressiona-50304-ns-keyed-to-graph-Districts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-congressiona-50304-ns-keyed-to-graph-Districts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "747abdf89112f28c94e8-bd1bd99c9423f784b351",
          "file": "tests/ui/district-maps.spec.ts",
          "line": 36,
          "column": 7
        },
        {
          "title": "state-senate map of AK: boundaries within budget, polygons keyed to graph Districts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 275,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 133,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-ak.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-ak.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-ak.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:06.996Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-a7f0d-ns-keyed-to-graph-Districts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-a7f0d-ns-keyed-to-graph-Districts-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                },
                {
                  "workerIndex": 291,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 276,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-ak.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-ak.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-ak.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:07.932Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-a7f0d-ns-keyed-to-graph-Districts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-a7f0d-ns-keyed-to-graph-Districts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-a7f0d-ns-keyed-to-graph-Districts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-a7f0d-ns-keyed-to-graph-Districts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                },
                {
                  "workerIndex": 307,
                  "parallelIndex": 9,
                  "status": "timedOut",
                  "duration": 90175,
                  "error": {
                    "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-ak.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:08.983Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-a7f0d-ns-keyed-to-graph-Districts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-a7f0d-ns-keyed-to-graph-Districts-ui-retry2/error-context.md"
                    }
                  ]
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "747abdf89112f28c94e8-12361a1a1eecbcb3347d",
          "file": "tests/ui/district-maps.spec.ts",
          "line": 36,
          "column": 7
        },
        {
          "title": "state-senate map of VT: boundaries within budget, polygons keyed to graph Districts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 675,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 167,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-vt.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-vt.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-vt.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:39.935Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-d5f2d-ns-keyed-to-graph-Districts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-d5f2d-ns-keyed-to-graph-Districts-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                },
                {
                  "workerIndex": 698,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 324,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-vt.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-vt.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-vt.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:40.928Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-d5f2d-ns-keyed-to-graph-Districts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-d5f2d-ns-keyed-to-graph-Districts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-d5f2d-ns-keyed-to-graph-Districts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-d5f2d-ns-keyed-to-graph-Districts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                },
                {
                  "workerIndex": 725,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 165,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-vt.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-vt.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldu/us-sldu-vt.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:42.152Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-d5f2d-ns-keyed-to-graph-Districts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-senate-d5f2d-ns-keyed-to-graph-Districts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "747abdf89112f28c94e8-93e708017d995b46584c",
          "file": "tests/ui/district-maps.spec.ts",
          "line": 36,
          "column": 7
        },
        {
          "title": "state-house map of MN: boundaries within budget, polygons keyed to graph Districts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 746,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 160,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-mn.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-mn.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-mn.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:43.120Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--4f234-ns-keyed-to-graph-Districts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--4f234-ns-keyed-to-graph-Districts-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                },
                {
                  "workerIndex": 765,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 328,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-mn.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-mn.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-mn.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:44.096Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--4f234-ns-keyed-to-graph-Districts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--4f234-ns-keyed-to-graph-Districts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--4f234-ns-keyed-to-graph-Districts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--4f234-ns-keyed-to-graph-Districts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                },
                {
                  "workerIndex": 788,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 167,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-mn.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-mn.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-mn.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:45.201Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--4f234-ns-keyed-to-graph-Districts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--4f234-ns-keyed-to-graph-Districts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "747abdf89112f28c94e8-ca46eec18a5cd8cc7969",
          "file": "tests/ui/district-maps.spec.ts",
          "line": 36,
          "column": 7
        },
        {
          "title": "state-house map of TX: boundaries within budget, polygons keyed to graph Districts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 805,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 159,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:46.156Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--87395-ns-keyed-to-graph-Districts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--87395-ns-keyed-to-graph-Districts-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                },
                {
                  "workerIndex": 824,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 226,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:47.113Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--87395-ns-keyed-to-graph-Districts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--87395-ns-keyed-to-graph-Districts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--87395-ns-keyed-to-graph-Districts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--87395-ns-keyed-to-graph-Districts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                },
                {
                  "workerIndex": 841,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 151,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:38:31",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 31,
                      "line": 38
                    },
                    "snippet": "\u001b[0m \u001b[90m 36 |\u001b[39m   test(\u001b[32m`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 37 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 38 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(sample\u001b[33m.\u001b[39murl)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 39 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.url} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     expect(geo\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m geo\u001b[33m.\u001b[39mbody()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 31,
                        "line": 38
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/sldl/us-sldl-tx.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  36 |   test(`${sample.tab} map of ${sample.state}: boundaries within budget, polygons keyed to graph Districts`, async ({ page, request }) => {\n  37 |     test.setTimeout(90000);\n> 38 |     const geo = await request.get(sample.url);\n     |                               ^\n  39 |     expect(geo.status(), `${sample.url} should answer 200`).toBe(200);\n  40 |     expect(geo.headers()['content-type']).toContain('application/geo+json');\n  41 |     const body = await geo.body();\n    at /app/tests/ui/district-maps.spec.ts:38:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:48.070Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--87395-ns-keyed-to-graph-Districts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-state-house--87395-ns-keyed-to-graph-Districts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 31,
                    "line": 38
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "747abdf89112f28c94e8-6086b9661ec52534e0c2",
          "file": "tests/ui/district-maps.spec.ts",
          "line": 36,
          "column": 7
        },
        {
          "title": "State House on Nebraska explains the unicameral legislature",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 856,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 168,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:82:14",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 14,
                      "line": 82
                    },
                    "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m\n \u001b[90m 81 |\u001b[39m test(\u001b[32m'State House on Nebraska explains the unicameral legislature'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/districts/?view=map&tab=state-house&state=NE'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.map-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'unicameral'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m45000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 84 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 85 |\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 14,
                        "line": 82
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\", waiting until \"load\"\u001b[22m\n\n\n  80 |\n  81 | test('State House on Nebraska explains the unicameral legislature', async ({ page }) => {\n> 82 |   await page.goto('/districts/?view=map&tab=state-house&state=NE');\n     |              ^\n  83 |   await expect(page.locator('.map-notice')).toContainText('unicameral', { timeout: 45000 });\n  84 | });\n  85 |\n    at /app/tests/ui/district-maps.spec.ts:82:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:48.923Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-State-House--e11b7--the-unicameral-legislature-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-State-House--e11b7--the-unicameral-legislature-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 14,
                    "line": 82
                  }
                },
                {
                  "workerIndex": 870,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 259,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:82:14",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 14,
                      "line": 82
                    },
                    "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m\n \u001b[90m 81 |\u001b[39m test(\u001b[32m'State House on Nebraska explains the unicameral legislature'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/districts/?view=map&tab=state-house&state=NE'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.map-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'unicameral'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m45000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 84 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 85 |\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 14,
                        "line": 82
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\", waiting until \"load\"\u001b[22m\n\n\n  80 |\n  81 | test('State House on Nebraska explains the unicameral legislature', async ({ page }) => {\n> 82 |   await page.goto('/districts/?view=map&tab=state-house&state=NE');\n     |              ^\n  83 |   await expect(page.locator('.map-notice')).toContainText('unicameral', { timeout: 45000 });\n  84 | });\n  85 |\n    at /app/tests/ui/district-maps.spec.ts:82:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:49.805Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-State-House--e11b7--the-unicameral-legislature-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-State-House--e11b7--the-unicameral-legislature-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-State-House--e11b7--the-unicameral-legislature-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-State-House--e11b7--the-unicameral-legislature-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 14,
                    "line": 82
                  }
                },
                {
                  "workerIndex": 885,
                  "parallelIndex": 9,
                  "status": "failed",
                  "duration": 151,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/district-maps.spec.ts:82:14",
                    "location": {
                      "file": "/app/tests/ui/district-maps.spec.ts",
                      "column": 14,
                      "line": 82
                    },
                    "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m\n \u001b[90m 81 |\u001b[39m test(\u001b[32m'State House on Nebraska explains the unicameral legislature'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/districts/?view=map&tab=state-house&state=NE'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.map-notice'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'unicameral'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m45000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 84 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 85 |\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/district-maps.spec.ts",
                        "column": 14,
                        "line": 82
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/?view=map&tab=state-house&state=NE\", waiting until \"load\"\u001b[22m\n\n\n  80 |\n  81 | test('State House on Nebraska explains the unicameral legislature', async ({ page }) => {\n> 82 |   await page.goto('/districts/?view=map&tab=state-house&state=NE');\n     |              ^\n  83 |   await expect(page.locator('.map-notice')).toContainText('unicameral', { timeout: 45000 });\n  84 | });\n  85 |\n    at /app/tests/ui/district-maps.spec.ts:82:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:50.809Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-State-House--e11b7--the-unicameral-legislature-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/district-maps-State-House--e11b7--the-unicameral-legislature-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/district-maps.spec.ts",
                    "column": 14,
                    "line": 82
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "747abdf89112f28c94e8-845da3e4433ba5358010",
          "file": "tests/ui/district-maps.spec.ts",
          "line": 81,
          "column": 5
        }
      ]
    },
    {
      "title": "tests/ui/district-sitemap-audit.spec.ts",
      "file": "tests/ui/district-sitemap-audit.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "districts sitemap: every listed URL",
          "file": "tests/ui/district-sitemap-audit.spec.ts",
          "line": 42,
          "column": 6,
          "specs": [
            {
              "title": "each URL is a well-formed 200 canonical page",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 600000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 10,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 136170,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ETIMEDOUT 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/sitemap-districts.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ETIMEDOUT 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/sitemap-districts.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-sitemap-audit.spec.ts:46:31",
                        "location": {
                          "file": "/app/tests/ui/district-sitemap-audit.spec.ts",
                          "column": 31,
                          "line": 46
                        },
                        "snippet": "\u001b[0m \u001b[90m 44 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m600000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 46 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[33mSITEMAP\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 47 |\u001b[39m     \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m404\u001b[39m \u001b[33m&&\u001b[39m \u001b[33m!\u001b[39m\u001b[33mSTRICT\u001b[39m) test\u001b[33m.\u001b[39mskip(\u001b[36mtrue\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`${SITEMAP} not published on this target`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${SITEMAP} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 49 |\u001b[39m     \u001b[36mconst\u001b[39m xml \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/district-sitemap-audit.spec.ts",
                            "column": 31,
                            "line": 46
                          },
                          "message": "Error: apiRequestContext.get: connect ETIMEDOUT 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/sitemap-districts.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  44 |     test.setTimeout(600000);\n  45 |\n> 46 |     const res = await request.get(SITEMAP);\n     |                               ^\n  47 |     if (res.status() === 404 && !STRICT) test.skip(true, `${SITEMAP} not published on this target`);\n  48 |     expect(res.status(), `${SITEMAP} should answer 200`).toBe(200);\n  49 |     const xml = await res.text();\n    at /app/tests/ui/district-sitemap-audit.spec.ts:46:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.145Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/district-sitemap-audit-dis-afae7-l-formed-200-canonical-page-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/district-sitemap-audit.spec.ts",
                        "column": 31,
                        "line": 46
                      }
                    },
                    {
                      "workerIndex": 333,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 68309,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/sitemap-districts.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/sitemap-districts.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-sitemap-audit.spec.ts:46:31",
                        "location": {
                          "file": "/app/tests/ui/district-sitemap-audit.spec.ts",
                          "column": 31,
                          "line": 46
                        },
                        "snippet": "\u001b[0m \u001b[90m 44 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m600000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 46 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[33mSITEMAP\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 47 |\u001b[39m     \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m404\u001b[39m \u001b[33m&&\u001b[39m \u001b[33m!\u001b[39m\u001b[33mSTRICT\u001b[39m) test\u001b[33m.\u001b[39mskip(\u001b[36mtrue\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`${SITEMAP} not published on this target`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${SITEMAP} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 49 |\u001b[39m     \u001b[36mconst\u001b[39m xml \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/district-sitemap-audit.spec.ts",
                            "column": 31,
                            "line": 46
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/sitemap-districts.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  44 |     test.setTimeout(600000);\n  45 |\n> 46 |     const res = await request.get(SITEMAP);\n     |                               ^\n  47 |     if (res.status() === 404 && !STRICT) test.skip(true, `${SITEMAP} not published on this target`);\n  48 |     expect(res.status(), `${SITEMAP} should answer 200`).toBe(200);\n  49 |     const xml = await res.text();\n    at /app/tests/ui/district-sitemap-audit.spec.ts:46:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:39.831Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/district-sitemap-audit-dis-afae7-l-formed-200-canonical-page-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/district-sitemap-audit-dis-afae7-l-formed-200-canonical-page-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/district-sitemap-audit.spec.ts",
                        "column": 31,
                        "line": 46
                      }
                    },
                    {
                      "workerIndex": 858,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/sitemap-districts.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/sitemap-districts.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/district-sitemap-audit.spec.ts:46:31",
                        "location": {
                          "file": "/app/tests/ui/district-sitemap-audit.spec.ts",
                          "column": 31,
                          "line": 46
                        },
                        "snippet": "\u001b[0m \u001b[90m 44 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m600000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 46 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[33mSITEMAP\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 47 |\u001b[39m     \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m404\u001b[39m \u001b[33m&&\u001b[39m \u001b[33m!\u001b[39m\u001b[33mSTRICT\u001b[39m) test\u001b[33m.\u001b[39mskip(\u001b[36mtrue\u001b[39m\u001b[33m,\u001b[39m \u001b[32m`${SITEMAP} not published on this target`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${SITEMAP} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 49 |\u001b[39m     \u001b[36mconst\u001b[39m xml \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/district-sitemap-audit.spec.ts",
                            "column": 31,
                            "line": 46
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/sitemap-districts.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  44 |     test.setTimeout(600000);\n  45 |\n> 46 |     const res = await request.get(SITEMAP);\n     |                               ^\n  47 |     if (res.status() === 404 && !STRICT) test.skip(true, `${SITEMAP} not published on this target`);\n  48 |     expect(res.status(), `${SITEMAP} should answer 200`).toBe(200);\n  49 |     const xml = await res.text();\n    at /app/tests/ui/district-sitemap-audit.spec.ts:46:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:49.092Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/district-sitemap-audit-dis-afae7-l-formed-200-canonical-page-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/district-sitemap-audit.spec.ts",
                        "column": 31,
                        "line": 46
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e5f1a3dc33493a5d5693-1cd9b524fab8feffa129",
              "file": "tests/ui/district-sitemap-audit.spec.ts",
              "line": 43,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/entities.spec.ts",
      "file": "tests/ui/entities.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "us.elect.info entity sections",
          "file": "tests/ui/entities.spec.ts",
          "line": 13,
          "column": 6,
          "specs": [
            {
              "title": "candidates section - index and random pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 11,
                      "parallelIndex": 11,
                      "status": "timedOut",
                      "duration": 40039,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 16
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  14 |\n  15 |   test('candidates section - index and random pages', async ({ page }) => {\n> 16 |     const indexResponse = await page.goto('/candidates/');\n     |                                      ^\n  17 |     expect(indexResponse?.status(), '/candidates/ should answer 200').toBe(200);\n  18 |     await expect(page.locator('h1')).toContainText(/Candidates/i);\n  19 |\n    at /app/tests/ui/entities.spec.ts:16:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.170Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-54da5-on---index-and-random-pages-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 50,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 327,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:16:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m\n \u001b[90m 15 |\u001b[39m   test(\u001b[32m'candidates section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/candidates/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/candidates/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 18 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Candidates/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 16
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  14 |\n  15 |   test('candidates section - index and random pages', async ({ page }) => {\n> 16 |     const indexResponse = await page.goto('/candidates/');\n     |                                      ^\n  17 |     expect(indexResponse?.status(), '/candidates/ should answer 200').toBe(200);\n  18 |     await expect(page.locator('h1')).toContainText(/Candidates/i);\n  19 |\n    at /app/tests/ui/entities.spec.ts:16:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:03.972Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-54da5-on---index-and-random-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-54da5-on---index-and-random-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-54da5-on---index-and-random-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-54da5-on---index-and-random-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 62,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 213,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:16:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m\n \u001b[90m 15 |\u001b[39m   test(\u001b[32m'candidates section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/candidates/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/candidates/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 18 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Candidates/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 16
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  14 |\n  15 |   test('candidates section - index and random pages', async ({ page }) => {\n> 16 |     const indexResponse = await page.goto('/candidates/');\n     |                                      ^\n  17 |     expect(indexResponse?.status(), '/candidates/ should answer 200').toBe(200);\n  18 |     await expect(page.locator('h1')).toContainText(/Candidates/i);\n  19 |\n    at /app/tests/ui/entities.spec.ts:16:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.137Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-54da5-on---index-and-random-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-54da5-on---index-and-random-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-27dbb3fc8778de5a92d1",
              "file": "tests/ui/entities.spec.ts",
              "line": 15,
              "column": 7
            },
            {
              "title": "committees section - index and random pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 85,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 220,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:37:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m\n \u001b[90m 36 |\u001b[39m   test(\u001b[32m'committees section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/committees/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/committees/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Committees/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 37
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  35 |\n  36 |   test('committees section - index and random pages', async ({ page }) => {\n> 37 |     const indexResponse = await page.goto('/committees/');\n     |                                      ^\n  38 |     expect(indexResponse?.status(), '/committees/ should answer 200').toBe(200);\n  39 |     await expect(page.locator('h1')).toContainText(/Committees/i);\n  40 |\n    at /app/tests/ui/entities.spec.ts:37:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.291Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-9ea35-on---index-and-random-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-9ea35-on---index-and-random-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 37
                      }
                    },
                    {
                      "workerIndex": 115,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 379,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:37:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m\n \u001b[90m 36 |\u001b[39m   test(\u001b[32m'committees section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/committees/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/committees/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Committees/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 37
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  35 |\n  36 |   test('committees section - index and random pages', async ({ page }) => {\n> 37 |     const indexResponse = await page.goto('/committees/');\n     |                                      ^\n  38 |     expect(indexResponse?.status(), '/committees/ should answer 200').toBe(200);\n  39 |     await expect(page.locator('h1')).toContainText(/Committees/i);\n  40 |\n    at /app/tests/ui/entities.spec.ts:37:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.414Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-9ea35-on---index-and-random-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-9ea35-on---index-and-random-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-9ea35-on---index-and-random-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-9ea35-on---index-and-random-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 37
                      }
                    },
                    {
                      "workerIndex": 146,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 203,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:37:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m\n \u001b[90m 36 |\u001b[39m   test(\u001b[32m'committees section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/committees/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/committees/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Committees/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 37
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  35 |\n  36 |   test('committees section - index and random pages', async ({ page }) => {\n> 37 |     const indexResponse = await page.goto('/committees/');\n     |                                      ^\n  38 |     expect(indexResponse?.status(), '/committees/ should answer 200').toBe(200);\n  39 |     await expect(page.locator('h1')).toContainText(/Committees/i);\n  40 |\n    at /app/tests/ui/entities.spec.ts:37:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.756Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-9ea35-on---index-and-random-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-9ea35-on---index-and-random-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 37
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-e974c5cf3a3265485947",
              "file": "tests/ui/entities.spec.ts",
              "line": 36,
              "column": 7
            },
            {
              "title": "parties section - index and random pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 173,
                      "parallelIndex": 11,
                      "status": "timedOut",
                      "duration": 40040,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 58
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  56 |\n  57 |   test('parties section - index and random pages', async ({ page }) => {\n> 58 |     const indexResponse = await page.goto('/parties/');\n     |                                      ^\n  59 |     expect(indexResponse?.status(), '/parties/ should answer 200').toBe(200);\n  60 |     await expect(page.locator('h1')).toContainText(/Parties/i);\n  61 |\n    at /app/tests/ui/entities.spec.ts:58:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.870Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-de35a-on---index-and-random-pages-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 201,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 11630,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:58:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 58
                        },
                        "snippet": "\u001b[0m \u001b[90m 56 |\u001b[39m\n \u001b[90m 57 |\u001b[39m   test(\u001b[32m'parties section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 58 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/parties/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 59 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/parties/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 60 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Parties/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 61 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 58
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  56 |\n  57 |   test('parties section - index and random pages', async ({ page }) => {\n> 58 |     const indexResponse = await page.goto('/parties/');\n     |                                      ^\n  59 |     expect(indexResponse?.status(), '/parties/ should answer 200').toBe(200);\n  60 |     await expect(page.locator('h1')).toContainText(/Parties/i);\n  61 |\n    at /app/tests/ui/entities.spec.ts:58:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.660Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-de35a-on---index-and-random-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-de35a-on---index-and-random-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-de35a-on---index-and-random-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-de35a-on---index-and-random-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 58
                      }
                    },
                    {
                      "workerIndex": 217,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 160,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:58:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 58
                        },
                        "snippet": "\u001b[0m \u001b[90m 56 |\u001b[39m\n \u001b[90m 57 |\u001b[39m   test(\u001b[32m'parties section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 58 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/parties/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 59 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/parties/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 60 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Parties/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 61 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 58
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  56 |\n  57 |   test('parties section - index and random pages', async ({ page }) => {\n> 58 |     const indexResponse = await page.goto('/parties/');\n     |                                      ^\n  59 |     expect(indexResponse?.status(), '/parties/ should answer 200').toBe(200);\n  60 |     await expect(page.locator('h1')).toContainText(/Parties/i);\n  61 |\n    at /app/tests/ui/entities.spec.ts:58:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:02.996Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-de35a-on---index-and-random-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-de35a-on---index-and-random-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 58
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-10bf5643f2069b30d1e6",
              "file": "tests/ui/entities.spec.ts",
              "line": 57,
              "column": 7
            },
            {
              "title": "offices section - index and random pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 230,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 142,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:79:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 79
                        },
                        "snippet": "\u001b[0m \u001b[90m 77 |\u001b[39m\n \u001b[90m 78 |\u001b[39m   test(\u001b[32m'offices section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 79 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/offices/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 80 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/offices/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Offices/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 82 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 79
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  77 |\n  78 |   test('offices section - index and random pages', async ({ page }) => {\n> 79 |     const indexResponse = await page.goto('/offices/');\n     |                                      ^\n  80 |     expect(indexResponse?.status(), '/offices/ should answer 200').toBe(200);\n  81 |     await expect(page.locator('h1')).toContainText(/Offices/i);\n  82 |\n    at /app/tests/ui/entities.spec.ts:79:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:03.897Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-430dd-on---index-and-random-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-430dd-on---index-and-random-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 79
                      }
                    },
                    {
                      "workerIndex": 244,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 252,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:79:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 79
                        },
                        "snippet": "\u001b[0m \u001b[90m 77 |\u001b[39m\n \u001b[90m 78 |\u001b[39m   test(\u001b[32m'offices section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 79 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/offices/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 80 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/offices/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Offices/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 82 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 79
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  77 |\n  78 |   test('offices section - index and random pages', async ({ page }) => {\n> 79 |     const indexResponse = await page.goto('/offices/');\n     |                                      ^\n  80 |     expect(indexResponse?.status(), '/offices/ should answer 200').toBe(200);\n  81 |     await expect(page.locator('h1')).toContainText(/Offices/i);\n  82 |\n    at /app/tests/ui/entities.spec.ts:79:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:04.777Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-430dd-on---index-and-random-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-430dd-on---index-and-random-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-430dd-on---index-and-random-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-430dd-on---index-and-random-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 79
                      }
                    },
                    {
                      "workerIndex": 257,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:79:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 79
                        },
                        "snippet": "\u001b[0m \u001b[90m 77 |\u001b[39m\n \u001b[90m 78 |\u001b[39m   test(\u001b[32m'offices section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 79 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/offices/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 80 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/offices/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Offices/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 82 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 79
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  77 |\n  78 |   test('offices section - index and random pages', async ({ page }) => {\n> 79 |     const indexResponse = await page.goto('/offices/');\n     |                                      ^\n  80 |     expect(indexResponse?.status(), '/offices/ should answer 200').toBe(200);\n  81 |     await expect(page.locator('h1')).toContainText(/Offices/i);\n  82 |\n    at /app/tests/ui/entities.spec.ts:79:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:05.759Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-430dd-on---index-and-random-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-430dd-on---index-and-random-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 79
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-57c837c2cf446c42d558",
              "file": "tests/ui/entities.spec.ts",
              "line": 78,
              "column": 7
            },
            {
              "title": "districts section - index and random pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 274,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:100:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 100
                        },
                        "snippet": "\u001b[0m \u001b[90m  98 |\u001b[39m\n \u001b[90m  99 |\u001b[39m   test(\u001b[32m'districts section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 100 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/districts/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 101 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/districts/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 102 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Districts/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 103 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 100
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n   98 |\n   99 |   test('districts section - index and random pages', async ({ page }) => {\n> 100 |     const indexResponse = await page.goto('/districts/');\n      |                                      ^\n  101 |     expect(indexResponse?.status(), '/districts/ should answer 200').toBe(200);\n  102 |     await expect(page.locator('h1')).toContainText(/Districts/i);\n  103 |\n    at /app/tests/ui/entities.spec.ts:100:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:06.713Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-f70f2-on---index-and-random-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-f70f2-on---index-and-random-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 100
                      }
                    },
                    {
                      "workerIndex": 290,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 263,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:100:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 100
                        },
                        "snippet": "\u001b[0m \u001b[90m  98 |\u001b[39m\n \u001b[90m  99 |\u001b[39m   test(\u001b[32m'districts section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 100 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/districts/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 101 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/districts/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 102 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Districts/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 103 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 100
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n   98 |\n   99 |   test('districts section - index and random pages', async ({ page }) => {\n> 100 |     const indexResponse = await page.goto('/districts/');\n      |                                      ^\n  101 |     expect(indexResponse?.status(), '/districts/ should answer 200').toBe(200);\n  102 |     await expect(page.locator('h1')).toContainText(/Districts/i);\n  103 |\n    at /app/tests/ui/entities.spec.ts:100:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:07.613Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-f70f2-on---index-and-random-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-f70f2-on---index-and-random-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-f70f2-on---index-and-random-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-f70f2-on---index-and-random-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 100
                      }
                    },
                    {
                      "workerIndex": 306,
                      "parallelIndex": 11,
                      "status": "timedOut",
                      "duration": 40041,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 100
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n   98 |\n   99 |   test('districts section - index and random pages', async ({ page }) => {\n> 100 |     const indexResponse = await page.goto('/districts/');\n      |                                      ^\n  101 |     expect(indexResponse?.status(), '/districts/ should answer 200').toBe(200);\n  102 |     await expect(page.locator('h1')).toContainText(/Districts/i);\n  103 |\n    at /app/tests/ui/entities.spec.ts:100:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:08.697Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-f70f2-on---index-and-random-pages-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-0603cede9ea0f43c33a6",
              "file": "tests/ui/entities.spec.ts",
              "line": 99,
              "column": 7
            },
            {
              "title": "states section - index and random pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 350,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 11617,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:136:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 136
                        },
                        "snippet": "\u001b[0m \u001b[90m 134 |\u001b[39m\n \u001b[90m 135 |\u001b[39m   test(\u001b[32m'states section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 136 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/states/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 137 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/states/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/States/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 139 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 136
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n\n  134 |\n  135 |   test('states section - index and random pages', async ({ page }) => {\n> 136 |     const indexResponse = await page.goto('/states/');\n      |                                      ^\n  137 |     expect(indexResponse?.status(), '/states/ should answer 200').toBe(200);\n  138 |     await expect(page.locator('h1')).toContainText(/States/i);\n  139 |\n    at /app/tests/ui/entities.spec.ts:136:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:49.385Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-02398-on---index-and-random-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-02398-on---index-and-random-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 136
                      }
                    },
                    {
                      "workerIndex": 360,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 260,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:136:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 136
                        },
                        "snippet": "\u001b[0m \u001b[90m 134 |\u001b[39m\n \u001b[90m 135 |\u001b[39m   test(\u001b[32m'states section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 136 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/states/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 137 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/states/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/States/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 139 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 136
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n\n  134 |\n  135 |   test('states section - index and random pages', async ({ page }) => {\n> 136 |     const indexResponse = await page.goto('/states/');\n      |                                      ^\n  137 |     expect(indexResponse?.status(), '/states/ should answer 200').toBe(200);\n  138 |     await expect(page.locator('h1')).toContainText(/States/i);\n  139 |\n    at /app/tests/ui/entities.spec.ts:136:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:01.713Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-02398-on---index-and-random-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-02398-on---index-and-random-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-02398-on---index-and-random-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-02398-on---index-and-random-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 136
                      }
                    },
                    {
                      "workerIndex": 369,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 168,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:136:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 136
                        },
                        "snippet": "\u001b[0m \u001b[90m 134 |\u001b[39m\n \u001b[90m 135 |\u001b[39m   test(\u001b[32m'states section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 136 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/states/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 137 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/states/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/States/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 139 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 136
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n\n  134 |\n  135 |   test('states section - index and random pages', async ({ page }) => {\n> 136 |     const indexResponse = await page.goto('/states/');\n      |                                      ^\n  137 |     expect(indexResponse?.status(), '/states/ should answer 200').toBe(200);\n  138 |     await expect(page.locator('h1')).toContainText(/States/i);\n  139 |\n    at /app/tests/ui/entities.spec.ts:136:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:02.792Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-02398-on---index-and-random-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-02398-on---index-and-random-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 136
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-859b9ebc18597fc7cd99",
              "file": "tests/ui/entities.spec.ts",
              "line": 135,
              "column": 7
            },
            {
              "title": "elections section - index and random pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 379,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:165:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 165
                        },
                        "snippet": "\u001b[0m \u001b[90m 163 |\u001b[39m\n \u001b[90m 164 |\u001b[39m   test(\u001b[32m'elections section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 165 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/elections/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 166 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/elections/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 167 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Election/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 168 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 165
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  163 |\n  164 |   test('elections section - index and random pages', async ({ page }) => {\n> 165 |     const indexResponse = await page.goto('/elections/');\n      |                                      ^\n  166 |     expect(indexResponse?.status(), '/elections/ should answer 200').toBe(200);\n  167 |     await expect(page.locator('h1')).toContainText(/Election/i);\n  168 |\n    at /app/tests/ui/entities.spec.ts:165:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:03.736Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-8bb93-on---index-and-random-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-8bb93-on---index-and-random-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 165
                      }
                    },
                    {
                      "workerIndex": 389,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 231,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:165:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 165
                        },
                        "snippet": "\u001b[0m \u001b[90m 163 |\u001b[39m\n \u001b[90m 164 |\u001b[39m   test(\u001b[32m'elections section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 165 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/elections/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 166 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/elections/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 167 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Election/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 168 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 165
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  163 |\n  164 |   test('elections section - index and random pages', async ({ page }) => {\n> 165 |     const indexResponse = await page.goto('/elections/');\n      |                                      ^\n  166 |     expect(indexResponse?.status(), '/elections/ should answer 200').toBe(200);\n  167 |     await expect(page.locator('h1')).toContainText(/Election/i);\n  168 |\n    at /app/tests/ui/entities.spec.ts:165:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:04.638Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-8bb93-on---index-and-random-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-8bb93-on---index-and-random-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-8bb93-on---index-and-random-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-8bb93-on---index-and-random-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 165
                      }
                    },
                    {
                      "workerIndex": 401,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 145,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:165:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 165
                        },
                        "snippet": "\u001b[0m \u001b[90m 163 |\u001b[39m\n \u001b[90m 164 |\u001b[39m   test(\u001b[32m'elections section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 165 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/elections/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 166 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/elections/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 167 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Election/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 168 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 165
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  163 |\n  164 |   test('elections section - index and random pages', async ({ page }) => {\n> 165 |     const indexResponse = await page.goto('/elections/');\n      |                                      ^\n  166 |     expect(indexResponse?.status(), '/elections/ should answer 200').toBe(200);\n  167 |     await expect(page.locator('h1')).toContainText(/Election/i);\n  168 |\n    at /app/tests/ui/entities.spec.ts:165:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:05.644Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-8bb93-on---index-and-random-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-8bb93-on---index-and-random-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 165
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-b8ea6926bb024b138407",
              "file": "tests/ui/entities.spec.ts",
              "line": 164,
              "column": 7
            }
          ]
        },
        {
          "title": "office profile - dynamic candidates",
          "file": "tests/ui/entities.spec.ts",
          "line": 186,
          "column": 6,
          "specs": [
            {
              "title": "office profile loads candidates filtered to office",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 411,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 148,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:199:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 199
                        },
                        "snippet": "\u001b[0m \u001b[90m 197 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 198 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 199 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mPRESIDENT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 200 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 201 |\u001b[39m\n \u001b[90m 202 |\u001b[39m     \u001b[90m// Verify the request includes the office filter\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 199
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n\n  197 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  198 |\n> 199 |     await page.goto(PRESIDENT_PATH);\n      |                ^\n  200 |     const response = await responsePromise;\n  201 |\n  202 |     // Verify the request includes the office filter\n    at /app/tests/ui/entities.spec.ts:199:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 192
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  190 |   test('office profile loads candidates filtered to office', async ({ page }) => {\n  191 |     // Intercept the browseEntities GraphQL request to verify filter is applied\n> 192 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  193 |       if (!resp.url().includes('/api/graphql')) return false;\n  194 |       if (resp.request().method() !== 'POST') return false;\n  195 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:192:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:06.469Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----cd2a4-ndidates-filtered-to-office-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----cd2a4-ndidates-filtered-to-office-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 199
                      }
                    },
                    {
                      "workerIndex": 421,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 25873,
                      "error": {
                        "message": "TimeoutError: page.waitForResponse: Timeout 15000ms exceeded while waiting for event \"response\"",
                        "stack": "TimeoutError: page.waitForResponse: Timeout 15000ms exceeded while waiting for event \"response\"\n    at /app/tests/ui/entities.spec.ts:192:34",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 34,
                          "line": 192
                        },
                        "snippet": "\u001b[0m \u001b[90m 190 |\u001b[39m   test(\u001b[32m'office profile loads candidates filtered to office'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 191 |\u001b[39m     \u001b[90m// Intercept the browseEntities GraphQL request to verify filter is applied\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 192 |\u001b[39m     \u001b[36mconst\u001b[39m responsePromise \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mwaitForResponse(resp \u001b[33m=>\u001b[39m {\n \u001b[90m     |\u001b[39m                                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 193 |\u001b[39m       \u001b[36mif\u001b[39m (\u001b[33m!\u001b[39mresp\u001b[33m.\u001b[39murl()\u001b[33m.\u001b[39mincludes(\u001b[32m'/api/graphql'\u001b[39m)) \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 194 |\u001b[39m       \u001b[36mif\u001b[39m (resp\u001b[33m.\u001b[39mrequest()\u001b[33m.\u001b[39mmethod() \u001b[33m!==\u001b[39m \u001b[32m'POST'\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 195 |\u001b[39m       \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m resp\u001b[33m.\u001b[39mrequest()\u001b[33m.\u001b[39mpostData() \u001b[33m||\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 192
                          },
                          "message": "TimeoutError: page.waitForResponse: Timeout 15000ms exceeded while waiting for event \"response\"\n\n  190 |   test('office profile loads candidates filtered to office', async ({ page }) => {\n  191 |     // Intercept the browseEntities GraphQL request to verify filter is applied\n> 192 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  193 |       if (!resp.url().includes('/api/graphql')) return false;\n  194 |       if (resp.request().method() !== 'POST') return false;\n  195 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:192:34"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 199
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n\n  197 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  198 |\n> 199 |     await page.goto(PRESIDENT_PATH);\n      |                ^\n  200 |     const response = await responsePromise;\n  201 |\n  202 |     // Verify the request includes the office filter\n    at /app/tests/ui/entities.spec.ts:199:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:07.294Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----cd2a4-ndidates-filtered-to-office-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----cd2a4-ndidates-filtered-to-office-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----cd2a4-ndidates-filtered-to-office-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 34,
                        "line": 192
                      }
                    },
                    {
                      "workerIndex": 541,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 161,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:199:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 199
                        },
                        "snippet": "\u001b[0m \u001b[90m 197 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 198 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 199 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mPRESIDENT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 200 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 201 |\u001b[39m\n \u001b[90m 202 |\u001b[39m     \u001b[90m// Verify the request includes the office filter\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 199
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n\n  197 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  198 |\n> 199 |     await page.goto(PRESIDENT_PATH);\n      |                ^\n  200 |     const response = await responsePromise;\n  201 |\n  202 |     // Verify the request includes the office filter\n    at /app/tests/ui/entities.spec.ts:199:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 192
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  190 |   test('office profile loads candidates filtered to office', async ({ page }) => {\n  191 |     // Intercept the browseEntities GraphQL request to verify filter is applied\n> 192 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  193 |       if (!resp.url().includes('/api/graphql')) return false;\n  194 |       if (resp.request().method() !== 'POST') return false;\n  195 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:192:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:34.028Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----cd2a4-ndidates-filtered-to-office-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----cd2a4-ndidates-filtered-to-office-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 199
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-754cb9c02b5294c0dd5c",
              "file": "tests/ui/entities.spec.ts",
              "line": 190,
              "column": 7
            },
            {
              "title": "office profile candidates sorted by total contributions descending",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 567,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 184,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:220:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 220
                        },
                        "snippet": "\u001b[0m \u001b[90m 218 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 219 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 220 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mPRESIDENT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 221 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 222 |\u001b[39m\n \u001b[90m 223 |\u001b[39m     \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 220
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n\n  218 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  219 |\n> 220 |     await page.goto(PRESIDENT_PATH);\n      |                ^\n  221 |     const response = await responsePromise;\n  222 |\n  223 |     const json = await response.json();\n    at /app/tests/ui/entities.spec.ts:220:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 213
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  211 |\n  212 |   test('office profile candidates sorted by total contributions descending', async ({ page }) => {\n> 213 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  214 |       if (!resp.url().includes('/api/graphql')) return false;\n  215 |       if (resp.request().method() !== 'POST') return false;\n  216 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:213:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.982Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----9afcc-al-contributions-descending-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----9afcc-al-contributions-descending-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 220
                      }
                    },
                    {
                      "workerIndex": 589,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 298,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:220:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 220
                        },
                        "snippet": "\u001b[0m \u001b[90m 218 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 219 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 220 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mPRESIDENT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 221 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 222 |\u001b[39m\n \u001b[90m 223 |\u001b[39m     \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 220
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n\n  218 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  219 |\n> 220 |     await page.goto(PRESIDENT_PATH);\n      |                ^\n  221 |     const response = await responsePromise;\n  222 |\n  223 |     const json = await response.json();\n    at /app/tests/ui/entities.spec.ts:220:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 213
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  211 |\n  212 |   test('office profile candidates sorted by total contributions descending', async ({ page }) => {\n> 213 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  214 |       if (!resp.url().includes('/api/graphql')) return false;\n  215 |       if (resp.request().method() !== 'POST') return false;\n  216 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:213:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:36.050Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----9afcc-al-contributions-descending-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----9afcc-al-contributions-descending-ui-retry1/error-context.md"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----9afcc-al-contributions-descending-ui-retry1/video.webm"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----9afcc-al-contributions-descending-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 220
                      }
                    },
                    {
                      "workerIndex": 617,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 182,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:220:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 220
                        },
                        "snippet": "\u001b[0m \u001b[90m 218 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 219 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 220 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mPRESIDENT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 221 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 222 |\u001b[39m\n \u001b[90m 223 |\u001b[39m     \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 220
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n\n  218 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  219 |\n> 220 |     await page.goto(PRESIDENT_PATH);\n      |                ^\n  221 |     const response = await responsePromise;\n  222 |\n  223 |     const json = await response.json();\n    at /app/tests/ui/entities.spec.ts:220:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 213
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  211 |\n  212 |   test('office profile candidates sorted by total contributions descending', async ({ page }) => {\n> 213 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  214 |       if (!resp.url().includes('/api/graphql')) return false;\n  215 |       if (resp.request().method() !== 'POST') return false;\n  216 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:213:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:37.205Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----9afcc-al-contributions-descending-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----9afcc-al-contributions-descending-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 220
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-6e65f0bd8866689ca94b",
              "file": "tests/ui/entities.spec.ts",
              "line": 212,
              "column": 7
            },
            {
              "title": "office profile renders candidate results in UI",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 638,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 166,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:241:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 241
                        },
                        "snippet": "\u001b[0m \u001b[90m 239 |\u001b[39m\n \u001b[90m 240 |\u001b[39m   test(\u001b[32m'office profile renders candidate results in UI'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 241 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mPRESIDENT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 242 |\u001b[39m\n \u001b[90m 243 |\u001b[39m     \u001b[90m// Wait for candidate results to render\u001b[39m\n \u001b[90m 244 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 241
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n\n  239 |\n  240 |   test('office profile renders candidate results in UI', async ({ page }) => {\n> 241 |     await page.goto(PRESIDENT_PATH);\n      |                ^\n  242 |\n  243 |     // Wait for candidate results to render\n  244 |     await expect(page.locator('.entity-search-result').first()).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:241:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:38.205Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----0556c-ers-candidate-results-in-UI-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----0556c-ers-candidate-results-in-UI-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 241
                      }
                    },
                    {
                      "workerIndex": 661,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 289,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:241:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 241
                        },
                        "snippet": "\u001b[0m \u001b[90m 239 |\u001b[39m\n \u001b[90m 240 |\u001b[39m   test(\u001b[32m'office profile renders candidate results in UI'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 241 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mPRESIDENT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 242 |\u001b[39m\n \u001b[90m 243 |\u001b[39m     \u001b[90m// Wait for candidate results to render\u001b[39m\n \u001b[90m 244 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 241
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n\n  239 |\n  240 |   test('office profile renders candidate results in UI', async ({ page }) => {\n> 241 |     await page.goto(PRESIDENT_PATH);\n      |                ^\n  242 |\n  243 |     // Wait for candidate results to render\n  244 |     await expect(page.locator('.entity-search-result').first()).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:241:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:39.222Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----0556c-ers-candidate-results-in-UI-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----0556c-ers-candidate-results-in-UI-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----0556c-ers-candidate-results-in-UI-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----0556c-ers-candidate-results-in-UI-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 241
                      }
                    },
                    {
                      "workerIndex": 689,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 180,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:241:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 241
                        },
                        "snippet": "\u001b[0m \u001b[90m 239 |\u001b[39m\n \u001b[90m 240 |\u001b[39m   test(\u001b[32m'office profile renders candidate results in UI'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 241 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mPRESIDENT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 242 |\u001b[39m\n \u001b[90m 243 |\u001b[39m     \u001b[90m// Wait for candidate results to render\u001b[39m\n \u001b[90m 244 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 241
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/684f6e2d-7105-932b-8b7f-94016580f727/\", waiting until \"load\"\u001b[22m\n\n\n  239 |\n  240 |   test('office profile renders candidate results in UI', async ({ page }) => {\n> 241 |     await page.goto(PRESIDENT_PATH);\n      |                ^\n  242 |\n  243 |     // Wait for candidate results to render\n  244 |     await expect(page.locator('.entity-search-result').first()).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:241:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.403Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----0556c-ers-candidate-results-in-UI-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-office-profile----0556c-ers-candidate-results-in-UI-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 241
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-138301d01ff79967b9fa",
              "file": "tests/ui/entities.spec.ts",
              "line": 240,
              "column": 7
            }
          ]
        },
        {
          "title": "state profile - dynamic candidates",
          "file": "tests/ui/entities.spec.ts",
          "line": 255,
          "column": 6,
          "specs": [
            {
              "title": "state profile loads candidates filtered to state",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 713,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 172,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:266:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 266
                        },
                        "snippet": "\u001b[0m \u001b[90m 264 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 265 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 266 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mTEXAS_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 267 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 268 |\u001b[39m\n \u001b[90m 269 |\u001b[39m     \u001b[36mconst\u001b[39m requestBody \u001b[33m=\u001b[39m \u001b[33mJSON\u001b[39m\u001b[33m.\u001b[39mparse(response\u001b[33m.\u001b[39mrequest()\u001b[33m.\u001b[39mpostData() \u001b[33m||\u001b[39m \u001b[32m'{}'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 266
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n\n  264 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  265 |\n> 266 |     await page.goto(TEXAS_PATH);\n      |                ^\n  267 |     const response = await responsePromise;\n  268 |\n  269 |     const requestBody = JSON.parse(response.request().postData() || '{}');\n    at /app/tests/ui/entities.spec.ts:266:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 259
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  257 |\n  258 |   test('state profile loads candidates filtered to state', async ({ page }) => {\n> 259 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  260 |       if (!resp.url().includes('/api/graphql')) return false;\n  261 |       if (resp.request().method() !== 'POST') return false;\n  262 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:259:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:41.410Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-e1647-andidates-filtered-to-state-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-e1647-andidates-filtered-to-state-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 266
                      }
                    },
                    {
                      "workerIndex": 734,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 271,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:266:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 266
                        },
                        "snippet": "\u001b[0m \u001b[90m 264 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 265 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 266 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mTEXAS_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 267 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 268 |\u001b[39m\n \u001b[90m 269 |\u001b[39m     \u001b[36mconst\u001b[39m requestBody \u001b[33m=\u001b[39m \u001b[33mJSON\u001b[39m\u001b[33m.\u001b[39mparse(response\u001b[33m.\u001b[39mrequest()\u001b[33m.\u001b[39mpostData() \u001b[33m||\u001b[39m \u001b[32m'{}'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 266
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n\n  264 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  265 |\n> 266 |     await page.goto(TEXAS_PATH);\n      |                ^\n  267 |     const response = await responsePromise;\n  268 |\n  269 |     const requestBody = JSON.parse(response.request().postData() || '{}');\n    at /app/tests/ui/entities.spec.ts:266:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 259
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  257 |\n  258 |   test('state profile loads candidates filtered to state', async ({ page }) => {\n> 259 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  260 |       if (!resp.url().includes('/api/graphql')) return false;\n  261 |       if (resp.request().method() !== 'POST') return false;\n  262 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:259:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:42.368Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-e1647-andidates-filtered-to-state-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-e1647-andidates-filtered-to-state-ui-retry1/error-context.md"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-e1647-andidates-filtered-to-state-ui-retry1/video.webm"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-e1647-andidates-filtered-to-state-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 266
                      }
                    },
                    {
                      "workerIndex": 756,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 175,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:266:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 266
                        },
                        "snippet": "\u001b[0m \u001b[90m 264 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 265 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 266 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mTEXAS_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 267 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 268 |\u001b[39m\n \u001b[90m 269 |\u001b[39m     \u001b[36mconst\u001b[39m requestBody \u001b[33m=\u001b[39m \u001b[33mJSON\u001b[39m\u001b[33m.\u001b[39mparse(response\u001b[33m.\u001b[39mrequest()\u001b[33m.\u001b[39mpostData() \u001b[33m||\u001b[39m \u001b[32m'{}'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 266
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n\n  264 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  265 |\n> 266 |     await page.goto(TEXAS_PATH);\n      |                ^\n  267 |     const response = await responsePromise;\n  268 |\n  269 |     const requestBody = JSON.parse(response.request().postData() || '{}');\n    at /app/tests/ui/entities.spec.ts:266:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 259
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  257 |\n  258 |   test('state profile loads candidates filtered to state', async ({ page }) => {\n> 259 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  260 |       if (!resp.url().includes('/api/graphql')) return false;\n  261 |       if (resp.request().method() !== 'POST') return false;\n  262 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:259:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:43.420Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-e1647-andidates-filtered-to-state-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-e1647-andidates-filtered-to-state-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 266
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-23323ef80148534fb960",
              "file": "tests/ui/entities.spec.ts",
              "line": 258,
              "column": 7
            },
            {
              "title": "state profile candidates sorted by total contributions descending",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 774,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 190,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:285:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 285
                        },
                        "snippet": "\u001b[0m \u001b[90m 283 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 284 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 285 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mTEXAS_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 286 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 287 |\u001b[39m\n \u001b[90m 288 |\u001b[39m     \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 285
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n\n  283 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  284 |\n> 285 |     await page.goto(TEXAS_PATH);\n      |                ^\n  286 |     const response = await responsePromise;\n  287 |\n  288 |     const json = await response.json();\n    at /app/tests/ui/entities.spec.ts:285:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 278
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  276 |\n  277 |   test('state profile candidates sorted by total contributions descending', async ({ page }) => {\n> 278 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  279 |       if (!resp.url().includes('/api/graphql')) return false;\n  280 |       if (resp.request().method() !== 'POST') return false;\n  281 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:278:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:44.360Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-b2908-al-contributions-descending-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-b2908-al-contributions-descending-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 285
                      }
                    },
                    {
                      "workerIndex": 789,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 266,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:285:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 285
                        },
                        "snippet": "\u001b[0m \u001b[90m 283 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 284 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 285 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mTEXAS_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 286 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 287 |\u001b[39m\n \u001b[90m 288 |\u001b[39m     \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 285
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n\n  283 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  284 |\n> 285 |     await page.goto(TEXAS_PATH);\n      |                ^\n  286 |     const response = await responsePromise;\n  287 |\n  288 |     const json = await response.json();\n    at /app/tests/ui/entities.spec.ts:285:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 278
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  276 |\n  277 |   test('state profile candidates sorted by total contributions descending', async ({ page }) => {\n> 278 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  279 |       if (!resp.url().includes('/api/graphql')) return false;\n  280 |       if (resp.request().method() !== 'POST') return false;\n  281 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:278:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:45.347Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-b2908-al-contributions-descending-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-b2908-al-contributions-descending-ui-retry1/error-context.md"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-b2908-al-contributions-descending-ui-retry1/video.webm"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-b2908-al-contributions-descending-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 285
                      }
                    },
                    {
                      "workerIndex": 813,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 178,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:285:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 285
                        },
                        "snippet": "\u001b[0m \u001b[90m 283 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 284 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 285 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mTEXAS_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 286 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 287 |\u001b[39m\n \u001b[90m 288 |\u001b[39m     \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 285
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/tx/\", waiting until \"load\"\u001b[22m\n\n\n  283 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  284 |\n> 285 |     await page.goto(TEXAS_PATH);\n      |                ^\n  286 |     const response = await responsePromise;\n  287 |\n  288 |     const json = await response.json();\n    at /app/tests/ui/entities.spec.ts:285:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 278
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  276 |\n  277 |   test('state profile candidates sorted by total contributions descending', async ({ page }) => {\n> 278 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  279 |       if (!resp.url().includes('/api/graphql')) return false;\n  280 |       if (resp.request().method() !== 'POST') return false;\n  281 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:278:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:46.454Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-b2908-al-contributions-descending-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-state-profile---d-b2908-al-contributions-descending-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 285
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-631c42730cdb715cf791",
              "file": "tests/ui/entities.spec.ts",
              "line": 277,
              "column": 7
            }
          ]
        },
        {
          "title": "district profile - dynamic candidates",
          "file": "tests/ui/entities.spec.ts",
          "line": 305,
          "column": 6,
          "specs": [
            {
              "title": "district profile loads candidates filtered to district",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 830,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 152,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:316:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 316
                        },
                        "snippet": "\u001b[0m \u001b[90m 314 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 315 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 316 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDISTRICT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 317 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 318 |\u001b[39m\n \u001b[90m 319 |\u001b[39m     \u001b[36mconst\u001b[39m requestBody \u001b[33m=\u001b[39m \u001b[33mJSON\u001b[39m\u001b[33m.\u001b[39mparse(response\u001b[33m.\u001b[39mrequest()\u001b[33m.\u001b[39mpostData() \u001b[33m||\u001b[39m \u001b[32m'{}'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 316
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n\n  314 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  315 |\n> 316 |     await page.goto(DISTRICT_PATH);\n      |                ^\n  317 |     const response = await responsePromise;\n  318 |\n  319 |     const requestBody = JSON.parse(response.request().postData() || '{}');\n    at /app/tests/ui/entities.spec.ts:316:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 309
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  307 |\n  308 |   test('district profile loads candidates filtered to district', async ({ page }) => {\n> 309 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  310 |       if (!resp.url().includes('/api/graphql')) return false;\n  311 |       if (resp.request().method() !== 'POST') return false;\n  312 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:309:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:47.431Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--c0956-idates-filtered-to-district-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--c0956-idates-filtered-to-district-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 316
                      }
                    },
                    {
                      "workerIndex": 845,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 231,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:316:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 316
                        },
                        "snippet": "\u001b[0m \u001b[90m 314 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 315 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 316 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDISTRICT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 317 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 318 |\u001b[39m\n \u001b[90m 319 |\u001b[39m     \u001b[36mconst\u001b[39m requestBody \u001b[33m=\u001b[39m \u001b[33mJSON\u001b[39m\u001b[33m.\u001b[39mparse(response\u001b[33m.\u001b[39mrequest()\u001b[33m.\u001b[39mpostData() \u001b[33m||\u001b[39m \u001b[32m'{}'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 316
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n\n  314 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  315 |\n> 316 |     await page.goto(DISTRICT_PATH);\n      |                ^\n  317 |     const response = await responsePromise;\n  318 |\n  319 |     const requestBody = JSON.parse(response.request().postData() || '{}');\n    at /app/tests/ui/entities.spec.ts:316:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 309
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  307 |\n  308 |   test('district profile loads candidates filtered to district', async ({ page }) => {\n> 309 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  310 |       if (!resp.url().includes('/api/graphql')) return false;\n  311 |       if (resp.request().method() !== 'POST') return false;\n  312 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:309:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:48.318Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--c0956-idates-filtered-to-district-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--c0956-idates-filtered-to-district-ui-retry1/error-context.md"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--c0956-idates-filtered-to-district-ui-retry1/video.webm"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--c0956-idates-filtered-to-district-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 316
                      }
                    },
                    {
                      "workerIndex": 862,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:316:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 316
                        },
                        "snippet": "\u001b[0m \u001b[90m 314 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 315 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 316 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDISTRICT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 317 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 318 |\u001b[39m\n \u001b[90m 319 |\u001b[39m     \u001b[36mconst\u001b[39m requestBody \u001b[33m=\u001b[39m \u001b[33mJSON\u001b[39m\u001b[33m.\u001b[39mparse(response\u001b[33m.\u001b[39mrequest()\u001b[33m.\u001b[39mpostData() \u001b[33m||\u001b[39m \u001b[32m'{}'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 316
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n\n  314 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  315 |\n> 316 |     await page.goto(DISTRICT_PATH);\n      |                ^\n  317 |     const response = await responsePromise;\n  318 |\n  319 |     const requestBody = JSON.parse(response.request().postData() || '{}');\n    at /app/tests/ui/entities.spec.ts:316:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 309
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  307 |\n  308 |   test('district profile loads candidates filtered to district', async ({ page }) => {\n> 309 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  310 |       if (!resp.url().includes('/api/graphql')) return false;\n  311 |       if (resp.request().method() !== 'POST') return false;\n  312 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:309:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:49.356Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--c0956-idates-filtered-to-district-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--c0956-idates-filtered-to-district-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 316
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-775cbc1b1c48b28b5324",
              "file": "tests/ui/entities.spec.ts",
              "line": 308,
              "column": 7
            },
            {
              "title": "district profile candidates sorted by total contributions descending",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 877,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 149,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:338:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 338
                        },
                        "snippet": "\u001b[0m \u001b[90m 336 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 337 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 338 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDISTRICT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 339 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 340 |\u001b[39m\n \u001b[90m 341 |\u001b[39m     \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 338
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n\n  336 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  337 |\n> 338 |     await page.goto(DISTRICT_PATH);\n      |                ^\n  339 |     const response = await responsePromise;\n  340 |\n  341 |     const json = await response.json();\n    at /app/tests/ui/entities.spec.ts:338:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 331
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  329 |\n  330 |   test('district profile candidates sorted by total contributions descending', async ({ page }) => {\n> 331 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  332 |       if (!resp.url().includes('/api/graphql')) return false;\n  333 |       if (resp.request().method() !== 'POST') return false;\n  334 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:331:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:50.283Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--1321e-al-contributions-descending-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--1321e-al-contributions-descending-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 338
                      }
                    },
                    {
                      "workerIndex": 892,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 238,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:338:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 338
                        },
                        "snippet": "\u001b[0m \u001b[90m 336 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 337 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 338 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDISTRICT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 339 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 340 |\u001b[39m\n \u001b[90m 341 |\u001b[39m     \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 338
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n\n  336 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  337 |\n> 338 |     await page.goto(DISTRICT_PATH);\n      |                ^\n  339 |     const response = await responsePromise;\n  340 |\n  341 |     const json = await response.json();\n    at /app/tests/ui/entities.spec.ts:338:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 331
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  329 |\n  330 |   test('district profile candidates sorted by total contributions descending', async ({ page }) => {\n> 331 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  332 |       if (!resp.url().includes('/api/graphql')) return false;\n  333 |       if (resp.request().method() !== 'POST') return false;\n  334 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:331:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:51.166Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--1321e-al-contributions-descending-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--1321e-al-contributions-descending-ui-retry1/error-context.md"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--1321e-al-contributions-descending-ui-retry1/video.webm"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--1321e-al-contributions-descending-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 338
                      }
                    },
                    {
                      "workerIndex": 908,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 153,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:338:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 338
                        },
                        "snippet": "\u001b[0m \u001b[90m 336 |\u001b[39m     }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 337 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 338 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDISTRICT_PATH\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 339 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 340 |\u001b[39m\n \u001b[90m 341 |\u001b[39m     \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 338
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/tx-10/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/tx-10/\", waiting until \"load\"\u001b[22m\n\n\n  336 |     }, { timeout: DATA_LOAD_TIMEOUT });\n  337 |\n> 338 |     await page.goto(DISTRICT_PATH);\n      |                ^\n  339 |     const response = await responsePromise;\n  340 |\n  341 |     const json = await response.json();\n    at /app/tests/ui/entities.spec.ts:338:16"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 34,
                            "line": 331
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  329 |\n  330 |   test('district profile candidates sorted by total contributions descending', async ({ page }) => {\n> 331 |     const responsePromise = page.waitForResponse(resp => {\n      |                                  ^\n  332 |       if (!resp.url().includes('/api/graphql')) return false;\n  333 |       if (resp.request().method() !== 'POST') return false;\n  334 |       const body = resp.request().postData() || '';\n    at /app/tests/ui/entities.spec.ts:331:34"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:52.363Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--1321e-al-contributions-descending-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-district-profile--1321e-al-contributions-descending-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 338
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-f00bfce3824e336086aa",
              "file": "tests/ui/entities.spec.ts",
              "line": 330,
              "column": 7
            }
          ]
        },
        {
          "title": "entity browse sort order - quantitative fields",
          "file": "tests/ui/entities.spec.ts",
          "line": 373,
          "column": 6,
          "specs": [
            {
              "title": "candidates sorted by total contributions descending",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 920,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 160,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:376:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:376:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:376:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:53.237Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-5c84b-al-contributions-descending-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-5c84b-al-contributions-descending-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 933,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 205,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:376:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:376:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:376:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:54.112Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-5c84b-al-contributions-descending-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-5c84b-al-contributions-descending-ui-retry1/error-context.md"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-5c84b-al-contributions-descending-ui-retry1/video.webm"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-5c84b-al-contributions-descending-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 946,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 150,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:376:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:376:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:376:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:55.043Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-5c84b-al-contributions-descending-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-5c84b-al-contributions-descending-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-e799dea180dde7b078da",
              "file": "tests/ui/entities.spec.ts",
              "line": 375,
              "column": 7
            },
            {
              "title": "committees sorted by total receipts descending",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 957,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:384:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:384:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:384:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:55.866Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-e4166-y-total-receipts-descending-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-e4166-y-total-receipts-descending-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 967,
                      "parallelIndex": 9,
                      "status": "failed",
                      "duration": 215,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:384:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:384:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:384:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:56.640Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-e4166-y-total-receipts-descending-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-e4166-y-total-receipts-descending-ui-retry1/error-context.md"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-e4166-y-total-receipts-descending-ui-retry1/video.webm"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-e4166-y-total-receipts-descending-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 976,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 132,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:384:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:384:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:384:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:57.511Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-e4166-y-total-receipts-descending-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-e4166-y-total-receipts-descending-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-717048594564fd91aeee",
              "file": "tests/ui/entities.spec.ts",
              "line": 383,
              "column": 7
            },
            {
              "title": "vendors sorted by total received descending",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 985,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 141,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:392:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:392:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:392:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:58.277Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-fb9d9-y-total-received-descending-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-fb9d9-y-total-received-descending-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 992,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 200,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:392:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:392:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:392:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:59.040Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-fb9d9-y-total-received-descending-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-fb9d9-y-total-received-descending-ui-retry1/error-context.md"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-fb9d9-y-total-received-descending-ui-retry1/video.webm"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-fb9d9-y-total-received-descending-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 998,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 142,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:392:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:392:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:392:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:59.878Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-fb9d9-y-total-received-descending-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-fb9d9-y-total-received-descending-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-3102f0e0d367177cc559",
              "file": "tests/ui/entities.spec.ts",
              "line": 391,
              "column": 7
            },
            {
              "title": "individuals sorted by total contributions descending",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1004,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 136,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entities.spec.ts:400:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entities.spec.ts:400:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:00.670Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-9b1cc-al-contributions-descending-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-9b1cc-al-contributions-descending-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 1010,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 203,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entities.spec.ts:400:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entities.spec.ts:400:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:01.420Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-9b1cc-al-contributions-descending-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-9b1cc-al-contributions-descending-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-9b1cc-al-contributions-descending-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-9b1cc-al-contributions-descending-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 1015,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 136,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entities.spec.ts:400:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entities.spec.ts:400:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:02.271Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-9b1cc-al-contributions-descending-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-9b1cc-al-contributions-descending-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-4172cf90fdc39f1e8b04",
              "file": "tests/ui/entities.spec.ts",
              "line": 399,
              "column": 7
            },
            {
              "title": "employers sorted by total employee contributions descending",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1020,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 144,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:412:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:412:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:412:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:03.011Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-2868b-ee-contributions-descending-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-2868b-ee-contributions-descending-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 1026,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 210,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:412:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:412:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:412:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:03.772Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-2868b-ee-contributions-descending-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-2868b-ee-contributions-descending-ui-retry1/error-context.md"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-2868b-ee-contributions-descending-ui-retry1/video.webm"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-2868b-ee-contributions-descending-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 1031,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 135,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:412:26",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 14,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mreturn\u001b[39m body\u001b[33m.\u001b[39mincludes(\u001b[32m'browseEntities'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m   }\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(url)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m responsePromise\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m   \u001b[36mconst\u001b[39m json \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m response\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\n \u001b[90m 369 |\u001b[39m   \u001b[36mconst\u001b[39m results \u001b[33m=\u001b[39m json\u001b[33m.\u001b[39mdata\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mbrowseEntities\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mresults \u001b[33m||\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 14,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     return body.includes('browseEntities');\n  365 |   }, { timeout: DATA_LOAD_TIMEOUT });\n> 366 |   await page.goto(url);\n      |              ^\n  367 |   const response = await responsePromise;\n  368 |   const json = await response.json();\n  369 |   const results = json.data?.browseEntities?.results || [];\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:366:14)\n    at /app/tests/ui/entities.spec.ts:412:26"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 32,
                            "line": 360
                          },
                          "message": "Error: page.waitForResponse: Test ended.\n\n  358 | // Helper to intercept browseEntities GraphQL response and extract score values\n  359 | async function getBrowseScores(page: import('@playwright/test').Page, url: string): Promise<number[]> {\n> 360 |   const responsePromise = page.waitForResponse(resp => {\n      |                                ^\n  361 |     if (!resp.url().includes('/api/graphql')) return false;\n  362 |     if (resp.request().method() !== 'POST') return false;\n  363 |     const body = resp.request().postData() || '';\n    at getBrowseScores (/app/tests/ui/entities.spec.ts:360:32)\n    at /app/tests/ui/entities.spec.ts:412:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:04.651Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-2868b-ee-contributions-descending-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-entity-browse-sor-2868b-ee-contributions-descending-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 14,
                        "line": 366
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-2ca76e131a1ccafc504c",
              "file": "tests/ui/entities.spec.ts",
              "line": 411,
              "column": 7
            }
          ]
        },
        {
          "title": "us.elect.info entity sections - additional index + detail",
          "file": "tests/ui/entities.spec.ts",
          "line": 420,
          "column": 6,
          "specs": [
            {
              "title": "employers section - index and random pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1038,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:423:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 423
                        },
                        "snippet": "\u001b[0m \u001b[90m 421 |\u001b[39m\n \u001b[90m 422 |\u001b[39m   test(\u001b[32m'employers section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 423 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/employers/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 424 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/employers/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 425 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Employers/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 426 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 423
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  421 |\n  422 |   test('employers section - index and random pages', async ({ page }) => {\n> 423 |     const indexResponse = await page.goto('/employers/');\n      |                                      ^\n  424 |     expect(indexResponse?.status(), '/employers/ should answer 200').toBe(200);\n  425 |     await expect(page.locator('h1')).toContainText(/Employers/i);\n  426 |\n    at /app/tests/ui/entities.spec.ts:423:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:05.432Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-095ba-on---index-and-random-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-095ba-on---index-and-random-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 423
                      }
                    },
                    {
                      "workerIndex": 1043,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 204,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:423:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 423
                        },
                        "snippet": "\u001b[0m \u001b[90m 421 |\u001b[39m\n \u001b[90m 422 |\u001b[39m   test(\u001b[32m'employers section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 423 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/employers/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 424 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/employers/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 425 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Employers/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 426 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 423
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  421 |\n  422 |   test('employers section - index and random pages', async ({ page }) => {\n> 423 |     const indexResponse = await page.goto('/employers/');\n      |                                      ^\n  424 |     expect(indexResponse?.status(), '/employers/ should answer 200').toBe(200);\n  425 |     await expect(page.locator('h1')).toContainText(/Employers/i);\n  426 |\n    at /app/tests/ui/entities.spec.ts:423:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:06.229Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-095ba-on---index-and-random-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-095ba-on---index-and-random-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-095ba-on---index-and-random-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-095ba-on---index-and-random-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 423
                      }
                    },
                    {
                      "workerIndex": 1049,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 132,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:423:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 423
                        },
                        "snippet": "\u001b[0m \u001b[90m 421 |\u001b[39m\n \u001b[90m 422 |\u001b[39m   test(\u001b[32m'employers section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 423 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/employers/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 424 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/employers/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 425 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Employers/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 426 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 423
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  421 |\n  422 |   test('employers section - index and random pages', async ({ page }) => {\n> 423 |     const indexResponse = await page.goto('/employers/');\n      |                                      ^\n  424 |     expect(indexResponse?.status(), '/employers/ should answer 200').toBe(200);\n  425 |     await expect(page.locator('h1')).toContainText(/Employers/i);\n  426 |\n    at /app/tests/ui/entities.spec.ts:423:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:07.036Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-095ba-on---index-and-random-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-095ba-on---index-and-random-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 423
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-b6b14a576f48b71af5e5",
              "file": "tests/ui/entities.spec.ts",
              "line": 422,
              "column": 7
            },
            {
              "title": "vendors section - index and random pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1053,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 151,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:443:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 443
                        },
                        "snippet": "\u001b[0m \u001b[90m 441 |\u001b[39m\n \u001b[90m 442 |\u001b[39m   test(\u001b[32m'vendors section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 443 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 444 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/vendors/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 445 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Vendors/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 446 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 443
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  441 |\n  442 |   test('vendors section - index and random pages', async ({ page }) => {\n> 443 |     const indexResponse = await page.goto('/vendors/');\n      |                                      ^\n  444 |     expect(indexResponse?.status(), '/vendors/ should answer 200').toBe(200);\n  445 |     await expect(page.locator('h1')).toContainText(/Vendors/i);\n  446 |\n    at /app/tests/ui/entities.spec.ts:443:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:07.786Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-29463-on---index-and-random-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-29463-on---index-and-random-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 443
                      }
                    },
                    {
                      "workerIndex": 1056,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 205,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:443:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 443
                        },
                        "snippet": "\u001b[0m \u001b[90m 441 |\u001b[39m\n \u001b[90m 442 |\u001b[39m   test(\u001b[32m'vendors section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 443 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 444 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/vendors/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 445 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Vendors/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 446 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 443
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  441 |\n  442 |   test('vendors section - index and random pages', async ({ page }) => {\n> 443 |     const indexResponse = await page.goto('/vendors/');\n      |                                      ^\n  444 |     expect(indexResponse?.status(), '/vendors/ should answer 200').toBe(200);\n  445 |     await expect(page.locator('h1')).toContainText(/Vendors/i);\n  446 |\n    at /app/tests/ui/entities.spec.ts:443:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:08.565Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-29463-on---index-and-random-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-29463-on---index-and-random-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-29463-on---index-and-random-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-29463-on---index-and-random-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 443
                      }
                    },
                    {
                      "workerIndex": 1060,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 123,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:443:38",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 38,
                          "line": 443
                        },
                        "snippet": "\u001b[0m \u001b[90m 441 |\u001b[39m\n \u001b[90m 442 |\u001b[39m   test(\u001b[32m'vendors section - index and random pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 443 |\u001b[39m     \u001b[36mconst\u001b[39m indexResponse \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                      \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 444 |\u001b[39m     expect(indexResponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'/vendors/ should answer 200'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 445 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[35m/Vendors/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 446 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 38,
                            "line": 443
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  441 |\n  442 |   test('vendors section - index and random pages', async ({ page }) => {\n> 443 |     const indexResponse = await page.goto('/vendors/');\n      |                                      ^\n  444 |     expect(indexResponse?.status(), '/vendors/ should answer 200').toBe(200);\n  445 |     await expect(page.locator('h1')).toContainText(/Vendors/i);\n  446 |\n    at /app/tests/ui/entities.spec.ts:443:38"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:09.380Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-29463-on---index-and-random-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-29463-on---index-and-random-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 38,
                        "line": 443
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-586eade1e031f2078f6b",
              "file": "tests/ui/entities.spec.ts",
              "line": 442,
              "column": 7
            },
            {
              "title": "counties section - index and random detail pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1063,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 131,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:463:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 463
                        },
                        "snippet": "\u001b[0m \u001b[90m 461 |\u001b[39m\n \u001b[90m 462 |\u001b[39m   test(\u001b[32m'counties section - index and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 463 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/counties/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 464 |\u001b[39m\n \u001b[90m 465 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 466 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 463
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n\n  461 |\n  462 |   test('counties section - index and random detail pages', async ({ page }) => {\n> 463 |     await page.goto('/counties/');\n      |                ^\n  464 |\n  465 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  466 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:463:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:10.106Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-a02d5-dex-and-random-detail-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-a02d5-dex-and-random-detail-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 463
                      }
                    },
                    {
                      "workerIndex": 1066,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 199,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:463:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 463
                        },
                        "snippet": "\u001b[0m \u001b[90m 461 |\u001b[39m\n \u001b[90m 462 |\u001b[39m   test(\u001b[32m'counties section - index and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 463 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/counties/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 464 |\u001b[39m\n \u001b[90m 465 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 466 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 463
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n\n  461 |\n  462 |   test('counties section - index and random detail pages', async ({ page }) => {\n> 463 |     await page.goto('/counties/');\n      |                ^\n  464 |\n  465 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  466 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:463:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:10.841Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-a02d5-dex-and-random-detail-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-a02d5-dex-and-random-detail-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-a02d5-dex-and-random-detail-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-a02d5-dex-and-random-detail-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 463
                      }
                    },
                    {
                      "workerIndex": 1069,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:463:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 463
                        },
                        "snippet": "\u001b[0m \u001b[90m 461 |\u001b[39m\n \u001b[90m 462 |\u001b[39m   test(\u001b[32m'counties section - index and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 463 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/counties/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 464 |\u001b[39m\n \u001b[90m 465 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 466 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 463
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n\n  461 |\n  462 |   test('counties section - index and random detail pages', async ({ page }) => {\n> 463 |     await page.goto('/counties/');\n      |                ^\n  464 |\n  465 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  466 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:463:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:11.672Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-a02d5-dex-and-random-detail-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-a02d5-dex-and-random-detail-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 463
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-6889bbe45fe800e5d9be",
              "file": "tests/ui/entities.spec.ts",
              "line": 462,
              "column": 7
            },
            {
              "title": "places section - index and random detail pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1072,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:491:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 491
                        },
                        "snippet": "\u001b[0m \u001b[90m 489 |\u001b[39m\n \u001b[90m 490 |\u001b[39m   test(\u001b[32m'places section - index and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 491 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/places/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 492 |\u001b[39m\n \u001b[90m 493 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 494 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 491
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n\n  489 |\n  490 |   test('places section - index and random detail pages', async ({ page }) => {\n> 491 |     await page.goto('/places/');\n      |                ^\n  492 |\n  493 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  494 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:491:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:12.420Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-45389-dex-and-random-detail-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-45389-dex-and-random-detail-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 491
                      }
                    },
                    {
                      "workerIndex": 1075,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 187,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:491:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 491
                        },
                        "snippet": "\u001b[0m \u001b[90m 489 |\u001b[39m\n \u001b[90m 490 |\u001b[39m   test(\u001b[32m'places section - index and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 491 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/places/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 492 |\u001b[39m\n \u001b[90m 493 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 494 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 491
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n\n  489 |\n  490 |   test('places section - index and random detail pages', async ({ page }) => {\n> 491 |     await page.goto('/places/');\n      |                ^\n  492 |\n  493 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  494 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:491:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:13.175Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-45389-dex-and-random-detail-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-45389-dex-and-random-detail-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-45389-dex-and-random-detail-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-45389-dex-and-random-detail-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 491
                      }
                    },
                    {
                      "workerIndex": 1078,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 141,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:491:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 491
                        },
                        "snippet": "\u001b[0m \u001b[90m 489 |\u001b[39m\n \u001b[90m 490 |\u001b[39m   test(\u001b[32m'places section - index and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 491 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/places/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 492 |\u001b[39m\n \u001b[90m 493 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 494 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 491
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n\n  489 |\n  490 |   test('places section - index and random detail pages', async ({ page }) => {\n> 491 |     await page.goto('/places/');\n      |                ^\n  492 |\n  493 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  494 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:491:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:13.999Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-45389-dex-and-random-detail-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-45389-dex-and-random-detail-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 491
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-c9580fbe75551276dc4a",
              "file": "tests/ui/entities.spec.ts",
              "line": 490,
              "column": 7
            },
            {
              "title": "postalcodes section - index and random detail pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1081,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 126,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:519:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 519
                        },
                        "snippet": "\u001b[0m \u001b[90m 517 |\u001b[39m\n \u001b[90m 518 |\u001b[39m   test(\u001b[32m'postalcodes section - index and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 519 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/postalcodes/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 520 |\u001b[39m\n \u001b[90m 521 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 522 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 519
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n\n  517 |\n  518 |   test('postalcodes section - index and random detail pages', async ({ page }) => {\n> 519 |     await page.goto('/postalcodes/');\n      |                ^\n  520 |\n  521 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  522 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:519:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:14.757Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-7c577-dex-and-random-detail-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-7c577-dex-and-random-detail-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 519
                      }
                    },
                    {
                      "workerIndex": 1084,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 205,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:519:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 519
                        },
                        "snippet": "\u001b[0m \u001b[90m 517 |\u001b[39m\n \u001b[90m 518 |\u001b[39m   test(\u001b[32m'postalcodes section - index and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 519 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/postalcodes/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 520 |\u001b[39m\n \u001b[90m 521 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 522 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 519
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n\n  517 |\n  518 |   test('postalcodes section - index and random detail pages', async ({ page }) => {\n> 519 |     await page.goto('/postalcodes/');\n      |                ^\n  520 |\n  521 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  522 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:519:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:15.510Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-7c577-dex-and-random-detail-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-7c577-dex-and-random-detail-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-7c577-dex-and-random-detail-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-7c577-dex-and-random-detail-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 519
                      }
                    },
                    {
                      "workerIndex": 1087,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 154,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:519:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 519
                        },
                        "snippet": "\u001b[0m \u001b[90m 517 |\u001b[39m\n \u001b[90m 518 |\u001b[39m   test(\u001b[32m'postalcodes section - index and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 519 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/postalcodes/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 520 |\u001b[39m\n \u001b[90m 521 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 522 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 519
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n\n  517 |\n  518 |   test('postalcodes section - index and random detail pages', async ({ page }) => {\n> 519 |     await page.goto('/postalcodes/');\n      |                ^\n  520 |\n  521 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  522 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:519:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:16.391Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-7c577-dex-and-random-detail-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-7c577-dex-and-random-detail-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 519
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-7378845a8b20f0ca8dc7",
              "file": "tests/ui/entities.spec.ts",
              "line": 518,
              "column": 7
            },
            {
              "title": "precincts section - map view and state filter",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1090,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 134,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:547:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 547
                        },
                        "snippet": "\u001b[0m \u001b[90m 545 |\u001b[39m\n \u001b[90m 546 |\u001b[39m   test(\u001b[32m'precincts section - map view and state filter'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 547 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/precincts/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 548 |\u001b[39m\n \u001b[90m 549 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 550 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 547
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n\n  545 |\n  546 |   test('precincts section - map view and state filter', async ({ page }) => {\n> 547 |     await page.goto('/precincts/');\n      |                ^\n  548 |\n  549 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  550 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:547:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:17.149Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-94b96---map-view-and-state-filter-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-94b96---map-view-and-state-filter-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 547
                      }
                    },
                    {
                      "workerIndex": 1093,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 197,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:547:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 547
                        },
                        "snippet": "\u001b[0m \u001b[90m 545 |\u001b[39m\n \u001b[90m 546 |\u001b[39m   test(\u001b[32m'precincts section - map view and state filter'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 547 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/precincts/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 548 |\u001b[39m\n \u001b[90m 549 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 550 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 547
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n\n  545 |\n  546 |   test('precincts section - map view and state filter', async ({ page }) => {\n> 547 |     await page.goto('/precincts/');\n      |                ^\n  548 |\n  549 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  550 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:547:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:17.898Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-94b96---map-view-and-state-filter-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-94b96---map-view-and-state-filter-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-94b96---map-view-and-state-filter-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-94b96---map-view-and-state-filter-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 547
                      }
                    },
                    {
                      "workerIndex": 1096,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 135,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:547:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 547
                        },
                        "snippet": "\u001b[0m \u001b[90m 545 |\u001b[39m\n \u001b[90m 546 |\u001b[39m   test(\u001b[32m'precincts section - map view and state filter'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 547 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/precincts/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 548 |\u001b[39m\n \u001b[90m 549 |\u001b[39m     \u001b[90m// Map view is default — verify Leaflet map renders with GeoJSON state shapes\u001b[39m\n \u001b[90m 550 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#map.leaflet-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 547
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n\n  545 |\n  546 |   test('precincts section - map view and state filter', async ({ page }) => {\n> 547 |     await page.goto('/precincts/');\n      |                ^\n  548 |\n  549 |     // Map view is default — verify Leaflet map renders with GeoJSON state shapes\n  550 |     await expect(page.locator('#map.leaflet-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/entities.spec.ts:547:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:18.736Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-94b96---map-view-and-state-filter-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-94b96---map-view-and-state-filter-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 547
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-b994931c7f61cea69263",
              "file": "tests/ui/entities.spec.ts",
              "line": 546,
              "column": 7
            },
            {
              "title": "tracts section - state/county filter and random detail pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1099,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 139,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:601:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 601
                        },
                        "snippet": "\u001b[0m \u001b[90m 599 |\u001b[39m   test(\u001b[32m'tracts section - state/county filter and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 600 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m \u001b[90m// Tracts require sequential state→county→tract interactions with GraphQL\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 601 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/tracts/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 602 |\u001b[39m\n \u001b[90m 603 |\u001b[39m     \u001b[90m// Switch to List view — tract-index.js loads dynamically on list view activation\u001b[39m\n \u001b[90m 604 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.toggle-btn[data-view=\"list\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 601
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n\n  599 |   test('tracts section - state/county filter and random detail pages', async ({ page }) => {\n  600 |     test.setTimeout(120000); // Tracts require sequential state→county→tract interactions with GraphQL\n> 601 |     await page.goto('/tracts/');\n      |                ^\n  602 |\n  603 |     // Switch to List view — tract-index.js loads dynamically on list view activation\n  604 |     await page.locator('.toggle-btn[data-view=\"list\"]').click();\n    at /app/tests/ui/entities.spec.ts:601:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:19.509Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-bf75c-ter-and-random-detail-pages-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-bf75c-ter-and-random-detail-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 601
                      }
                    },
                    {
                      "workerIndex": 1102,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 210,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:601:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 601
                        },
                        "snippet": "\u001b[0m \u001b[90m 599 |\u001b[39m   test(\u001b[32m'tracts section - state/county filter and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 600 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m \u001b[90m// Tracts require sequential state→county→tract interactions with GraphQL\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 601 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/tracts/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 602 |\u001b[39m\n \u001b[90m 603 |\u001b[39m     \u001b[90m// Switch to List view — tract-index.js loads dynamically on list view activation\u001b[39m\n \u001b[90m 604 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.toggle-btn[data-view=\"list\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 601
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n\n  599 |   test('tracts section - state/county filter and random detail pages', async ({ page }) => {\n  600 |     test.setTimeout(120000); // Tracts require sequential state→county→tract interactions with GraphQL\n> 601 |     await page.goto('/tracts/');\n      |                ^\n  602 |\n  603 |     // Switch to List view — tract-index.js loads dynamically on list view activation\n  604 |     await page.locator('.toggle-btn[data-view=\"list\"]').click();\n    at /app/tests/ui/entities.spec.ts:601:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:20.268Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-bf75c-ter-and-random-detail-pages-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-bf75c-ter-and-random-detail-pages-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-bf75c-ter-and-random-detail-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-bf75c-ter-and-random-detail-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 601
                      }
                    },
                    {
                      "workerIndex": 1105,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 127,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entities.spec.ts:601:16",
                        "location": {
                          "file": "/app/tests/ui/entities.spec.ts",
                          "column": 16,
                          "line": 601
                        },
                        "snippet": "\u001b[0m \u001b[90m 599 |\u001b[39m   test(\u001b[32m'tracts section - state/county filter and random detail pages'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 600 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m \u001b[90m// Tracts require sequential state→county→tract interactions with GraphQL\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 601 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/tracts/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 602 |\u001b[39m\n \u001b[90m 603 |\u001b[39m     \u001b[90m// Switch to List view — tract-index.js loads dynamically on list view activation\u001b[39m\n \u001b[90m 604 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.toggle-btn[data-view=\"list\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "column": 16,
                            "line": 601
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n\n  599 |   test('tracts section - state/county filter and random detail pages', async ({ page }) => {\n  600 |     test.setTimeout(120000); // Tracts require sequential state→county→tract interactions with GraphQL\n> 601 |     await page.goto('/tracts/');\n      |                ^\n  602 |\n  603 |     // Switch to List view — tract-index.js loads dynamically on list view activation\n  604 |     await page.locator('.toggle-btn[data-view=\"list\"]').click();\n    at /app/tests/ui/entities.spec.ts:601:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:21.102Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-bf75c-ter-and-random-detail-pages-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-bf75c-ter-and-random-detail-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "column": 16,
                        "line": 601
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e590b0e25242679a26f1-073b2eb60264357a1ca9",
              "file": "tests/ui/entities.spec.ts",
              "line": 599,
              "column": 7
            }
          ]
        },
        {
          "title": "us.elect.info entity sections - individuals (premium)",
          "file": "tests/ui/entities.spec.ts",
          "line": 652,
          "column": 6,
          "specs": [
            {
              "title": "individuals section - index and random pages",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Requires PLAYWRIGHT_AUTH_USER/PLAYWRIGHT_AUTH_PASS",
                      "location": {
                        "file": "/app/tests/ui/entities.spec.ts",
                        "line": 661,
                        "column": 10
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1108,
                      "parallelIndex": 0,
                      "status": "skipped",
                      "duration": 96,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:21.838Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Requires PLAYWRIGHT_AUTH_USER/PLAYWRIGHT_AUTH_PASS",
                          "location": {
                            "file": "/app/tests/ui/entities.spec.ts",
                            "line": 661,
                            "column": 10
                          }
                        }
                      ],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entities-us-elect-info-ent-7f2e9-on---index-and-random-pages-ui/test-finished-1.png"
                        }
                      ]
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "e590b0e25242679a26f1-fa85143bab060214a738",
              "file": "tests/ui/entities.spec.ts",
              "line": 660,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/entity-filters.spec.ts",
      "file": "tests/ui/entity-filters.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "individual donor filters",
          "file": "tests/ui/entity-filters.spec.ts",
          "line": 20,
          "column": 6,
          "specs": [
            {
              "title": "state, cycle, lifetime total and lean narrow the list and land in the URL",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 12,
                      "parallelIndex": 12,
                      "status": "timedOut",
                      "duration": 30022,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/entity-filters.spec.ts:21:8",
                        "location": {
                          "file": "/app/tests/ui/entity-filters.spec.ts",
                          "column": 8,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m\n \u001b[90m 20 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'individual donor filters'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasFilters(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no structured filters yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   \u001b[90m// Donor records are premium (sites#277).\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 8,
                            "line": 21
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  19 |\n  20 | test.describe('individual donor filters', () => {\n> 21 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  22 |     test.skip(!(await apiHasFilters(request)), 'the API behind this host has no structured filters yet');\n  23 |   });\n  24 |   // Donor records are premium (sites#277).\n    at /app/tests/ui/entity-filters.spec.ts:21:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 29,
                            "line": 11
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n\n   9 | /** The CI test pod proxies to the production API, which gains filters only with the release. */\n  10 | async function apiHasFilters(request: APIRequestContext): Promise<boolean> {\n> 11 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  12 |     data: { query: '{ __type(name: \"EntityFilterInput\") { name } }' },\n  13 |     headers: visitorHeaders(),\n  14 |   });\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.183Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--168cd-he-list-and-land-in-the-URL-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-filters.spec.ts",
                        "column": 8,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 37,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 11431,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23",
                        "location": {
                          "file": "/app/tests/ui/entity-filters.spec.ts",
                          "column": 29,
                          "line": 11
                        },
                        "snippet": "\u001b[0m \u001b[90m  9 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which gains filters only with the release. */\u001b[39m\n \u001b[90m 10 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasFilters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 11 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 12 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityFilterInput\") { name } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 13 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 29,
                            "line": 11
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n\n   9 | /** The CI test pod proxies to the production API, which gains filters only with the release. */\n  10 | async function apiHasFilters(request: APIRequestContext): Promise<boolean> {\n> 11 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  12 |     data: { query: '{ __type(name: \"EntityFilterInput\") { name } }' },\n  13 |     headers: visitorHeaders(),\n  14 |   });\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entity-filters.spec.ts:26:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.805Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--168cd-he-list-and-land-in-the-URL-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--168cd-he-list-and-land-in-the-URL-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-filters.spec.ts",
                        "column": 29,
                        "line": 11
                      }
                    },
                    {
                      "workerIndex": 87,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 63,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23",
                        "location": {
                          "file": "/app/tests/ui/entity-filters.spec.ts",
                          "column": 29,
                          "line": 11
                        },
                        "snippet": "\u001b[0m \u001b[90m  9 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which gains filters only with the release. */\u001b[39m\n \u001b[90m 10 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasFilters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 11 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 12 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityFilterInput\") { name } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 13 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 29,
                            "line": 11
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n\n   9 | /** The CI test pod proxies to the production API, which gains filters only with the release. */\n  10 | async function apiHasFilters(request: APIRequestContext): Promise<boolean> {\n> 11 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  12 |     data: { query: '{ __type(name: \"EntityFilterInput\") { name } }' },\n  13 |     headers: visitorHeaders(),\n  14 |   });\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entity-filters.spec.ts:26:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:06.298Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--168cd-he-list-and-land-in-the-URL-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-filters.spec.ts",
                        "column": 29,
                        "line": 11
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "589b4d2d59414df6d16a-86f7e52d8ac4c2add6d3",
              "file": "tests/ui/entity-filters.spec.ts",
              "line": 30,
              "column": 7
            },
            {
              "title": "text filters: employer and ZIP prefix",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 117,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 96,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23",
                        "location": {
                          "file": "/app/tests/ui/entity-filters.spec.ts",
                          "column": 29,
                          "line": 11
                        },
                        "snippet": "\u001b[0m \u001b[90m  9 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which gains filters only with the release. */\u001b[39m\n \u001b[90m 10 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasFilters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 11 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 12 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityFilterInput\") { name } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 13 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 29,
                            "line": 11
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n\n   9 | /** The CI test pod proxies to the production API, which gains filters only with the release. */\n  10 | async function apiHasFilters(request: APIRequestContext): Promise<boolean> {\n> 11 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  12 |     data: { query: '{ __type(name: \"EntityFilterInput\") { name } }' },\n  13 |     headers: visitorHeaders(),\n  14 |   });\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entity-filters.spec.ts:26:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:07.405Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--88dba-ers-employer-and-ZIP-prefix-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-filters.spec.ts",
                        "column": 29,
                        "line": 11
                      }
                    },
                    {
                      "workerIndex": 136,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23",
                        "location": {
                          "file": "/app/tests/ui/entity-filters.spec.ts",
                          "column": 29,
                          "line": 11
                        },
                        "snippet": "\u001b[0m \u001b[90m  9 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which gains filters only with the release. */\u001b[39m\n \u001b[90m 10 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasFilters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 11 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 12 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityFilterInput\") { name } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 13 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 29,
                            "line": 11
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n\n   9 | /** The CI test pod proxies to the production API, which gains filters only with the release. */\n  10 | async function apiHasFilters(request: APIRequestContext): Promise<boolean> {\n> 11 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  12 |     data: { query: '{ __type(name: \"EntityFilterInput\") { name } }' },\n  13 |     headers: visitorHeaders(),\n  14 |   });\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/entity-filters.spec.ts:26:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:08.530Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--88dba-ers-employer-and-ZIP-prefix-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--88dba-ers-employer-and-ZIP-prefix-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-filters.spec.ts",
                        "column": 29,
                        "line": 11
                      }
                    },
                    {
                      "workerIndex": 164,
                      "parallelIndex": 12,
                      "status": "timedOut",
                      "duration": 30022,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/entity-filters.spec.ts:21:8",
                        "location": {
                          "file": "/app/tests/ui/entity-filters.spec.ts",
                          "column": 8,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m\n \u001b[90m 20 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'individual donor filters'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasFilters(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no structured filters yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   \u001b[90m// Donor records are premium (sites#277).\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 8,
                            "line": 21
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  19 |\n  20 | test.describe('individual donor filters', () => {\n> 21 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  22 |     test.skip(!(await apiHasFilters(request)), 'the API behind this host has no structured filters yet');\n  23 |   });\n  24 |   // Donor records are premium (sites#277).\n    at /app/tests/ui/entity-filters.spec.ts:21:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 29,
                            "line": 11
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n\n   9 | /** The CI test pod proxies to the production API, which gains filters only with the release. */\n  10 | async function apiHasFilters(request: APIRequestContext): Promise<boolean> {\n> 11 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  12 |     data: { query: '{ __type(name: \"EntityFilterInput\") { name } }' },\n  13 |     headers: visitorHeaders(),\n  14 |   });\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:09.635Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--88dba-ers-employer-and-ZIP-prefix-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-filters.spec.ts",
                        "column": 8,
                        "line": 21
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "589b4d2d59414df6d16a-d602b2d29045026bf1c1",
              "file": "tests/ui/entity-filters.spec.ts",
              "line": 51,
              "column": 7
            },
            {
              "title": "an unknown filter field is refused by the API",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 190,
                      "parallelIndex": 12,
                      "status": "timedOut",
                      "duration": 30029,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/entity-filters.spec.ts:21:8",
                        "location": {
                          "file": "/app/tests/ui/entity-filters.spec.ts",
                          "column": 8,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m\n \u001b[90m 20 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'individual donor filters'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasFilters(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no structured filters yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   \u001b[90m// Donor records are premium (sites#277).\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 8,
                            "line": 21
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  19 |\n  20 | test.describe('individual donor filters', () => {\n> 21 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  22 |     test.skip(!(await apiHasFilters(request)), 'the API behind this host has no structured filters yet');\n  23 |   });\n  24 |   // Donor records are premium (sites#277).\n    at /app/tests/ui/entity-filters.spec.ts:21:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 29,
                            "line": 11
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n\n   9 | /** The CI test pod proxies to the production API, which gains filters only with the release. */\n  10 | async function apiHasFilters(request: APIRequestContext): Promise<boolean> {\n> 11 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  12 |     data: { query: '{ __type(name: \"EntityFilterInput\") { name } }' },\n  13 |     headers: visitorHeaders(),\n  14 |   });\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:40.254Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--b7e36-field-is-refused-by-the-API-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-filters.spec.ts",
                        "column": 8,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 326,
                      "parallelIndex": 12,
                      "status": "timedOut",
                      "duration": 30056,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/entity-filters.spec.ts:21:8",
                        "location": {
                          "file": "/app/tests/ui/entity-filters.spec.ts",
                          "column": 8,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m\n \u001b[90m 20 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'individual donor filters'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasFilters(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no structured filters yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   \u001b[90m// Donor records are premium (sites#277).\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 8,
                            "line": 21
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  19 |\n  20 | test.describe('individual donor filters', () => {\n> 21 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  22 |     test.skip(!(await apiHasFilters(request)), 'the API behind this host has no structured filters yet');\n  23 |   });\n  24 |   // Donor records are premium (sites#277).\n    at /app/tests/ui/entity-filters.spec.ts:21:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 29,
                            "line": 11
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n\n   9 | /** The CI test pod proxies to the production API, which gains filters only with the release. */\n  10 | async function apiHasFilters(request: APIRequestContext): Promise<boolean> {\n> 11 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  12 |     data: { query: '{ __type(name: \"EntityFilterInput\") { name } }' },\n  13 |     headers: visitorHeaders(),\n  14 |   });\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:10.817Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--b7e36-field-is-refused-by-the-API-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--b7e36-field-is-refused-by-the-API-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-filters.spec.ts",
                        "column": 8,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 343,
                      "parallelIndex": 12,
                      "status": "timedOut",
                      "duration": 30022,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/entity-filters.spec.ts:21:8",
                        "location": {
                          "file": "/app/tests/ui/entity-filters.spec.ts",
                          "column": 8,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m\n \u001b[90m 20 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'individual donor filters'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasFilters(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no structured filters yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   \u001b[90m// Donor records are premium (sites#277).\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 8,
                            "line": 21
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  19 |\n  20 | test.describe('individual donor filters', () => {\n> 21 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  22 |     test.skip(!(await apiHasFilters(request)), 'the API behind this host has no structured filters yet');\n  23 |   });\n  24 |   // Donor records are premium (sites#277).\n    at /app/tests/ui/entity-filters.spec.ts:21:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-filters.spec.ts",
                            "column": 29,
                            "line": 11
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 60\u001b[22m\n\n\n   9 | /** The CI test pod proxies to the production API, which gains filters only with the release. */\n  10 | async function apiHasFilters(request: APIRequestContext): Promise<boolean> {\n> 11 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  12 |     data: { query: '{ __type(name: \"EntityFilterInput\") { name } }' },\n  13 |     headers: visitorHeaders(),\n  14 |   });\n    at apiHasFilters (/app/tests/ui/entity-filters.spec.ts:11:29)\n    at /app/tests/ui/entity-filters.spec.ts:22:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:41.443Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-filters-individual--b7e36-field-is-refused-by-the-API-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-filters.spec.ts",
                        "column": 8,
                        "line": 21
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "589b4d2d59414df6d16a-2f26c7bcfc0fe5f858da",
              "file": "tests/ui/entity-filters.spec.ts",
              "line": 59,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/entity-graph.spec.ts",
      "file": "tests/ui/entity-graph.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "entity-graph script injection",
          "file": "tests/ui/entity-graph.spec.ts",
          "line": 26,
          "column": 6,
          "specs": [
            {
              "title": "injected once on /committees/a75a9110-f1db-a945-39a8-7503ed3c04da/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 13,
                      "parallelIndex": 13,
                      "status": "timedOut",
                      "duration": 30018,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 29
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  27 |   for (const path of [DNC, HARRIS]) {\n  28 |     test(`injected once on ${path}`, async ({ request }) => {\n> 29 |       const res = await request.get(path);\n     |                                 ^\n  30 |       expect(res.status()).toBe(200);\n  31 |       expect((await res.text()).split(SCRIPT).length - 1).toBe(1);\n  32 |     });\n    at /app/tests/ui/entity-graph.spec.ts:29:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.210Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--06f2b-1db-a945-39a8-7503ed3c04da--ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 38,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 11317,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:29:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 29
                        },
                        "snippet": "\u001b[0m \u001b[90m 27 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 28 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 29 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 30 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect((\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 32 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 29
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  27 |   for (const path of [DNC, HARRIS]) {\n  28 |     test(`injected once on ${path}`, async ({ request }) => {\n> 29 |       const res = await request.get(path);\n     |                                 ^\n  30 |       expect(res.status()).toBe(200);\n  31 |       expect((await res.text()).split(SCRIPT).length - 1).toBe(1);\n  32 |     });\n    at /app/tests/ui/entity-graph.spec.ts:29:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.871Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--06f2b-1db-a945-39a8-7503ed3c04da--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--06f2b-1db-a945-39a8-7503ed3c04da--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 29
                      }
                    },
                    {
                      "workerIndex": 76,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:29:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 29
                        },
                        "snippet": "\u001b[0m \u001b[90m 27 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 28 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 29 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 30 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect((\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 32 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 29
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  27 |   for (const path of [DNC, HARRIS]) {\n  28 |     test(`injected once on ${path}`, async ({ request }) => {\n> 29 |       const res = await request.get(path);\n     |                                 ^\n  30 |       expect(res.status()).toBe(200);\n  31 |       expect((await res.text()).split(SCRIPT).length - 1).toBe(1);\n  32 |     });\n    at /app/tests/ui/entity-graph.spec.ts:29:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:06.081Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--06f2b-1db-a945-39a8-7503ed3c04da--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 29
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-29e66cb8f40124191f24",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 28,
              "column": 9
            },
            {
              "title": "injected once on /candidates/a8897257-430c-2bf3-4498-349021b09ca3/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 101,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:29:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 29
                        },
                        "snippet": "\u001b[0m \u001b[90m 27 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 28 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 29 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 30 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect((\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 32 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 29
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  27 |   for (const path of [DNC, HARRIS]) {\n  28 |     test(`injected once on ${path}`, async ({ request }) => {\n> 29 |       const res = await request.get(path);\n     |                                 ^\n  30 |       expect(res.status()).toBe(200);\n  31 |       expect((await res.text()).split(SCRIPT).length - 1).toBe(1);\n  32 |     });\n    at /app/tests/ui/entity-graph.spec.ts:29:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.877Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--e4372-30c-2bf3-4498-349021b09ca3--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 29
                      }
                    },
                    {
                      "workerIndex": 125,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 84,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:29:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 29
                        },
                        "snippet": "\u001b[0m \u001b[90m 27 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 28 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 29 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 30 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect((\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 32 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 29
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  27 |   for (const path of [DNC, HARRIS]) {\n  28 |     test(`injected once on ${path}`, async ({ request }) => {\n> 29 |       const res = await request.get(path);\n     |                                 ^\n  30 |       expect(res.status()).toBe(200);\n  31 |       expect((await res.text()).split(SCRIPT).length - 1).toBe(1);\n  32 |     });\n    at /app/tests/ui/entity-graph.spec.ts:29:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.672Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--e4372-30c-2bf3-4498-349021b09ca3--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--e4372-30c-2bf3-4498-349021b09ca3--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 29
                      }
                    },
                    {
                      "workerIndex": 137,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:29:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 29
                        },
                        "snippet": "\u001b[0m \u001b[90m 27 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 28 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 29 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 30 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect((\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 32 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 29
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  27 |   for (const path of [DNC, HARRIS]) {\n  28 |     test(`injected once on ${path}`, async ({ request }) => {\n> 29 |       const res = await request.get(path);\n     |                                 ^\n  30 |       expect(res.status()).toBe(200);\n  31 |       expect((await res.text()).split(SCRIPT).length - 1).toBe(1);\n  32 |     });\n    at /app/tests/ui/entity-graph.spec.ts:29:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.555Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--e4372-30c-2bf3-4498-349021b09ca3--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 29
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-8caee27d666b889f629d",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 28,
              "column": 9
            },
            {
              "title": "a geography page names its graph node: /states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 161,
                      "parallelIndex": 13,
                      "status": "timedOut",
                      "duration": 30018,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 31,
                            "line": 36
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  34 |\n  35 |   test(`a geography page names its graph node: ${AK}`, async ({ request }) => {\n> 36 |     const res = await request.get(AK);\n     |                               ^\n  37 |     expect(res.status()).toBe(200);\n  38 |     const html = await res.text();\n  39 |     test.skip(!html.includes('entity-graph.js'), 'the us-pages renderer predates GraphScript');\n    at /app/tests/ui/entity-graph.spec.ts:36:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.398Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--85c03-554-f435-2a6d-50b3c8cc01d7--ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 188,
                      "parallelIndex": 13,
                      "status": "timedOut",
                      "duration": 30055,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 31,
                            "line": 36
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  34 |\n  35 |   test(`a geography page names its graph node: ${AK}`, async ({ request }) => {\n> 36 |     const res = await request.get(AK);\n     |                               ^\n  37 |     expect(res.status()).toBe(200);\n  38 |     const html = await res.text();\n  39 |     test.skip(!html.includes('entity-graph.js'), 'the us-pages renderer predates GraphScript');\n    at /app/tests/ui/entity-graph.spec.ts:36:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:39.985Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--85c03-554-f435-2a6d-50b3c8cc01d7--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--85c03-554-f435-2a6d-50b3c8cc01d7--ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 323,
                      "parallelIndex": 13,
                      "status": "timedOut",
                      "duration": 30037,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 31,
                            "line": 36
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  34 |\n  35 |   test(`a geography page names its graph node: ${AK}`, async ({ request }) => {\n> 36 |     const res = await request.get(AK);\n     |                               ^\n  37 |     expect(res.status()).toBe(200);\n  38 |     const html = await res.text();\n  39 |     test.skip(!html.includes('entity-graph.js'), 'the us-pages renderer predates GraphScript');\n    at /app/tests/ui/entity-graph.spec.ts:36:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:10.605Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--85c03-554-f435-2a6d-50b3c8cc01d7--ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-497a9a5f2e51230029f1",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 35,
              "column": 7
            },
            {
              "title": "not injected on /elections/2024/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 340,
                      "parallelIndex": 13,
                      "status": "timedOut",
                      "duration": 30022,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 45
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  43 |   for (const path of OTHER_PAGES) {\n  44 |     test(`not injected on ${path}`, async ({ request }) => {\n> 45 |       const res = await request.get(path);\n     |                                 ^\n  46 |       expect(res.status()).toBe(200);\n  47 |       expect(await res.text()).not.toContain('entity-graph.js');\n  48 |     });\n    at /app/tests/ui/entity-graph.spec.ts:45:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:41.202Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--df191-injected-on-elections-2024--ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 436,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 19304,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:45:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 45
                        },
                        "snippet": "\u001b[0m \u001b[90m 43 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 44 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 45 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 46 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'entity-graph.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 45
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  43 |   for (const path of OTHER_PAGES) {\n  44 |     test(`not injected on ${path}`, async ({ request }) => {\n> 45 |       const res = await request.get(path);\n     |                                 ^\n  46 |       expect(res.status()).toBe(200);\n  47 |       expect(await res.text()).not.toContain('entity-graph.js');\n  48 |     });\n    at /app/tests/ui/entity-graph.spec.ts:45:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:11.757Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--df191-injected-on-elections-2024--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--df191-injected-on-elections-2024--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 45
                      }
                    },
                    {
                      "workerIndex": 488,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:45:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 45
                        },
                        "snippet": "\u001b[0m \u001b[90m 43 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 44 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 45 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 46 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'entity-graph.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 45
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  43 |   for (const path of OTHER_PAGES) {\n  44 |     test(`not injected on ${path}`, async ({ request }) => {\n> 45 |       const res = await request.get(path);\n     |                                 ^\n  46 |       expect(res.status()).toBe(200);\n  47 |       expect(await res.text()).not.toContain('entity-graph.js');\n  48 |     });\n    at /app/tests/ui/entity-graph.spec.ts:45:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:31.737Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--df191-injected-on-elections-2024--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 45
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-a1eb6278fed6d4b5614b",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 44,
              "column": 9
            },
            {
              "title": "not injected on /offices/president/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 503,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:45:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 45
                        },
                        "snippet": "\u001b[0m \u001b[90m 43 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 44 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 45 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 46 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'entity-graph.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 45
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  43 |   for (const path of OTHER_PAGES) {\n  44 |     test(`not injected on ${path}`, async ({ request }) => {\n> 45 |       const res = await request.get(path);\n     |                                 ^\n  46 |       expect(res.status()).toBe(200);\n  47 |       expect(await res.text()).not.toContain('entity-graph.js');\n  48 |     });\n    at /app/tests/ui/entity-graph.spec.ts:45:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.469Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c622e-ected-on-offices-president--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 45
                      }
                    },
                    {
                      "workerIndex": 521,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 62,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:45:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 45
                        },
                        "snippet": "\u001b[0m \u001b[90m 43 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 44 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 45 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 46 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'entity-graph.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 45
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  43 |   for (const path of OTHER_PAGES) {\n  44 |     test(`not injected on ${path}`, async ({ request }) => {\n> 45 |       const res = await request.get(path);\n     |                                 ^\n  46 |       expect(res.status()).toBe(200);\n  47 |       expect(await res.text()).not.toContain('entity-graph.js');\n  48 |     });\n    at /app/tests/ui/entity-graph.spec.ts:45:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:33.214Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c622e-ected-on-offices-president--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c622e-ected-on-offices-president--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 45
                      }
                    },
                    {
                      "workerIndex": 542,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:45:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 45
                        },
                        "snippet": "\u001b[0m \u001b[90m 43 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 44 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 45 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 46 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'entity-graph.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 45
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  43 |   for (const path of OTHER_PAGES) {\n  44 |     test(`not injected on ${path}`, async ({ request }) => {\n> 45 |       const res = await request.get(path);\n     |                                 ^\n  46 |       expect(res.status()).toBe(200);\n  47 |       expect(await res.text()).not.toContain('entity-graph.js');\n  48 |     });\n    at /app/tests/ui/entity-graph.spec.ts:45:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:34.025Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c622e-ected-on-offices-president--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 45
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-b3bac75bfbf090c5eca2",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 44,
              "column": 9
            }
          ]
        },
        {
          "title": "entityGraph API",
          "file": "tests/ui/entity-graph.spec.ts",
          "line": 52,
          "column": 6,
          "specs": [
            {
              "title": "C00010603: neighbours without individuals, money edges with amounts",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 559,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:55:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 55
                        },
                        "snippet": "\u001b[0m \u001b[90m 53 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m fecId \u001b[36mof\u001b[39m [\u001b[32m'C00010603'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'P00009423'\u001b[39m]) {\n \u001b[90m 54 |\u001b[39m     test(\u001b[32m`${fecId}: neighbours without individuals, money edges with amounts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 55 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 56 |\u001b[39m         data\u001b[33m:\u001b[39m {\n \u001b[90m 57 |\u001b[39m           query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 58 |\u001b[39m           variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId }\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 55
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n\n  53 |   for (const fecId of ['C00010603', 'P00009423']) {\n  54 |     test(`${fecId}: neighbours without individuals, money edges with amounts`, async ({ request }) => {\n> 55 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  56 |         data: {\n  57 |           query: 'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }',\n  58 |           variables: { f: fecId },\n    at /app/tests/ui/entity-graph.spec.ts:55:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.756Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entityGraph-A-ce113-ls-money-edges-with-amounts-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 55
                      }
                    },
                    {
                      "workerIndex": 577,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 61,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:55:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 55
                        },
                        "snippet": "\u001b[0m \u001b[90m 53 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m fecId \u001b[36mof\u001b[39m [\u001b[32m'C00010603'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'P00009423'\u001b[39m]) {\n \u001b[90m 54 |\u001b[39m     test(\u001b[32m`${fecId}: neighbours without individuals, money edges with amounts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 55 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 56 |\u001b[39m         data\u001b[33m:\u001b[39m {\n \u001b[90m 57 |\u001b[39m           query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 58 |\u001b[39m           variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId }\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 55
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n\n  53 |   for (const fecId of ['C00010603', 'P00009423']) {\n  54 |     test(`${fecId}: neighbours without individuals, money edges with amounts`, async ({ request }) => {\n> 55 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  56 |         data: {\n  57 |           query: 'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }',\n  58 |           variables: { f: fecId },\n    at /app/tests/ui/entity-graph.spec.ts:55:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.504Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entityGraph-A-ce113-ls-money-edges-with-amounts-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entityGraph-A-ce113-ls-money-edges-with-amounts-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 55
                      }
                    },
                    {
                      "workerIndex": 596,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:55:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 55
                        },
                        "snippet": "\u001b[0m \u001b[90m 53 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m fecId \u001b[36mof\u001b[39m [\u001b[32m'C00010603'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'P00009423'\u001b[39m]) {\n \u001b[90m 54 |\u001b[39m     test(\u001b[32m`${fecId}: neighbours without individuals, money edges with amounts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 55 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 56 |\u001b[39m         data\u001b[33m:\u001b[39m {\n \u001b[90m 57 |\u001b[39m           query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 58 |\u001b[39m           variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId }\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 55
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n\n  53 |   for (const fecId of ['C00010603', 'P00009423']) {\n  54 |     test(`${fecId}: neighbours without individuals, money edges with amounts`, async ({ request }) => {\n> 55 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  56 |         data: {\n  57 |           query: 'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }',\n  58 |           variables: { f: fecId },\n    at /app/tests/ui/entity-graph.spec.ts:55:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.273Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entityGraph-A-ce113-ls-money-edges-with-amounts-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 55
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-b3fdec8c25bff91f5112",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 54,
              "column": 9
            },
            {
              "title": "P00009423: neighbours without individuals, money edges with amounts",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 611,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:55:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 55
                        },
                        "snippet": "\u001b[0m \u001b[90m 53 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m fecId \u001b[36mof\u001b[39m [\u001b[32m'C00010603'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'P00009423'\u001b[39m]) {\n \u001b[90m 54 |\u001b[39m     test(\u001b[32m`${fecId}: neighbours without individuals, money edges with amounts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 55 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 56 |\u001b[39m         data\u001b[33m:\u001b[39m {\n \u001b[90m 57 |\u001b[39m           query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 58 |\u001b[39m           variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId }\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 55
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n\n  53 |   for (const fecId of ['C00010603', 'P00009423']) {\n  54 |     test(`${fecId}: neighbours without individuals, money edges with amounts`, async ({ request }) => {\n> 55 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  56 |         data: {\n  57 |           query: 'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }',\n  58 |           variables: { f: fecId },\n    at /app/tests/ui/entity-graph.spec.ts:55:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:37.008Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entityGraph-A-02286-ls-money-edges-with-amounts-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 55
                      }
                    },
                    {
                      "workerIndex": 625,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 63,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:55:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 55
                        },
                        "snippet": "\u001b[0m \u001b[90m 53 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m fecId \u001b[36mof\u001b[39m [\u001b[32m'C00010603'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'P00009423'\u001b[39m]) {\n \u001b[90m 54 |\u001b[39m     test(\u001b[32m`${fecId}: neighbours without individuals, money edges with amounts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 55 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 56 |\u001b[39m         data\u001b[33m:\u001b[39m {\n \u001b[90m 57 |\u001b[39m           query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 58 |\u001b[39m           variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId }\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 55
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n\n  53 |   for (const fecId of ['C00010603', 'P00009423']) {\n  54 |     test(`${fecId}: neighbours without individuals, money edges with amounts`, async ({ request }) => {\n> 55 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  56 |         data: {\n  57 |           query: 'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }',\n  58 |           variables: { f: fecId },\n    at /app/tests/ui/entity-graph.spec.ts:55:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.752Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entityGraph-A-02286-ls-money-edges-with-amounts-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entityGraph-A-02286-ls-money-edges-with-amounts-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 55
                      }
                    },
                    {
                      "workerIndex": 646,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:55:33",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 33,
                          "line": 55
                        },
                        "snippet": "\u001b[0m \u001b[90m 53 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m fecId \u001b[36mof\u001b[39m [\u001b[32m'C00010603'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'P00009423'\u001b[39m]) {\n \u001b[90m 54 |\u001b[39m     test(\u001b[32m`${fecId}: neighbours without individuals, money edges with amounts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 55 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 56 |\u001b[39m         data\u001b[33m:\u001b[39m {\n \u001b[90m 57 |\u001b[39m           query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }'\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 58 |\u001b[39m           variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId }\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 33,
                            "line": 55
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 165\u001b[22m\n\n\n  53 |   for (const fecId of ['C00010603', 'P00009423']) {\n  54 |     test(`${fecId}: neighbours without individuals, money edges with amounts`, async ({ request }) => {\n> 55 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  56 |         data: {\n  57 |           query: 'query($f: String!) { entityGraph(fecId: $f) { focalId nodes { id label labels focal displayName } edges { type amount } } }',\n  58 |           variables: { f: fecId },\n    at /app/tests/ui/entity-graph.spec.ts:55:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.502Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entityGraph-A-02286-ls-money-edges-with-amounts-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 33,
                        "line": 55
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-dd19f11790f289a6f255",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 54,
              "column": 9
            }
          ]
        },
        {
          "title": "nodeGraph API",
          "file": "tests/ui/entity-graph.spec.ts",
          "line": 88,
          "column": 6,
          "specs": [
            {
              "title": "a county: neighbours drawn, blocks counted, no individuals",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 660,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:90:21",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:90:21"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:39.180Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-ffb2b-ocks-counted-no-individuals-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 672,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 64,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:90:21",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:90:21"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:39.903Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-ffb2b-ocks-counted-no-individuals-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-ffb2b-ocks-counted-no-individuals-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 693,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:90:21",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:90:21"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.722Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-ffb2b-ocks-counted-no-individuals-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-6cf3b7da2391e0b9f756",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 89,
              "column": 7
            },
            {
              "title": "an unknown label is null",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 714,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 30,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 247\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 247\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:104:21",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 247\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:104:21"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:41.418Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-an-unknown-label-is-null-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 723,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 67,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 247\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 247\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:104:21",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 247\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:104:21"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:42.115Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-an-unknown-label-is-null-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-an-unknown-label-is-null-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 739,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 247\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 247\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:104:21",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 247\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:104:21"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.926Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-an-unknown-label-is-null-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-d4d728dc8f6243f72793",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 103,
              "column": 7
            },
            {
              "title": "voterGraph is refused on the public endpoint",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 757,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 87\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 87\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:110:31",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 31,
                          "line": 110
                        },
                        "snippet": "\u001b[0m \u001b[90m 108 |\u001b[39m\n \u001b[90m 109 |\u001b[39m   test(\u001b[32m'voterGraph is refused on the public endpoint'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 110 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 111 |\u001b[39m       data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($i: String!) { voterGraph(id: $i) { focalId } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { i\u001b[33m:\u001b[39m \u001b[32m'x'\u001b[39m } }\u001b[33m,\u001b[39m\n \u001b[90m 112 |\u001b[39m       timeout\u001b[33m:\u001b[39m \u001b[35m30000\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 113 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 31,
                            "line": 110
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 87\u001b[22m\n\n\n  108 |\n  109 |   test('voterGraph is refused on the public endpoint', async ({ request }) => {\n> 110 |     const res = await request.post('/api/graphql', {\n      |                               ^\n  111 |       data: { query: 'query($i: String!) { voterGraph(id: $i) { focalId } }', variables: { i: 'x' } },\n  112 |       timeout: 30000,\n  113 |     });\n    at /app/tests/ui/entity-graph.spec.ts:110:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:43.587Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-94ce6-used-on-the-public-endpoint-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 31,
                        "line": 110
                      }
                    },
                    {
                      "workerIndex": 768,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 75,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 87\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 87\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:110:31",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 31,
                          "line": 110
                        },
                        "snippet": "\u001b[0m \u001b[90m 108 |\u001b[39m\n \u001b[90m 109 |\u001b[39m   test(\u001b[32m'voterGraph is refused on the public endpoint'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 110 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 111 |\u001b[39m       data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($i: String!) { voterGraph(id: $i) { focalId } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { i\u001b[33m:\u001b[39m \u001b[32m'x'\u001b[39m } }\u001b[33m,\u001b[39m\n \u001b[90m 112 |\u001b[39m       timeout\u001b[33m:\u001b[39m \u001b[35m30000\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 113 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 31,
                            "line": 110
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 87\u001b[22m\n\n\n  108 |\n  109 |   test('voterGraph is refused on the public endpoint', async ({ request }) => {\n> 110 |     const res = await request.post('/api/graphql', {\n      |                               ^\n  111 |       data: { query: 'query($i: String!) { voterGraph(id: $i) { focalId } }', variables: { i: 'x' } },\n  112 |       timeout: 30000,\n  113 |     });\n    at /app/tests/ui/entity-graph.spec.ts:110:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:44.244Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-94ce6-used-on-the-public-endpoint-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-94ce6-used-on-the-public-endpoint-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 31,
                        "line": 110
                      }
                    },
                    {
                      "workerIndex": 780,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 87\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 87\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:110:31",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 31,
                          "line": 110
                        },
                        "snippet": "\u001b[0m \u001b[90m 108 |\u001b[39m\n \u001b[90m 109 |\u001b[39m   test(\u001b[32m'voterGraph is refused on the public endpoint'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 110 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 111 |\u001b[39m       data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($i: String!) { voterGraph(id: $i) { focalId } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { i\u001b[33m:\u001b[39m \u001b[32m'x'\u001b[39m } }\u001b[33m,\u001b[39m\n \u001b[90m 112 |\u001b[39m       timeout\u001b[33m:\u001b[39m \u001b[35m30000\u001b[39m\u001b[33m,\u001b[39m\n \u001b[90m 113 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 31,
                            "line": 110
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 87\u001b[22m\n\n\n  108 |\n  109 |   test('voterGraph is refused on the public endpoint', async ({ request }) => {\n> 110 |     const res = await request.post('/api/graphql', {\n      |                               ^\n  111 |       data: { query: 'query($i: String!) { voterGraph(id: $i) { focalId } }', variables: { i: 'x' } },\n  112 |       timeout: 30000,\n  113 |     });\n    at /app/tests/ui/entity-graph.spec.ts:110:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:45.051Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-nodeGraph-API-94ce6-used-on-the-public-endpoint-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 31,
                        "line": 110
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-4a33ed5ca2bf00946a08",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 109,
              "column": 7
            }
          ]
        },
        {
          "title": "entity-graph pop-over",
          "file": "tests/ui/entity-graph.spec.ts",
          "line": 133,
          "column": 6,
          "specs": [
            {
              "title": "opens and draws on /committees/a75a9110-f1db-a945-39a8-7503ed3c04da/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 798,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 147,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:139:18",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 18,
                          "line": 139
                        },
                        "snippet": "\u001b[0m \u001b[90m 137 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m       \u001b[36mawait\u001b[39m asMember(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 139 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 140 |\u001b[39m       \u001b[36mconst\u001b[39m button \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 142 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 18,
                            "line": 139
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  137 |       page.on('pageerror', (e) => errors.push(String(e)));\n  138 |       await asMember(page);\n> 139 |       await page.goto(path);\n      |                  ^\n  140 |       const button = page.locator('#auth-slot [data-control=\"graph\"]');\n  141 |       await expect(button).toHaveCount(1, { timeout: 15000 });\n  142 |       await expect(button).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/entity-graph.spec.ts:139:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:45.695Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--d0dba-1db-a945-39a8-7503ed3c04da--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--d0dba-1db-a945-39a8-7503ed3c04da--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 18,
                        "line": 139
                      }
                    },
                    {
                      "workerIndex": 816,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 263,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:139:18",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 18,
                          "line": 139
                        },
                        "snippet": "\u001b[0m \u001b[90m 137 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m       \u001b[36mawait\u001b[39m asMember(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 139 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 140 |\u001b[39m       \u001b[36mconst\u001b[39m button \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 142 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 18,
                            "line": 139
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  137 |       page.on('pageerror', (e) => errors.push(String(e)));\n  138 |       await asMember(page);\n> 139 |       await page.goto(path);\n      |                  ^\n  140 |       const button = page.locator('#auth-slot [data-control=\"graph\"]');\n  141 |       await expect(button).toHaveCount(1, { timeout: 15000 });\n  142 |       await expect(button).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/entity-graph.spec.ts:139:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:46.567Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--d0dba-1db-a945-39a8-7503ed3c04da--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--d0dba-1db-a945-39a8-7503ed3c04da--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--d0dba-1db-a945-39a8-7503ed3c04da--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--d0dba-1db-a945-39a8-7503ed3c04da--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 18,
                        "line": 139
                      }
                    },
                    {
                      "workerIndex": 833,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:139:18",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 18,
                          "line": 139
                        },
                        "snippet": "\u001b[0m \u001b[90m 137 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m       \u001b[36mawait\u001b[39m asMember(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 139 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 140 |\u001b[39m       \u001b[36mconst\u001b[39m button \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 142 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 18,
                            "line": 139
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  137 |       page.on('pageerror', (e) => errors.push(String(e)));\n  138 |       await asMember(page);\n> 139 |       await page.goto(path);\n      |                  ^\n  140 |       const button = page.locator('#auth-slot [data-control=\"graph\"]');\n  141 |       await expect(button).toHaveCount(1, { timeout: 15000 });\n  142 |       await expect(button).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/entity-graph.spec.ts:139:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:47.588Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--d0dba-1db-a945-39a8-7503ed3c04da--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--d0dba-1db-a945-39a8-7503ed3c04da--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 18,
                        "line": 139
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-759bfd2643a325762edb",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 135,
              "column": 9
            },
            {
              "title": "opens and draws on /candidates/a8897257-430c-2bf3-4498-349021b09ca3/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 849,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 158,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:139:18",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 18,
                          "line": 139
                        },
                        "snippet": "\u001b[0m \u001b[90m 137 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m       \u001b[36mawait\u001b[39m asMember(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 139 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 140 |\u001b[39m       \u001b[36mconst\u001b[39m button \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 142 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 18,
                            "line": 139
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n\n  137 |       page.on('pageerror', (e) => errors.push(String(e)));\n  138 |       await asMember(page);\n> 139 |       await page.goto(path);\n      |                  ^\n  140 |       const button = page.locator('#auth-slot [data-control=\"graph\"]');\n  141 |       await expect(button).toHaveCount(1, { timeout: 15000 });\n  142 |       await expect(button).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/entity-graph.spec.ts:139:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:48.436Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c0375-30c-2bf3-4498-349021b09ca3--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c0375-30c-2bf3-4498-349021b09ca3--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 18,
                        "line": 139
                      }
                    },
                    {
                      "workerIndex": 864,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 241,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:139:18",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 18,
                          "line": 139
                        },
                        "snippet": "\u001b[0m \u001b[90m 137 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m       \u001b[36mawait\u001b[39m asMember(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 139 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 140 |\u001b[39m       \u001b[36mconst\u001b[39m button \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 142 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 18,
                            "line": 139
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n\n  137 |       page.on('pageerror', (e) => errors.push(String(e)));\n  138 |       await asMember(page);\n> 139 |       await page.goto(path);\n      |                  ^\n  140 |       const button = page.locator('#auth-slot [data-control=\"graph\"]');\n  141 |       await expect(button).toHaveCount(1, { timeout: 15000 });\n  142 |       await expect(button).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/entity-graph.spec.ts:139:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:49.364Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c0375-30c-2bf3-4498-349021b09ca3--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c0375-30c-2bf3-4498-349021b09ca3--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c0375-30c-2bf3-4498-349021b09ca3--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c0375-30c-2bf3-4498-349021b09ca3--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 18,
                        "line": 139
                      }
                    },
                    {
                      "workerIndex": 880,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 153,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:139:18",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 18,
                          "line": 139
                        },
                        "snippet": "\u001b[0m \u001b[90m 137 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m       \u001b[36mawait\u001b[39m asMember(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 139 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 140 |\u001b[39m       \u001b[36mconst\u001b[39m button \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 142 |\u001b[39m       \u001b[36mawait\u001b[39m expect(button)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 18,
                            "line": 139
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n\n  137 |       page.on('pageerror', (e) => errors.push(String(e)));\n  138 |       await asMember(page);\n> 139 |       await page.goto(path);\n      |                  ^\n  140 |       const button = page.locator('#auth-slot [data-control=\"graph\"]');\n  141 |       await expect(button).toHaveCount(1, { timeout: 15000 });\n  142 |       await expect(button).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/entity-graph.spec.ts:139:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:50.351Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c0375-30c-2bf3-4498-349021b09ca3--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--c0375-30c-2bf3-4498-349021b09ca3--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 18,
                        "line": 139
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-d147fc999d701bc54cf5",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 135,
              "column": 9
            }
          ]
        },
        {
          "title": "graph pop-over on geography and leaf pages",
          "file": "tests/ui/entity-graph.spec.ts",
          "line": 159,
          "column": 6,
          "specs": [
            {
              "title": "opens and draws on /states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 893,
                      "parallelIndex": 13,
                      "status": "failed",
                      "duration": 130,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:51.232Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-e623a-554-f435-2a6d-50b3c8cc01d7--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-e623a-554-f435-2a6d-50b3c8cc01d7--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 905,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 234,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:52.298Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-e623a-554-f435-2a6d-50b3c8cc01d7--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-e623a-554-f435-2a6d-50b3c8cc01d7--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-e623a-554-f435-2a6d-50b3c8cc01d7--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-e623a-554-f435-2a6d-50b3c8cc01d7--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 922,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 130,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:53.251Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-e623a-554-f435-2a6d-50b3c8cc01d7--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-e623a-554-f435-2a6d-50b3c8cc01d7--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-4b62c7bc3a5bf61d49f1",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 161,
              "column": 9
            },
            {
              "title": "opens and draws on /tracts/0078f0bb-c0ad-4639-13fc-a29547adddac/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 934,
                      "parallelIndex": 11,
                      "status": "failed",
                      "duration": 132,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:54.085Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-c4836-0ad-4639-13fc-a29547adddac--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-c4836-0ad-4639-13fc-a29547adddac--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 944,
                      "parallelIndex": 9,
                      "status": "failed",
                      "duration": 210,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:54.877Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-c4836-0ad-4639-13fc-a29547adddac--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-c4836-0ad-4639-13fc-a29547adddac--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-c4836-0ad-4639-13fc-a29547adddac--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-c4836-0ad-4639-13fc-a29547adddac--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 956,
                      "parallelIndex": 9,
                      "status": "failed",
                      "duration": 117,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 244\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:162:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:55.777Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-c4836-0ad-4639-13fc-a29547adddac--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-graph-pop-ove-c4836-0ad-4639-13fc-a29547adddac--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-92c7a00e30ecee37a7cd",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 161,
              "column": 9
            }
          ]
        },
        {
          "title": "expanding the graph one hop at a time",
          "file": "tests/ui/entity-graph.spec.ts",
          "line": 185,
          "column": 6,
          "specs": [
            {
              "title": "a county in /states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/'s graph expands into the drawing",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 965,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 129,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 243\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 243\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:187:25",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 243\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:187:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:56.570Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-expanding-the-28b41-ph-expands-into-the-drawing-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-expanding-the-28b41-ph-expands-into-the-drawing-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 975,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 208,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 243\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 243\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:187:25",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 243\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:187:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:57.340Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-expanding-the-28b41-ph-expands-into-the-drawing-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-expanding-the-28b41-ph-expands-into-the-drawing-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-expanding-the-28b41-ph-expands-into-the-drawing-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-expanding-the-28b41-ph-expands-into-the-drawing-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    },
                    {
                      "workerIndex": 983,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 132,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 243\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 243\u001b[22m\n\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:187:25",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 29,
                          "line": 77
                        },
                        "snippet": "\u001b[0m \u001b[90m 75 |\u001b[39m \u001b[90m/** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\u001b[39m\n \u001b[90m 76 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m nodeGraph(request\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m label\u001b[33m:\u001b[39m string\u001b[33m,\u001b[39m id\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 77 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 78 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[33mNODE_QUERY\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { l\u001b[33m:\u001b[39m label\u001b[33m,\u001b[39m i\u001b[33m:\u001b[39m id } }\u001b[33m,\u001b[39m\n \u001b[90m 79 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 80 |\u001b[39m     timeout\u001b[33m:\u001b[39m \u001b[35m60000\u001b[39m\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 29,
                            "line": 77
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 243\u001b[22m\n\n\n  75 | /** nodeGraph, or null where the API predates it (a CI pod against an older API): the caller skips. */\n  76 | async function nodeGraph(request: import('@playwright/test').APIRequestContext, label: string, id: string) {\n> 77 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  78 |     data: { query: NODE_QUERY, variables: { l: label, i: id } },\n  79 |     headers: visitorHeaders(),\n  80 |     timeout: 60000,\n    at nodeGraph (/app/tests/ui/entity-graph.spec.ts:77:29)\n    at /app/tests/ui/entity-graph.spec.ts:187:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:58.214Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-expanding-the-28b41-ph-expands-into-the-drawing-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-expanding-the-28b41-ph-expands-into-the-drawing-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 29,
                        "line": 77
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-79a77bf4fc790cdade5c",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 186,
              "column": 7
            }
          ]
        },
        {
          "title": "entity-graph without accounts",
          "file": "tests/ui/entity-graph.spec.ts",
          "line": 217,
          "column": 6,
          "specs": [
            {
              "title": "a host without Authentik keeps the header Graph button",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 990,
                      "parallelIndex": 5,
                      "status": "failed",
                      "duration": 127,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:220:16",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 16,
                          "line": 220
                        },
                        "snippet": "\u001b[0m \u001b[90m 218 |\u001b[39m   test(\u001b[32m'a host without Authentik keeps the header Graph button'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 219 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'false'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m:\u001b[39m \u001b[32m''\u001b[39m\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements\u001b[33m:\u001b[39m {} } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 220 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 221 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'button.eg-open'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 222 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 223 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 16,
                            "line": 220
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  218 |   test('a host without Authentik keeps the header Graph button', async ({ page }) => {\n  219 |     await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'false', email: '', elevated: false, entitlements: {} } }));\n> 220 |     await page.goto(DNC);\n      |                ^\n  221 |     await expect(page.locator('button.eg-open')).toHaveCount(1, { timeout: 15000 });\n  222 |     await expect(page.locator('#auth-slot [data-control=\"graph\"]')).toHaveCount(0);\n  223 |   });\n    at /app/tests/ui/entity-graph.spec.ts:220:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:58.955Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--f23c6-eps-the-header-Graph-button-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--f23c6-eps-the-header-Graph-button-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 16,
                        "line": 220
                      }
                    },
                    {
                      "workerIndex": 996,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 207,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:220:16",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 16,
                          "line": 220
                        },
                        "snippet": "\u001b[0m \u001b[90m 218 |\u001b[39m   test(\u001b[32m'a host without Authentik keeps the header Graph button'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 219 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'false'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m:\u001b[39m \u001b[32m''\u001b[39m\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements\u001b[33m:\u001b[39m {} } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 220 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 221 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'button.eg-open'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 222 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 223 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 16,
                            "line": 220
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  218 |   test('a host without Authentik keeps the header Graph button', async ({ page }) => {\n  219 |     await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'false', email: '', elevated: false, entitlements: {} } }));\n> 220 |     await page.goto(DNC);\n      |                ^\n  221 |     await expect(page.locator('button.eg-open')).toHaveCount(1, { timeout: 15000 });\n  222 |     await expect(page.locator('#auth-slot [data-control=\"graph\"]')).toHaveCount(0);\n  223 |   });\n    at /app/tests/ui/entity-graph.spec.ts:220:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:59.690Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--f23c6-eps-the-header-Graph-button-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--f23c6-eps-the-header-Graph-button-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--f23c6-eps-the-header-Graph-button-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--f23c6-eps-the-header-Graph-button-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 16,
                        "line": 220
                      }
                    },
                    {
                      "workerIndex": 1002,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 133,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-graph.spec.ts:220:16",
                        "location": {
                          "file": "/app/tests/ui/entity-graph.spec.ts",
                          "column": 16,
                          "line": 220
                        },
                        "snippet": "\u001b[0m \u001b[90m 218 |\u001b[39m   test(\u001b[32m'a host without Authentik keeps the header Graph button'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 219 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'false'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m:\u001b[39m \u001b[32m''\u001b[39m\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements\u001b[33m:\u001b[39m {} } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 220 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 221 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'button.eg-open'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 222 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 223 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-graph.spec.ts",
                            "column": 16,
                            "line": 220
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  218 |   test('a host without Authentik keeps the header Graph button', async ({ page }) => {\n  219 |     await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'false', email: '', elevated: false, entitlements: {} } }));\n> 220 |     await page.goto(DNC);\n      |                ^\n  221 |     await expect(page.locator('button.eg-open')).toHaveCount(1, { timeout: 15000 });\n  222 |     await expect(page.locator('#auth-slot [data-control=\"graph\"]')).toHaveCount(0);\n  223 |   });\n    at /app/tests/ui/entity-graph.spec.ts:220:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:00.527Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--f23c6-eps-the-header-Graph-button-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-graph-entity-graph--f23c6-eps-the-header-Graph-button-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-graph.spec.ts",
                        "column": 16,
                        "line": 220
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "23d9f129c21032742001-e685eda07b21192e4f91",
              "file": "tests/ui/entity-graph.spec.ts",
              "line": 218,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/entity-suggest.spec.ts",
      "file": "tests/ui/entity-suggest.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "entity type-ahead (sites#392)",
          "file": "tests/ui/entity-suggest.spec.ts",
          "line": 37,
          "column": 6,
          "specs": [
            {
              "title": "waits for two characters, debounces, displays context and uses the Candidate/cycle contract",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 14,
                      "parallelIndex": 14,
                      "status": "timedOut",
                      "duration": 40037,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 40
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  38 |   test('waits for two characters, debounces, displays context and uses the Candidate/cycle contract', async ({ page }) => {\n  39 |     const requests = await setup(page);\n> 40 |     await page.goto('/politicians/?cycle=2024');\n     |                ^\n  41 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  42 |     await expect(input).toHaveAttribute('aria-autocomplete', 'list');\n  43 |     await input.fill('t');\n    at /app/tests/ui/entity-suggest.spec.ts:40:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.203Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-31348-he-Candidate-cycle-contract-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 51,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 354,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:40:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 40
                        },
                        "snippet": "\u001b[0m \u001b[90m 38 |\u001b[39m   test(\u001b[32m'waits for two characters, debounces, displays context and uses the Candidate/cycle contract'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 39 |\u001b[39m     \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 40 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m     \u001b[36mawait\u001b[39m expect(input)\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-autocomplete'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'list'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 43 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m't'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 40
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  38 |   test('waits for two characters, debounces, displays context and uses the Candidate/cycle contract', async ({ page }) => {\n  39 |     const requests = await setup(page);\n> 40 |     await page.goto('/politicians/?cycle=2024');\n     |                ^\n  41 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  42 |     await expect(input).toHaveAttribute('aria-autocomplete', 'list');\n  43 |     await input.fill('t');\n    at /app/tests/ui/entity-suggest.spec.ts:40:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:03.955Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-31348-he-Candidate-cycle-contract-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-31348-he-Candidate-cycle-contract-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-31348-he-Candidate-cycle-contract-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-31348-he-Candidate-cycle-contract-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 40
                      }
                    },
                    {
                      "workerIndex": 63,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 274,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:40:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 40
                        },
                        "snippet": "\u001b[0m \u001b[90m 38 |\u001b[39m   test(\u001b[32m'waits for two characters, debounces, displays context and uses the Candidate/cycle contract'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 39 |\u001b[39m     \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 40 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 41 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m     \u001b[36mawait\u001b[39m expect(input)\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-autocomplete'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'list'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 43 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m't'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 40
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  38 |   test('waits for two characters, debounces, displays context and uses the Candidate/cycle contract', async ({ page }) => {\n  39 |     const requests = await setup(page);\n> 40 |     await page.goto('/politicians/?cycle=2024');\n     |                ^\n  41 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  42 |     await expect(input).toHaveAttribute('aria-autocomplete', 'list');\n  43 |     await input.fill('t');\n    at /app/tests/ui/entity-suggest.spec.ts:40:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.121Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-31348-he-Candidate-cycle-contract-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-31348-he-Candidate-cycle-contract-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 40
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-950ba490faaf52c7f89e",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 38,
              "column": 7
            },
            {
              "title": "candidates scopes suggestions to Candidate, without a cycle by default",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 89,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 223,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:67:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 67
                        },
                        "snippet": "\u001b[0m \u001b[90m 65 |\u001b[39m     test(\u001b[32m`${path} scopes suggestions to ${type}, without a cycle by default`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 66 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m type }])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 67 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${path}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 68 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 69 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 70 |\u001b[39m       expect(suggestRequests(requests)[\u001b[35m0\u001b[39m]\u001b[33m.\u001b[39mvariables)\u001b[33m.\u001b[39mtoEqual({ prefix\u001b[33m:\u001b[39m \u001b[32m'ted cru'\u001b[39m\u001b[33m,\u001b[39m types\u001b[33m:\u001b[39m [type] })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 67
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  65 |     test(`${path} scopes suggestions to ${type}, without a cycle by default`, async ({ page }) => {\n  66 |       const requests = await setup(page, [{ ...candidate, type }]);\n> 67 |       await page.goto(`/${path}/`);\n     |                  ^\n  68 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  69 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n  70 |       expect(suggestRequests(requests)[0].variables).toEqual({ prefix: 'ted cru', types: [type] });\n    at /app/tests/ui/entity-suggest.spec.ts:67:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.317Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-44f35--without-a-cycle-by-default-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-44f35--without-a-cycle-by-default-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 67
                      }
                    },
                    {
                      "workerIndex": 119,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 392,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:67:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 67
                        },
                        "snippet": "\u001b[0m \u001b[90m 65 |\u001b[39m     test(\u001b[32m`${path} scopes suggestions to ${type}, without a cycle by default`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 66 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m type }])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 67 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${path}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 68 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 69 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 70 |\u001b[39m       expect(suggestRequests(requests)[\u001b[35m0\u001b[39m]\u001b[33m.\u001b[39mvariables)\u001b[33m.\u001b[39mtoEqual({ prefix\u001b[33m:\u001b[39m \u001b[32m'ted cru'\u001b[39m\u001b[33m,\u001b[39m types\u001b[33m:\u001b[39m [type] })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 67
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  65 |     test(`${path} scopes suggestions to ${type}, without a cycle by default`, async ({ page }) => {\n  66 |       const requests = await setup(page, [{ ...candidate, type }]);\n> 67 |       await page.goto(`/${path}/`);\n     |                  ^\n  68 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  69 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n  70 |       expect(suggestRequests(requests)[0].variables).toEqual({ prefix: 'ted cru', types: [type] });\n    at /app/tests/ui/entity-suggest.spec.ts:67:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.466Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-44f35--without-a-cycle-by-default-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-44f35--without-a-cycle-by-default-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-44f35--without-a-cycle-by-default-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-44f35--without-a-cycle-by-default-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 67
                      }
                    },
                    {
                      "workerIndex": 156,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 216,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:67:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 67
                        },
                        "snippet": "\u001b[0m \u001b[90m 65 |\u001b[39m     test(\u001b[32m`${path} scopes suggestions to ${type}, without a cycle by default`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 66 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m type }])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 67 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${path}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 68 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 69 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 70 |\u001b[39m       expect(suggestRequests(requests)[\u001b[35m0\u001b[39m]\u001b[33m.\u001b[39mvariables)\u001b[33m.\u001b[39mtoEqual({ prefix\u001b[33m:\u001b[39m \u001b[32m'ted cru'\u001b[39m\u001b[33m,\u001b[39m types\u001b[33m:\u001b[39m [type] })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 67
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  65 |     test(`${path} scopes suggestions to ${type}, without a cycle by default`, async ({ page }) => {\n  66 |       const requests = await setup(page, [{ ...candidate, type }]);\n> 67 |       await page.goto(`/${path}/`);\n     |                  ^\n  68 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  69 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n  70 |       expect(suggestRequests(requests)[0].variables).toEqual({ prefix: 'ted cru', types: [type] });\n    at /app/tests/ui/entity-suggest.spec.ts:67:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:09.025Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-44f35--without-a-cycle-by-default-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-44f35--without-a-cycle-by-default-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 67
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-7a8fa78a152c4ed46f29",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 65,
              "column": 9
            },
            {
              "title": "committees scopes suggestions to Committee, without a cycle by default",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 180,
                      "parallelIndex": 14,
                      "status": "timedOut",
                      "duration": 40044,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 67
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  65 |     test(`${path} scopes suggestions to ${type}, without a cycle by default`, async ({ page }) => {\n  66 |       const requests = await setup(page, [{ ...candidate, type }]);\n> 67 |       await page.goto(`/${path}/`);\n     |                  ^\n  68 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  69 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n  70 |       expect(suggestRequests(requests)[0].variables).toEqual({ prefix: 'ted cru', types: [type] });\n    at /app/tests/ui/entity-suggest.spec.ts:67:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.998Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-3c068--without-a-cycle-by-default-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 205,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 12036,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:67:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 67
                        },
                        "snippet": "\u001b[0m \u001b[90m 65 |\u001b[39m     test(\u001b[32m`${path} scopes suggestions to ${type}, without a cycle by default`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 66 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m type }])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 67 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${path}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 68 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 69 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 70 |\u001b[39m       expect(suggestRequests(requests)[\u001b[35m0\u001b[39m]\u001b[33m.\u001b[39mvariables)\u001b[33m.\u001b[39mtoEqual({ prefix\u001b[33m:\u001b[39m \u001b[32m'ted cru'\u001b[39m\u001b[33m,\u001b[39m types\u001b[33m:\u001b[39m [type] })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 67
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  65 |     test(`${path} scopes suggestions to ${type}, without a cycle by default`, async ({ page }) => {\n  66 |       const requests = await setup(page, [{ ...candidate, type }]);\n> 67 |       await page.goto(`/${path}/`);\n     |                  ^\n  68 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  69 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n  70 |       expect(suggestRequests(requests)[0].variables).toEqual({ prefix: 'ted cru', types: [type] });\n    at /app/tests/ui/entity-suggest.spec.ts:67:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.744Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-3c068--without-a-cycle-by-default-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-3c068--without-a-cycle-by-default-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-3c068--without-a-cycle-by-default-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-3c068--without-a-cycle-by-default-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 67
                      }
                    },
                    {
                      "workerIndex": 221,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 155,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:67:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 67
                        },
                        "snippet": "\u001b[0m \u001b[90m 65 |\u001b[39m     test(\u001b[32m`${path} scopes suggestions to ${type}, without a cycle by default`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 66 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m type }])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 67 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${path}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 68 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 69 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 70 |\u001b[39m       expect(suggestRequests(requests)[\u001b[35m0\u001b[39m]\u001b[33m.\u001b[39mvariables)\u001b[33m.\u001b[39mtoEqual({ prefix\u001b[33m:\u001b[39m \u001b[32m'ted cru'\u001b[39m\u001b[33m,\u001b[39m types\u001b[33m:\u001b[39m [type] })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 67
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  65 |     test(`${path} scopes suggestions to ${type}, without a cycle by default`, async ({ page }) => {\n  66 |       const requests = await setup(page, [{ ...candidate, type }]);\n> 67 |       await page.goto(`/${path}/`);\n     |                  ^\n  68 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  69 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n  70 |       expect(suggestRequests(requests)[0].variables).toEqual({ prefix: 'ted cru', types: [type] });\n    at /app/tests/ui/entity-suggest.spec.ts:67:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:03.522Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-3c068--without-a-cycle-by-default-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-3c068--without-a-cycle-by-default-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 67
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-be8d4922b513b25d13ff",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 65,
              "column": 9
            },
            {
              "title": "parties scopes suggestions to Party, without a cycle by default",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 235,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 155,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:67:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 67
                        },
                        "snippet": "\u001b[0m \u001b[90m 65 |\u001b[39m     test(\u001b[32m`${path} scopes suggestions to ${type}, without a cycle by default`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 66 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m type }])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 67 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${path}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 68 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 69 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 70 |\u001b[39m       expect(suggestRequests(requests)[\u001b[35m0\u001b[39m]\u001b[33m.\u001b[39mvariables)\u001b[33m.\u001b[39mtoEqual({ prefix\u001b[33m:\u001b[39m \u001b[32m'ted cru'\u001b[39m\u001b[33m,\u001b[39m types\u001b[33m:\u001b[39m [type] })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 67
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  65 |     test(`${path} scopes suggestions to ${type}, without a cycle by default`, async ({ page }) => {\n  66 |       const requests = await setup(page, [{ ...candidate, type }]);\n> 67 |       await page.goto(`/${path}/`);\n     |                  ^\n  68 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  69 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n  70 |       expect(suggestRequests(requests)[0].variables).toEqual({ prefix: 'ted cru', types: [type] });\n    at /app/tests/ui/entity-suggest.spec.ts:67:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:04.398Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-5fe7c--without-a-cycle-by-default-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-5fe7c--without-a-cycle-by-default-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 67
                      }
                    },
                    {
                      "workerIndex": 247,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 255,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:67:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 67
                        },
                        "snippet": "\u001b[0m \u001b[90m 65 |\u001b[39m     test(\u001b[32m`${path} scopes suggestions to ${type}, without a cycle by default`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 66 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m type }])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 67 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${path}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 68 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 69 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 70 |\u001b[39m       expect(suggestRequests(requests)[\u001b[35m0\u001b[39m]\u001b[33m.\u001b[39mvariables)\u001b[33m.\u001b[39mtoEqual({ prefix\u001b[33m:\u001b[39m \u001b[32m'ted cru'\u001b[39m\u001b[33m,\u001b[39m types\u001b[33m:\u001b[39m [type] })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 67
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  65 |     test(`${path} scopes suggestions to ${type}, without a cycle by default`, async ({ page }) => {\n  66 |       const requests = await setup(page, [{ ...candidate, type }]);\n> 67 |       await page.goto(`/${path}/`);\n     |                  ^\n  68 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  69 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n  70 |       expect(suggestRequests(requests)[0].variables).toEqual({ prefix: 'ted cru', types: [type] });\n    at /app/tests/ui/entity-suggest.spec.ts:67:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:05.278Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-5fe7c--without-a-cycle-by-default-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-5fe7c--without-a-cycle-by-default-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-5fe7c--without-a-cycle-by-default-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-5fe7c--without-a-cycle-by-default-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 67
                      }
                    },
                    {
                      "workerIndex": 264,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 180,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:67:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 67
                        },
                        "snippet": "\u001b[0m \u001b[90m 65 |\u001b[39m     test(\u001b[32m`${path} scopes suggestions to ${type}, without a cycle by default`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 66 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m type }])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 67 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${path}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 68 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 69 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 70 |\u001b[39m       expect(suggestRequests(requests)[\u001b[35m0\u001b[39m]\u001b[33m.\u001b[39mvariables)\u001b[33m.\u001b[39mtoEqual({ prefix\u001b[33m:\u001b[39m \u001b[32m'ted cru'\u001b[39m\u001b[33m,\u001b[39m types\u001b[33m:\u001b[39m [type] })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 67
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  65 |     test(`${path} scopes suggestions to ${type}, without a cycle by default`, async ({ page }) => {\n  66 |       const requests = await setup(page, [{ ...candidate, type }]);\n> 67 |       await page.goto(`/${path}/`);\n     |                  ^\n  68 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  69 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n  70 |       expect(suggestRequests(requests)[0].variables).toEqual({ prefix: 'ted cru', types: [type] });\n    at /app/tests/ui/entity-suggest.spec.ts:67:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:06.276Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-5fe7c--without-a-cycle-by-default-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-5fe7c--without-a-cycle-by-default-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 67
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-950f4122cdc1954ce13f",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 65,
              "column": 9
            },
            {
              "title": "keyboard wraps, Escape dismisses, and selected Enter opens the published canonical on the same host",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 281,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 180,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:80:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 80
                        },
                        "snippet": "\u001b[0m \u001b[90m 78 |\u001b[39m     }))\u001b[33m;\u001b[39m\n \u001b[90m 79 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/candidates/ted-cruz-s2tx00312/**'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Canonical candidate</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 80 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 81 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 82 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 83 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m2\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 80
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  78 |     }));\n  79 |     await page.route('**/candidates/ted-cruz-s2tx00312/**', route => route.fulfill({ contentType: 'text/html', body: '<h1>Canonical candidate</h1>' }));\n> 80 |     await page.goto('/politicians/?cycle=2024');\n     |                ^\n  81 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  82 |     await input.fill('ted cru');\n  83 |     await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(2);\n    at /app/tests/ui/entity-suggest.spec.ts:80:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:07.231Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e9dd--canonical-on-the-same-host-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e9dd--canonical-on-the-same-host-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 80
                      }
                    },
                    {
                      "workerIndex": 297,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 304,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:80:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 80
                        },
                        "snippet": "\u001b[0m \u001b[90m 78 |\u001b[39m     }))\u001b[33m;\u001b[39m\n \u001b[90m 79 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/candidates/ted-cruz-s2tx00312/**'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Canonical candidate</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 80 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 81 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 82 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 83 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m2\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 80
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  78 |     }));\n  79 |     await page.route('**/candidates/ted-cruz-s2tx00312/**', route => route.fulfill({ contentType: 'text/html', body: '<h1>Canonical candidate</h1>' }));\n> 80 |     await page.goto('/politicians/?cycle=2024');\n     |                ^\n  81 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  82 |     await input.fill('ted cru');\n  83 |     await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(2);\n    at /app/tests/ui/entity-suggest.spec.ts:80:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:08.176Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e9dd--canonical-on-the-same-host-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e9dd--canonical-on-the-same-host-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e9dd--canonical-on-the-same-host-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e9dd--canonical-on-the-same-host-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 80
                      }
                    },
                    {
                      "workerIndex": 315,
                      "parallelIndex": 14,
                      "status": "timedOut",
                      "duration": 40034,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 80
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  78 |     }));\n  79 |     await page.route('**/candidates/ted-cruz-s2tx00312/**', route => route.fulfill({ contentType: 'text/html', body: '<h1>Canonical candidate</h1>' }));\n> 80 |     await page.goto('/politicians/?cycle=2024');\n     |                ^\n  81 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  82 |     await input.fill('ted cru');\n  83 |     await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(2);\n    at /app/tests/ui/entity-suggest.spec.ts:80:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:09.217Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e9dd--canonical-on-the-same-host-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-aa5015c987e3cd4772ea",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 74,
              "column": 7
            },
            {
              "title": "pointer opens committees via UUID fallback if canonical lookup is unavailable",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 355,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 11350,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:108:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m         \u001b[33m?\u001b[39m route\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m503\u001b[39m })\n \u001b[90m 107 |\u001b[39m         \u001b[33m:\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Entity page</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'test'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[36mnew\u001b[39m \u001b[33mRegExp\u001b[39m(\u001b[32m'onerror=alert'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m)\u001b[33m.\u001b[39mlocator(\u001b[32m'img'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  106 |         ? route.fulfill({ status: 503 })\n  107 |         : route.fulfill({ contentType: 'text/html', body: '<h1>Entity page</h1>' }));\n> 108 |       await page.goto(`/${collection}/`);\n      |                  ^\n  109 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('test');\n  110 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveText(new RegExp('onerror=alert'));\n  111 |       await expect(page.locator('.entity-suggestions').getByRole('option').locator('img')).toHaveCount(0);\n    at /app/tests/ui/entity-suggest.spec.ts:108:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:49.902Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-16c45-nical-lookup-is-unavailable-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-16c45-nical-lookup-is-unavailable-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 108
                      }
                    },
                    {
                      "workerIndex": 363,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 253,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:108:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m         \u001b[33m?\u001b[39m route\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m503\u001b[39m })\n \u001b[90m 107 |\u001b[39m         \u001b[33m:\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Entity page</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'test'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[36mnew\u001b[39m \u001b[33mRegExp\u001b[39m(\u001b[32m'onerror=alert'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m)\u001b[33m.\u001b[39mlocator(\u001b[32m'img'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  106 |         ? route.fulfill({ status: 503 })\n  107 |         : route.fulfill({ contentType: 'text/html', body: '<h1>Entity page</h1>' }));\n> 108 |       await page.goto(`/${collection}/`);\n      |                  ^\n  109 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('test');\n  110 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveText(new RegExp('onerror=alert'));\n  111 |       await expect(page.locator('.entity-suggestions').getByRole('option').locator('img')).toHaveCount(0);\n    at /app/tests/ui/entity-suggest.spec.ts:108:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:02.002Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-16c45-nical-lookup-is-unavailable-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-16c45-nical-lookup-is-unavailable-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-16c45-nical-lookup-is-unavailable-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-16c45-nical-lookup-is-unavailable-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 108
                      }
                    },
                    {
                      "workerIndex": 374,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 160,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:108:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m         \u001b[33m?\u001b[39m route\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m503\u001b[39m })\n \u001b[90m 107 |\u001b[39m         \u001b[33m:\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Entity page</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'test'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[36mnew\u001b[39m \u001b[33mRegExp\u001b[39m(\u001b[32m'onerror=alert'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m)\u001b[33m.\u001b[39mlocator(\u001b[32m'img'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  106 |         ? route.fulfill({ status: 503 })\n  107 |         : route.fulfill({ contentType: 'text/html', body: '<h1>Entity page</h1>' }));\n> 108 |       await page.goto(`/${collection}/`);\n      |                  ^\n  109 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('test');\n  110 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveText(new RegExp('onerror=alert'));\n  111 |       await expect(page.locator('.entity-suggestions').getByRole('option').locator('img')).toHaveCount(0);\n    at /app/tests/ui/entity-suggest.spec.ts:108:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:03.067Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-16c45-nical-lookup-is-unavailable-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-16c45-nical-lookup-is-unavailable-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 108
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-98e7d549fdfbf97fe40b",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 102,
              "column": 9
            },
            {
              "title": "pointer opens parties via UUID fallback if canonical lookup is unavailable",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 384,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 181,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:108:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m         \u001b[33m?\u001b[39m route\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m503\u001b[39m })\n \u001b[90m 107 |\u001b[39m         \u001b[33m:\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Entity page</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'test'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[36mnew\u001b[39m \u001b[33mRegExp\u001b[39m(\u001b[32m'onerror=alert'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m)\u001b[33m.\u001b[39mlocator(\u001b[32m'img'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  106 |         ? route.fulfill({ status: 503 })\n  107 |         : route.fulfill({ contentType: 'text/html', body: '<h1>Entity page</h1>' }));\n> 108 |       await page.goto(`/${collection}/`);\n      |                  ^\n  109 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('test');\n  110 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveText(new RegExp('onerror=alert'));\n  111 |       await expect(page.locator('.entity-suggestions').getByRole('option').locator('img')).toHaveCount(0);\n    at /app/tests/ui/entity-suggest.spec.ts:108:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:03.954Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-d2e78-nical-lookup-is-unavailable-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-d2e78-nical-lookup-is-unavailable-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 108
                      }
                    },
                    {
                      "workerIndex": 392,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 245,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:108:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m         \u001b[33m?\u001b[39m route\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m503\u001b[39m })\n \u001b[90m 107 |\u001b[39m         \u001b[33m:\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Entity page</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'test'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[36mnew\u001b[39m \u001b[33mRegExp\u001b[39m(\u001b[32m'onerror=alert'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m)\u001b[33m.\u001b[39mlocator(\u001b[32m'img'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  106 |         ? route.fulfill({ status: 503 })\n  107 |         : route.fulfill({ contentType: 'text/html', body: '<h1>Entity page</h1>' }));\n> 108 |       await page.goto(`/${collection}/`);\n      |                  ^\n  109 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('test');\n  110 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveText(new RegExp('onerror=alert'));\n  111 |       await expect(page.locator('.entity-suggestions').getByRole('option').locator('img')).toHaveCount(0);\n    at /app/tests/ui/entity-suggest.spec.ts:108:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:04.813Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-d2e78-nical-lookup-is-unavailable-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-d2e78-nical-lookup-is-unavailable-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-d2e78-nical-lookup-is-unavailable-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-d2e78-nical-lookup-is-unavailable-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 108
                      }
                    },
                    {
                      "workerIndex": 403,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 162,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:108:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m         \u001b[33m?\u001b[39m route\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m503\u001b[39m })\n \u001b[90m 107 |\u001b[39m         \u001b[33m:\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Entity page</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/${collection}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'test'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[36mnew\u001b[39m \u001b[33mRegExp\u001b[39m(\u001b[32m'onerror=alert'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m)\u001b[33m.\u001b[39mlocator(\u001b[32m'img'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  106 |         ? route.fulfill({ status: 503 })\n  107 |         : route.fulfill({ contentType: 'text/html', body: '<h1>Entity page</h1>' }));\n> 108 |       await page.goto(`/${collection}/`);\n      |                  ^\n  109 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('test');\n  110 |       await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveText(new RegExp('onerror=alert'));\n  111 |       await expect(page.locator('.entity-suggestions').getByRole('option').locator('img')).toHaveCount(0);\n    at /app/tests/ui/entity-suggest.spec.ts:108:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:05.802Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-d2e78-nical-lookup-is-unavailable-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-d2e78-nical-lookup-is-unavailable-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 108
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-957edcffd9c2277ba3cd",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 102,
              "column": 9
            },
            {
              "title": "submitted search still displays returned rows with total=0 (ok)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 414,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:120:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m     test(\u001b[32m`submitted search still displays returned rows with total=0 (${mode})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m \u001b[33m?\u001b[39m [candidate] \u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m mode)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m       \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m       \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m       \u001b[36mif\u001b[39m (mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m) \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  118 |     test(`submitted search still displays returned rows with total=0 (${mode})`, async ({ page }) => {\n  119 |       const requests = await setup(page, mode === 'ok' ? [candidate] : [], mode);\n> 120 |       await page.goto('/politicians/');\n      |                  ^\n  121 |       const input = page.getByRole('combobox', { name: 'Search entities' });\n  122 |       await input.fill('ted cru');\n  123 |       if (mode === 'ok') await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n    at /app/tests/ui/entity-suggest.spec.ts:120:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:06.653Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-766c6-urned-rows-with-total-0-ok--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-766c6-urned-rows-with-total-0-ok--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 120
                      }
                    },
                    {
                      "workerIndex": 425,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 20051,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:120:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m     test(\u001b[32m`submitted search still displays returned rows with total=0 (${mode})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m \u001b[33m?\u001b[39m [candidate] \u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m mode)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m       \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m       \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m       \u001b[36mif\u001b[39m (mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m) \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  118 |     test(`submitted search still displays returned rows with total=0 (${mode})`, async ({ page }) => {\n  119 |       const requests = await setup(page, mode === 'ok' ? [candidate] : [], mode);\n> 120 |       await page.goto('/politicians/');\n      |                  ^\n  121 |       const input = page.getByRole('combobox', { name: 'Search entities' });\n  122 |       await input.fill('ted cru');\n  123 |       if (mode === 'ok') await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n    at /app/tests/ui/entity-suggest.spec.ts:120:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:07.494Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-766c6-urned-rows-with-total-0-ok--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-766c6-urned-rows-with-total-0-ok--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-766c6-urned-rows-with-total-0-ok--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-766c6-urned-rows-with-total-0-ok--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 120
                      }
                    },
                    {
                      "workerIndex": 448,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 168,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:120:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m     test(\u001b[32m`submitted search still displays returned rows with total=0 (${mode})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m \u001b[33m?\u001b[39m [candidate] \u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m mode)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m       \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m       \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m       \u001b[36mif\u001b[39m (mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m) \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  118 |     test(`submitted search still displays returned rows with total=0 (${mode})`, async ({ page }) => {\n  119 |       const requests = await setup(page, mode === 'ok' ? [candidate] : [], mode);\n> 120 |       await page.goto('/politicians/');\n      |                  ^\n  121 |       const input = page.getByRole('combobox', { name: 'Search entities' });\n  122 |       await input.fill('ted cru');\n  123 |       if (mode === 'ok') await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n    at /app/tests/ui/entity-suggest.spec.ts:120:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:28.162Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-766c6-urned-rows-with-total-0-ok--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-766c6-urned-rows-with-total-0-ok--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 120
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-80d4047fd0a5dde972cd",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 118,
              "column": 9
            },
            {
              "title": "submitted search still displays returned rows with total=0 (http-error)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 455,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 150,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:120:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m     test(\u001b[32m`submitted search still displays returned rows with total=0 (${mode})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m \u001b[33m?\u001b[39m [candidate] \u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m mode)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m       \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m       \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m       \u001b[36mif\u001b[39m (mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m) \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  118 |     test(`submitted search still displays returned rows with total=0 (${mode})`, async ({ page }) => {\n  119 |       const requests = await setup(page, mode === 'ok' ? [candidate] : [], mode);\n> 120 |       await page.goto('/politicians/');\n      |                  ^\n  121 |       const input = page.getByRole('combobox', { name: 'Search entities' });\n  122 |       await input.fill('ted cru');\n  123 |       if (mode === 'ok') await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n    at /app/tests/ui/entity-suggest.spec.ts:120:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:29.006Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e15d-ws-with-total-0-http-error--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e15d-ws-with-total-0-http-error--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 120
                      }
                    },
                    {
                      "workerIndex": 461,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 222,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:120:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m     test(\u001b[32m`submitted search still displays returned rows with total=0 (${mode})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m \u001b[33m?\u001b[39m [candidate] \u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m mode)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m       \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m       \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m       \u001b[36mif\u001b[39m (mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m) \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  118 |     test(`submitted search still displays returned rows with total=0 (${mode})`, async ({ page }) => {\n  119 |       const requests = await setup(page, mode === 'ok' ? [candidate] : [], mode);\n> 120 |       await page.goto('/politicians/');\n      |                  ^\n  121 |       const input = page.getByRole('combobox', { name: 'Search entities' });\n  122 |       await input.fill('ted cru');\n  123 |       if (mode === 'ok') await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n    at /app/tests/ui/entity-suggest.spec.ts:120:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:29.834Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e15d-ws-with-total-0-http-error--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e15d-ws-with-total-0-http-error--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e15d-ws-with-total-0-http-error--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e15d-ws-with-total-0-http-error--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 120
                      }
                    },
                    {
                      "workerIndex": 475,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 145,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:120:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m     test(\u001b[32m`submitted search still displays returned rows with total=0 (${mode})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m \u001b[33m?\u001b[39m [candidate] \u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m mode)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m       \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m       \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m       \u001b[36mif\u001b[39m (mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m) \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  118 |     test(`submitted search still displays returned rows with total=0 (${mode})`, async ({ page }) => {\n  119 |       const requests = await setup(page, mode === 'ok' ? [candidate] : [], mode);\n> 120 |       await page.goto('/politicians/');\n      |                  ^\n  121 |       const input = page.getByRole('combobox', { name: 'Search entities' });\n  122 |       await input.fill('ted cru');\n  123 |       if (mode === 'ok') await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n    at /app/tests/ui/entity-suggest.spec.ts:120:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:30.751Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e15d-ws-with-total-0-http-error--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-6e15d-ws-with-total-0-http-error--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 120
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-39d81cc47e4aab3f6a60",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 118,
              "column": 9
            },
            {
              "title": "submitted search still displays returned rows with total=0 (graphql-error)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 486,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:120:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m     test(\u001b[32m`submitted search still displays returned rows with total=0 (${mode})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m \u001b[33m?\u001b[39m [candidate] \u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m mode)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m       \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m       \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m       \u001b[36mif\u001b[39m (mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m) \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  118 |     test(`submitted search still displays returned rows with total=0 (${mode})`, async ({ page }) => {\n  119 |       const requests = await setup(page, mode === 'ok' ? [candidate] : [], mode);\n> 120 |       await page.goto('/politicians/');\n      |                  ^\n  121 |       const input = page.getByRole('combobox', { name: 'Search entities' });\n  122 |       await input.fill('ted cru');\n  123 |       if (mode === 'ok') await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n    at /app/tests/ui/entity-suggest.spec.ts:120:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:31.728Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-b4c7d-with-total-0-graphql-error--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-b4c7d-with-total-0-graphql-error--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 120
                      }
                    },
                    {
                      "workerIndex": 511,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 332,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:120:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m     test(\u001b[32m`submitted search still displays returned rows with total=0 (${mode})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m \u001b[33m?\u001b[39m [candidate] \u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m mode)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m       \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m       \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m       \u001b[36mif\u001b[39m (mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m) \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  118 |     test(`submitted search still displays returned rows with total=0 (${mode})`, async ({ page }) => {\n  119 |       const requests = await setup(page, mode === 'ok' ? [candidate] : [], mode);\n> 120 |       await page.goto('/politicians/');\n      |                  ^\n  121 |       const input = page.getByRole('combobox', { name: 'Search entities' });\n  122 |       await input.fill('ted cru');\n  123 |       if (mode === 'ok') await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n    at /app/tests/ui/entity-suggest.spec.ts:120:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:32.673Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-b4c7d-with-total-0-graphql-error--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-b4c7d-with-total-0-graphql-error--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-b4c7d-with-total-0-graphql-error--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-b4c7d-with-total-0-graphql-error--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 120
                      }
                    },
                    {
                      "workerIndex": 535,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 198,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:120:18",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 18,
                          "line": 120
                        },
                        "snippet": "\u001b[0m \u001b[90m 118 |\u001b[39m     test(\u001b[32m`submitted search still displays returned rows with total=0 (${mode})`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 119 |\u001b[39m       \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m \u001b[33m?\u001b[39m [candidate] \u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m mode)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 120 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 121 |\u001b[39m       \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 122 |\u001b[39m       \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m       \u001b[36mif\u001b[39m (mode \u001b[33m===\u001b[39m \u001b[32m'ok'\u001b[39m) \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-suggestions'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 120
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  118 |     test(`submitted search still displays returned rows with total=0 (${mode})`, async ({ page }) => {\n  119 |       const requests = await setup(page, mode === 'ok' ? [candidate] : [], mode);\n> 120 |       await page.goto('/politicians/');\n      |                  ^\n  121 |       const input = page.getByRole('combobox', { name: 'Search entities' });\n  122 |       await input.fill('ted cru');\n  123 |       if (mode === 'ok') await expect(page.locator('.entity-suggestions').getByRole('option')).toHaveCount(1);\n    at /app/tests/ui/entity-suggest.spec.ts:120:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.805Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-b4c7d-with-total-0-graphql-error--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-b4c7d-with-total-0-graphql-error--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 18,
                        "line": 120
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-687b0cc8a228a1273510",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 118,
              "column": 9
            },
            {
              "title": "empty suggestions keep explicit Search and Show All working",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 562,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 188,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:138:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 138
                        },
                        "snippet": "\u001b[0m \u001b[90m 136 |\u001b[39m   test(\u001b[32m'empty suggestions keep explicit Search and Show All working'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 137 |\u001b[39m     \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 138 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 139 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cruz'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 140 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'status'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'No suggestions'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'button'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search'\u001b[39m\u001b[33m,\u001b[39m exact\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 138
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  136 |   test('empty suggestions keep explicit Search and Show All working', async ({ page }) => {\n  137 |     await setup(page, []);\n> 138 |     await page.goto('/politicians/');\n      |                ^\n  139 |     await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cruz');\n  140 |     await expect(page.getByRole('status')).toContainText('No suggestions');\n  141 |     await page.getByRole('button', { name: 'Search', exact: true }).click();\n    at /app/tests/ui/entity-suggest.spec.ts:138:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.802Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-47298-Search-and-Show-All-working-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-47298-Search-and-Show-All-working-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 138
                      }
                    },
                    {
                      "workerIndex": 583,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 341,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:138:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 138
                        },
                        "snippet": "\u001b[0m \u001b[90m 136 |\u001b[39m   test(\u001b[32m'empty suggestions keep explicit Search and Show All working'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 137 |\u001b[39m     \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 138 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 139 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cruz'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 140 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'status'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'No suggestions'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'button'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search'\u001b[39m\u001b[33m,\u001b[39m exact\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 138
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  136 |   test('empty suggestions keep explicit Search and Show All working', async ({ page }) => {\n  137 |     await setup(page, []);\n> 138 |     await page.goto('/politicians/');\n      |                ^\n  139 |     await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cruz');\n  140 |     await expect(page.getByRole('status')).toContainText('No suggestions');\n  141 |     await page.getByRole('button', { name: 'Search', exact: true }).click();\n    at /app/tests/ui/entity-suggest.spec.ts:138:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.762Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-47298-Search-and-Show-All-working-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-47298-Search-and-Show-All-working-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-47298-Search-and-Show-All-working-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-47298-Search-and-Show-All-working-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 138
                      }
                    },
                    {
                      "workerIndex": 609,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 203,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:138:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 138
                        },
                        "snippet": "\u001b[0m \u001b[90m 136 |\u001b[39m   test(\u001b[32m'empty suggestions keep explicit Search and Show All working'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 137 |\u001b[39m     \u001b[36mawait\u001b[39m setup(page\u001b[33m,\u001b[39m [])\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 138 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 139 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cruz'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 140 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'status'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'No suggestions'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'button'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search'\u001b[39m\u001b[33m,\u001b[39m exact\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 138
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  136 |   test('empty suggestions keep explicit Search and Show All working', async ({ page }) => {\n  137 |     await setup(page, []);\n> 138 |     await page.goto('/politicians/');\n      |                ^\n  139 |     await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cruz');\n  140 |     await expect(page.getByRole('status')).toContainText('No suggestions');\n  141 |     await page.getByRole('button', { name: 'Search', exact: true }).click();\n    at /app/tests/ui/entity-suggest.spec.ts:138:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.927Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-47298-Search-and-Show-All-working-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-47298-Search-and-Show-All-working-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 138
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-c8d158429afe7fe17f60",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 136,
              "column": 7
            },
            {
              "title": "ignores late replies after a new prefix, dismissal, or clearing below the minimum",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 632,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 170,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:156:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 156
                        },
                        "snippet": "\u001b[0m \u001b[90m 154 |\u001b[39m       \u001b[36mawait\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { data\u001b[33m:\u001b[39m { entitySuggest\u001b[33m:\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m name\u001b[33m:\u001b[39m \u001b[32m'Stale match'\u001b[39m }] } } })\u001b[33m.\u001b[39m\u001b[36mcatch\u001b[39m(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\n \u001b[90m 155 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 156 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 157 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 158 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m action \u001b[36mof\u001b[39m [\u001b[32m'clear'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'escape'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'blur'\u001b[39m]) {\n \u001b[90m 159 |\u001b[39m       release \u001b[33m=\u001b[39m undefined \u001b[36mas\u001b[39m any\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 156
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  154 |       await route.fulfill({ json: { data: { entitySuggest: [{ ...candidate, name: 'Stale match' }] } } }).catch(() => {});\n  155 |     });\n> 156 |     await page.goto('/politicians/');\n      |                ^\n  157 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  158 |     for (const action of ['clear', 'escape', 'blur']) {\n  159 |       release = undefined as any;\n    at /app/tests/ui/entity-suggest.spec.ts:156:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:37.916Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-42169--clearing-below-the-minimum-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-42169--clearing-below-the-minimum-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 156
                      }
                    },
                    {
                      "workerIndex": 651,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 282,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:156:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 156
                        },
                        "snippet": "\u001b[0m \u001b[90m 154 |\u001b[39m       \u001b[36mawait\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { data\u001b[33m:\u001b[39m { entitySuggest\u001b[33m:\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m name\u001b[33m:\u001b[39m \u001b[32m'Stale match'\u001b[39m }] } } })\u001b[33m.\u001b[39m\u001b[36mcatch\u001b[39m(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\n \u001b[90m 155 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 156 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 157 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 158 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m action \u001b[36mof\u001b[39m [\u001b[32m'clear'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'escape'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'blur'\u001b[39m]) {\n \u001b[90m 159 |\u001b[39m       release \u001b[33m=\u001b[39m undefined \u001b[36mas\u001b[39m any\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 156
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  154 |       await route.fulfill({ json: { data: { entitySuggest: [{ ...candidate, name: 'Stale match' }] } } }).catch(() => {});\n  155 |     });\n> 156 |     await page.goto('/politicians/');\n      |                ^\n  157 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  158 |     for (const action of ['clear', 'escape', 'blur']) {\n  159 |       release = undefined as any;\n    at /app/tests/ui/entity-suggest.spec.ts:156:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:38.862Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-42169--clearing-below-the-minimum-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-42169--clearing-below-the-minimum-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-42169--clearing-below-the-minimum-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-42169--clearing-below-the-minimum-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 156
                      }
                    },
                    {
                      "workerIndex": 679,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 188,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:156:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 156
                        },
                        "snippet": "\u001b[0m \u001b[90m 154 |\u001b[39m       \u001b[36mawait\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { data\u001b[33m:\u001b[39m { entitySuggest\u001b[33m:\u001b[39m [{ \u001b[33m...\u001b[39mcandidate\u001b[33m,\u001b[39m name\u001b[33m:\u001b[39m \u001b[32m'Stale match'\u001b[39m }] } } })\u001b[33m.\u001b[39m\u001b[36mcatch\u001b[39m(() \u001b[33m=>\u001b[39m {})\u001b[33m;\u001b[39m\n \u001b[90m 155 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 156 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 157 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 158 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m action \u001b[36mof\u001b[39m [\u001b[32m'clear'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'escape'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'blur'\u001b[39m]) {\n \u001b[90m 159 |\u001b[39m       release \u001b[33m=\u001b[39m undefined \u001b[36mas\u001b[39m any\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 156
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  154 |       await route.fulfill({ json: { data: { entitySuggest: [{ ...candidate, name: 'Stale match' }] } } }).catch(() => {});\n  155 |     });\n> 156 |     await page.goto('/politicians/');\n      |                ^\n  157 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  158 |     for (const action of ['clear', 'escape', 'blur']) {\n  159 |       release = undefined as any;\n    at /app/tests/ui/entity-suggest.spec.ts:156:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.054Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-42169--clearing-below-the-minimum-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-42169--clearing-below-the-minimum-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 156
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-1c57a12821077d85d1e1",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 148,
              "column": 7
            },
            {
              "title": "does not fetch while composing and fits the mobile search form",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 766,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 185,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:190:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 190
                        },
                        "snippet": "\u001b[0m \u001b[90m 188 |\u001b[39m     \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page)\u001b[33m;\u001b[39m\n \u001b[90m 189 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39msetViewportSize({ width\u001b[33m:\u001b[39m \u001b[35m390\u001b[39m\u001b[33m,\u001b[39m height\u001b[33m:\u001b[39m \u001b[35m844\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 190 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 191 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 192 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mdispatchEvent(\u001b[32m'compositionstart'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 193 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 190
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  188 |     const requests = await setup(page);\n  189 |     await page.setViewportSize({ width: 390, height: 844 });\n> 190 |     await page.goto('/politicians/');\n      |                ^\n  191 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  192 |     await input.dispatchEvent('compositionstart');\n  193 |     await input.fill('ted cru');\n    at /app/tests/ui/entity-suggest.spec.ts:190:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:44.133Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-e3686-fits-the-mobile-search-form-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-e3686-fits-the-mobile-search-form-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 190
                      }
                    },
                    {
                      "workerIndex": 783,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 272,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:190:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 190
                        },
                        "snippet": "\u001b[0m \u001b[90m 188 |\u001b[39m     \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page)\u001b[33m;\u001b[39m\n \u001b[90m 189 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39msetViewportSize({ width\u001b[33m:\u001b[39m \u001b[35m390\u001b[39m\u001b[33m,\u001b[39m height\u001b[33m:\u001b[39m \u001b[35m844\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 190 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 191 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 192 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mdispatchEvent(\u001b[32m'compositionstart'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 193 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 190
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  188 |     const requests = await setup(page);\n  189 |     await page.setViewportSize({ width: 390, height: 844 });\n> 190 |     await page.goto('/politicians/');\n      |                ^\n  191 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  192 |     await input.dispatchEvent('compositionstart');\n  193 |     await input.fill('ted cru');\n    at /app/tests/ui/entity-suggest.spec.ts:190:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:45.130Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-e3686-fits-the-mobile-search-form-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-e3686-fits-the-mobile-search-form-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-e3686-fits-the-mobile-search-form-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-e3686-fits-the-mobile-search-form-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 190
                      }
                    },
                    {
                      "workerIndex": 807,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:190:16",
                        "location": {
                          "file": "/app/tests/ui/entity-suggest.spec.ts",
                          "column": 16,
                          "line": 190
                        },
                        "snippet": "\u001b[0m \u001b[90m 188 |\u001b[39m     \u001b[36mconst\u001b[39m requests \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m setup(page)\u001b[33m;\u001b[39m\n \u001b[90m 189 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39msetViewportSize({ width\u001b[33m:\u001b[39m \u001b[35m390\u001b[39m\u001b[33m,\u001b[39m height\u001b[33m:\u001b[39m \u001b[35m844\u001b[39m })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 190 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 191 |\u001b[39m     \u001b[36mconst\u001b[39m input \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 192 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mdispatchEvent(\u001b[32m'compositionstart'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 193 |\u001b[39m     \u001b[36mawait\u001b[39m input\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 16,
                            "line": 190
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  188 |     const requests = await setup(page);\n  189 |     await page.setViewportSize({ width: 390, height: 844 });\n> 190 |     await page.goto('/politicians/');\n      |                ^\n  191 |     const input = page.getByRole('combobox', { name: 'Search entities' });\n  192 |     await input.dispatchEvent('compositionstart');\n  193 |     await input.fill('ted cru');\n    at /app/tests/ui/entity-suggest.spec.ts:190:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:46.182Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-e3686-fits-the-mobile-search-form-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-e3686-fits-the-mobile-search-form-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/entity-suggest.spec.ts",
                        "column": 16,
                        "line": 190
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "50d55db3dfe905c8dee9-f522b655170ed1aa18c2",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 187,
              "column": 7
            }
          ],
          "suites": [
            {
              "title": "touch selection",
              "file": "tests/ui/entity-suggest.spec.ts",
              "line": 172,
              "column": 8,
              "specs": [
                {
                  "title": "tap opens an option without blur removing it first",
                  "ok": false,
                  "tags": [],
                  "tests": [
                    {
                      "timeout": 30000,
                      "annotations": [],
                      "expectedStatus": "passed",
                      "projectId": "ui",
                      "projectName": "ui",
                      "results": [
                        {
                          "workerIndex": 703,
                          "parallelIndex": 14,
                          "status": "failed",
                          "duration": 176,
                          "error": {
                            "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                            "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:179:18",
                            "location": {
                              "file": "/app/tests/ui/entity-suggest.spec.ts",
                              "column": 18,
                              "line": 179
                            },
                            "snippet": "\u001b[0m \u001b[90m 177 |\u001b[39m         \u001b[33m?\u001b[39m route\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m503\u001b[39m })\n \u001b[90m 178 |\u001b[39m         \u001b[33m:\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Entity page</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 179 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 180 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 181 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'listbox'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 182 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'listbox'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m)\u001b[33m.\u001b[39mtap()\u001b[33m;\u001b[39m\u001b[0m"
                          },
                          "errors": [
                            {
                              "location": {
                                "file": "/app/tests/ui/entity-suggest.spec.ts",
                                "column": 18,
                                "line": 179
                              },
                              "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  177 |         ? route.fulfill({ status: 503 })\n  178 |         : route.fulfill({ contentType: 'text/html', body: '<h1>Entity page</h1>' }));\n> 179 |       await page.goto('/politicians/');\n      |                  ^\n  180 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  181 |       await expect(page.getByRole('listbox').getByRole('option')).toBeVisible();\n  182 |       await page.getByRole('listbox').getByRole('option').tap();\n    at /app/tests/ui/entity-suggest.spec.ts:179:18"
                            }
                          ],
                          "stdout": [],
                          "stderr": [],
                          "retry": 0,
                          "startTime": "2026-10-25T21:04:41.056Z",
                          "annotations": [],
                          "attachments": [
                            {
                              "name": "screenshot",
                              "contentType": "image/png",
                              "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-540f8-hout-blur-removing-it-first-ui/test-failed-1.png"
                            },
                            {
                              "name": "error-context",
                              "contentType": "text/markdown",
                              "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-540f8-hout-blur-removing-it-first-ui/error-context.md"
                            }
                          ],
                          "errorLocation": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 179
                          }
                        },
                        {
                          "workerIndex": 721,
                          "parallelIndex": 14,
                          "status": "failed",
                          "duration": 277,
                          "error": {
                            "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                            "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:179:18",
                            "location": {
                              "file": "/app/tests/ui/entity-suggest.spec.ts",
                              "column": 18,
                              "line": 179
                            },
                            "snippet": "\u001b[0m \u001b[90m 177 |\u001b[39m         \u001b[33m?\u001b[39m route\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m503\u001b[39m })\n \u001b[90m 178 |\u001b[39m         \u001b[33m:\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Entity page</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 179 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 180 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 181 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'listbox'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 182 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'listbox'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m)\u001b[33m.\u001b[39mtap()\u001b[33m;\u001b[39m\u001b[0m"
                          },
                          "errors": [
                            {
                              "location": {
                                "file": "/app/tests/ui/entity-suggest.spec.ts",
                                "column": 18,
                                "line": 179
                              },
                              "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  177 |         ? route.fulfill({ status: 503 })\n  178 |         : route.fulfill({ contentType: 'text/html', body: '<h1>Entity page</h1>' }));\n> 179 |       await page.goto('/politicians/');\n      |                  ^\n  180 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  181 |       await expect(page.getByRole('listbox').getByRole('option')).toBeVisible();\n  182 |       await page.getByRole('listbox').getByRole('option').tap();\n    at /app/tests/ui/entity-suggest.spec.ts:179:18"
                            }
                          ],
                          "stdout": [],
                          "stderr": [],
                          "retry": 1,
                          "startTime": "2026-10-25T21:04:42.071Z",
                          "annotations": [],
                          "attachments": [
                            {
                              "name": "screenshot",
                              "contentType": "image/png",
                              "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-540f8-hout-blur-removing-it-first-ui-retry1/test-failed-1.png"
                            },
                            {
                              "name": "video",
                              "contentType": "video/webm",
                              "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-540f8-hout-blur-removing-it-first-ui-retry1/video.webm"
                            },
                            {
                              "name": "error-context",
                              "contentType": "text/markdown",
                              "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-540f8-hout-blur-removing-it-first-ui-retry1/error-context.md"
                            },
                            {
                              "name": "trace",
                              "contentType": "application/zip",
                              "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-540f8-hout-blur-removing-it-first-ui-retry1/trace.zip"
                            }
                          ],
                          "errorLocation": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 179
                          }
                        },
                        {
                          "workerIndex": 748,
                          "parallelIndex": 14,
                          "status": "failed",
                          "duration": 177,
                          "error": {
                            "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n",
                            "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/entity-suggest.spec.ts:179:18",
                            "location": {
                              "file": "/app/tests/ui/entity-suggest.spec.ts",
                              "column": 18,
                              "line": 179
                            },
                            "snippet": "\u001b[0m \u001b[90m 177 |\u001b[39m         \u001b[33m?\u001b[39m route\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m503\u001b[39m })\n \u001b[90m 178 |\u001b[39m         \u001b[33m:\u001b[39m route\u001b[33m.\u001b[39mfulfill({ contentType\u001b[33m:\u001b[39m \u001b[32m'text/html'\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'<h1>Entity page</h1>'\u001b[39m }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 179 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/politicians/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 180 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Search entities'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'ted cru'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 181 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'listbox'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 182 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'listbox'\u001b[39m)\u001b[33m.\u001b[39mgetByRole(\u001b[32m'option'\u001b[39m)\u001b[33m.\u001b[39mtap()\u001b[33m;\u001b[39m\u001b[0m"
                          },
                          "errors": [
                            {
                              "location": {
                                "file": "/app/tests/ui/entity-suggest.spec.ts",
                                "column": 18,
                                "line": 179
                              },
                              "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/politicians/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/politicians/\", waiting until \"load\"\u001b[22m\n\n\n  177 |         ? route.fulfill({ status: 503 })\n  178 |         : route.fulfill({ contentType: 'text/html', body: '<h1>Entity page</h1>' }));\n> 179 |       await page.goto('/politicians/');\n      |                  ^\n  180 |       await page.getByRole('combobox', { name: 'Search entities' }).fill('ted cru');\n  181 |       await expect(page.getByRole('listbox').getByRole('option')).toBeVisible();\n  182 |       await page.getByRole('listbox').getByRole('option').tap();\n    at /app/tests/ui/entity-suggest.spec.ts:179:18"
                            }
                          ],
                          "stdout": [],
                          "stderr": [],
                          "retry": 2,
                          "startTime": "2026-10-25T21:04:43.157Z",
                          "annotations": [],
                          "attachments": [
                            {
                              "name": "screenshot",
                              "contentType": "image/png",
                              "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-540f8-hout-blur-removing-it-first-ui-retry2/test-failed-1.png"
                            },
                            {
                              "name": "error-context",
                              "contentType": "text/markdown",
                              "path": "/workspace/artifacts/cac5904/us/test-output/entity-suggest-entity-type-540f8-hout-blur-removing-it-first-ui-retry2/error-context.md"
                            }
                          ],
                          "errorLocation": {
                            "file": "/app/tests/ui/entity-suggest.spec.ts",
                            "column": 18,
                            "line": 179
                          }
                        }
                      ],
                      "status": "unexpected"
                    }
                  ],
                  "id": "50d55db3dfe905c8dee9-eb70e4228570fd6a9954",
                  "file": "tests/ui/entity-suggest.spec.ts",
                  "line": 174,
                  "column": 9
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/follow-control.spec.ts",
      "file": "tests/ui/follow-control.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "profile Follow (sites#435)",
          "file": "tests/ui/follow-control.spec.ts",
          "line": 58,
          "column": 6,
          "specs": [
            {
              "title": "profile pages carry their entity on <body>",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 15,
                      "parallelIndex": 15,
                      "status": "timedOut",
                      "duration": 30020,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:60:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.211Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-1b254-carry-their-entity-on-body--ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 39,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 11234,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:60:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:60:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.845Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-1b254-carry-their-entity-on-body--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-1b254-carry-their-entity-on-body--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 73,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 35,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:60:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:60:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.883Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-1b254-carry-their-entity-on-body--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6eae7daf7bd84ee8aac1-c14b99e50a9e542b4425",
              "file": "tests/ui/follow-control.spec.ts",
              "line": 59,
              "column": 7
            },
            {
              "title": "signed in: Follow toggles to Following ✓ and back through account-api",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 98,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 160,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:70:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:70:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.679Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-188e2-nd-back-through-account-api-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-188e2-nd-back-through-account-api-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 128,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 307,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:70:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:70:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.680Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-188e2-nd-back-through-account-api-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-188e2-nd-back-through-account-api-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-188e2-nd-back-through-account-api-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-188e2-nd-back-through-account-api-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 158,
                      "parallelIndex": 15,
                      "status": "timedOut",
                      "duration": 30114,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:70:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:09.097Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-188e2-nd-back-through-account-api-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-188e2-nd-back-through-account-api-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6eae7daf7bd84ee8aac1-d7c093bb06d03d102737",
              "file": "tests/ui/follow-control.spec.ts",
              "line": 69,
              "column": 7
            },
            {
              "title": "signed in and already following: Following ✓",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 184,
                      "parallelIndex": 15,
                      "status": "timedOut",
                      "duration": 30122,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:93:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:39.869Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-622d5-ready-following-Following-✓-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-622d5-ready-following-Following-✓-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 324,
                      "parallelIndex": 15,
                      "status": "timedOut",
                      "duration": 30154,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:93:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:10.606Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-622d5-ready-following-Following-✓-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-622d5-ready-following-Following-✓-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-622d5-ready-following-Following-✓-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-622d5-ready-following-Following-✓-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 341,
                      "parallelIndex": 15,
                      "status": "timedOut",
                      "duration": 30105,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:93:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:41.416Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-622d5-ready-following-Following-✓-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-622d5-ready-following-Following-✓-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6eae7daf7bd84ee8aac1-bc1416243e95ca446345",
              "file": "tests/ui/follow-control.spec.ts",
              "line": 92,
              "column": 7
            },
            {
              "title": "News on elect.news opens the filtered feed in a new tab",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 440,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 19469,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/12cac40d-b40d-abcc-6735-5e49f3925192/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/12cac40d-b40d-abcc-6735-5e49f3925192/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:100:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/12cac40d-b40d-abcc-6735-5e49f3925192/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:100:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:12.118Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-bf1c7--filtered-feed-in-a-new-tab-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-bf1c7--filtered-feed-in-a-new-tab-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 501,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 224,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/12cac40d-b40d-abcc-6735-5e49f3925192/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/12cac40d-b40d-abcc-6735-5e49f3925192/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:100:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/12cac40d-b40d-abcc-6735-5e49f3925192/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:100:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:32.334Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-bf1c7--filtered-feed-in-a-new-tab-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-bf1c7--filtered-feed-in-a-new-tab-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-bf1c7--filtered-feed-in-a-new-tab-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-bf1c7--filtered-feed-in-a-new-tab-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 528,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/12cac40d-b40d-abcc-6735-5e49f3925192/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/12cac40d-b40d-abcc-6735-5e49f3925192/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:100:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/12cac40d-b40d-abcc-6735-5e49f3925192/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:100:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.406Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-bf1c7--filtered-feed-in-a-new-tab-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-bf1c7--filtered-feed-in-a-new-tab-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6eae7daf7bd84ee8aac1-fa5f62994055d402b129",
              "file": "tests/ui/follow-control.spec.ts",
              "line": 99,
              "column": 7
            },
            {
              "title": "signed out: Follow opens the sign-in panel, and the follow completes after sign-in",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 549,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 149,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:111:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:111:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.317Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-14487-low-completes-after-sign-in-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-14487-low-completes-after-sign-in-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 572,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 245,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:111:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:111:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.253Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-14487-low-completes-after-sign-in-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-14487-low-completes-after-sign-in-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-14487-low-completes-after-sign-in-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-14487-low-completes-after-sign-in-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 601,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 144,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:111:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:111:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.394Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-14487-low-completes-after-sign-in-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-14487-low-completes-after-sign-in-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6eae7daf7bd84ee8aac1-91572a7defe02657ddb4",
              "file": "tests/ui/follow-control.spec.ts",
              "line": 110,
              "column": 7
            },
            {
              "title": "no control on a profile without news",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 620,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:128:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:128:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:37.330Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-e0176-l-on-a-profile-without-news-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-e0176-l-on-a-profile-without-news-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 640,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 256,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:128:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:128:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:38.236Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-e0176-l-on-a-profile-without-news-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-e0176-l-on-a-profile-without-news-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-e0176-l-on-a-profile-without-news-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-e0176-l-on-a-profile-without-news-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 666,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 152,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:128:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:128:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:39.280Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-e0176-l-on-a-profile-without-news-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-e0176-l-on-a-profile-without-news-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6eae7daf7bd84ee8aac1-f86b5cc63fbd824bd49b",
              "file": "tests/ui/follow-control.spec.ts",
              "line": 127,
              "column": 7
            }
          ]
        },
        {
          "title": "profile Follow, really signed in (sites#435)",
          "file": "tests/ui/follow-control.spec.ts",
          "line": 138,
          "column": 6,
          "specs": [
            {
              "title": "follow and unfollow through account-api as the signed-in visitor",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 687,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 173,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:140:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:140:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:40.298Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-2e464-pi-as-the-signed-in-visitor-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-2e464-pi-as-the-signed-in-visitor-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 708,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 285,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:140:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:140:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:41.283Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-2e464-pi-as-the-signed-in-visitor-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-2e464-pi-as-the-signed-in-visitor-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-2e464-pi-as-the-signed-in-visitor-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-2e464-pi-as-the-signed-in-visitor-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 735,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 149,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:140:11",
                        "location": {
                          "file": "/app/tests/ui/follow-control.spec.ts",
                          "column": 37,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m \u001b[90m/** Skip when the host's us-pages predates the page entity on <body>. */\u001b[39m\n \u001b[90m 22 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m needsEntity(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[36mvoid\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m   \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                     \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m   test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m\u001b[35m/<body[^>]*data-entity-id=/\u001b[39m\u001b[33m.\u001b[39mtest(html)\u001b[33m,\u001b[39m \u001b[32m'the us-pages renderer predates data-entity-id (sites#435)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m }\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/follow-control.spec.ts",
                            "column": 37,
                            "line": 23
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/daa9a544-52e2-83cd-03fd-befc14a52af4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 | /** Skip when the host's us-pages predates the page entity on <body>. */\n  22 | async function needsEntity(request: APIRequestContext, path: string): Promise<void> {\n> 23 |   const html = await (await request.get(path)).text();\n     |                                     ^\n  24 |   test.skip(!/<body[^>]*data-entity-id=/.test(html), 'the us-pages renderer predates data-entity-id (sites#435)');\n  25 | }\n  26 |\n    at needsEntity (/app/tests/ui/follow-control.spec.ts:23:37)\n    at /app/tests/ui/follow-control.spec.ts:140:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.402Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-2e464-pi-as-the-signed-in-visitor-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/follow-control-profile-Fol-2e464-pi-as-the-signed-in-visitor-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/follow-control.spec.ts",
                        "column": 37,
                        "line": 23
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6eae7daf7bd84ee8aac1-814877e5e725711b581b",
              "file": "tests/ui/follow-control.spec.ts",
              "line": 139,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/geo-map.spec.ts",
      "file": "tests/ui/geo-map.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "/districts/ny-16/: boundary map, no missing scripts or shapes",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 60000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 16,
                  "parallelIndex": 16,
                  "status": "timedOut",
                  "duration": 70063,
                  "error": {
                    "message": "\u001b[31mTest timeout of 60000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 60000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 60000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ny-16/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:01:23.201Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ny-16-b-e793c-o-missing-scripts-or-shapes-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 183,
                  "parallelIndex": 16,
                  "status": "timedOut",
                  "duration": 70258,
                  "error": {
                    "message": "\u001b[31mTest timeout of 60000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 60000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 60000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ny-16/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:02:33.881Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ny-16-b-e793c-o-missing-scripts-or-shapes-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ny-16-b-e793c-o-missing-scripts-or-shapes-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ny-16-b-e793c-o-missing-scripts-or-shapes-ui-retry1/trace.zip"
                    }
                  ]
                },
                {
                  "workerIndex": 347,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 19711,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ny-16/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ny-16/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ny-16/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ny-16/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ny-16/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ny-16/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:44.753Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ny-16-b-e793c-o-missing-scripts-or-shapes-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ny-16-b-e793c-o-missing-scripts-or-shapes-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "aeca45b1951573114fd2-26f1eddd3c5504dad49e",
          "file": "tests/ui/geo-map.spec.ts",
          "line": 18,
          "column": 7
        },
        {
          "title": "/districts/ak-00/: boundary map, no missing scripts or shapes",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 60000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 397,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 154,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ak-00/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ak-00/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ak-00/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ak-00/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ak-00/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ak-00/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:05.109Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ak-00-b-b3fdf-o-missing-scripts-or-shapes-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ak-00-b-b3fdf-o-missing-scripts-or-shapes-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                },
                {
                  "workerIndex": 407,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 233,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ak-00/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ak-00/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ak-00/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ak-00/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ak-00/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ak-00/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:05.949Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ak-00-b-b3fdf-o-missing-scripts-or-shapes-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ak-00-b-b3fdf-o-missing-scripts-or-shapes-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ak-00-b-b3fdf-o-missing-scripts-or-shapes-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ak-00-b-b3fdf-o-missing-scripts-or-shapes-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                },
                {
                  "workerIndex": 419,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 148,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ak-00/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ak-00/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ak-00/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ak-00/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/ak-00/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/ak-00/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:06.882Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ak-00-b-b3fdf-o-missing-scripts-or-shapes-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--districts-ak-00-b-b3fdf-o-missing-scripts-or-shapes-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "aeca45b1951573114fd2-4cc2918265d9c81185a1",
          "file": "tests/ui/geo-map.spec.ts",
          "line": 18,
          "column": 7
        },
        {
          "title": "/counties/kerr-county-tx/: boundary map, no missing scripts or shapes",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 60000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 428,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 19768,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/kerr-county-tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/kerr-county-tx/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/kerr-county-tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/kerr-county-tx/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/kerr-county-tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/kerr-county-tx/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:07.707Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--counties-kerr-cou-3cb9b-o-missing-scripts-or-shapes-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--counties-kerr-cou-3cb9b-o-missing-scripts-or-shapes-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                },
                {
                  "workerIndex": 444,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 215,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/kerr-county-tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/kerr-county-tx/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/kerr-county-tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/kerr-county-tx/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/kerr-county-tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/kerr-county-tx/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:28.072Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--counties-kerr-cou-3cb9b-o-missing-scripts-or-shapes-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--counties-kerr-cou-3cb9b-o-missing-scripts-or-shapes-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--counties-kerr-cou-3cb9b-o-missing-scripts-or-shapes-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--counties-kerr-cou-3cb9b-o-missing-scripts-or-shapes-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                },
                {
                  "workerIndex": 453,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 141,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/kerr-county-tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/kerr-county-tx/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/kerr-county-tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/kerr-county-tx/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/kerr-county-tx/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/kerr-county-tx/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:28.973Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--counties-kerr-cou-3cb9b-o-missing-scripts-or-shapes-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--counties-kerr-cou-3cb9b-o-missing-scripts-or-shapes-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "aeca45b1951573114fd2-bf1fc2f9e43f4dd64e82",
          "file": "tests/ui/geo-map.spec.ts",
          "line": 18,
          "column": 7
        },
        {
          "title": "/places/megargel-cdp-al/: boundary map, no missing scripts or shapes",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 60000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 459,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 158,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/megargel-cdp-al/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/megargel-cdp-al/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/megargel-cdp-al/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/megargel-cdp-al/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/megargel-cdp-al/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/megargel-cdp-al/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:29.806Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--places-megargel-c-1c423-o-missing-scripts-or-shapes-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--places-megargel-c-1c423-o-missing-scripts-or-shapes-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                },
                {
                  "workerIndex": 471,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 231,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/megargel-cdp-al/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/megargel-cdp-al/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/megargel-cdp-al/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/megargel-cdp-al/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/megargel-cdp-al/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/megargel-cdp-al/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:30.620Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--places-megargel-c-1c423-o-missing-scripts-or-shapes-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--places-megargel-c-1c423-o-missing-scripts-or-shapes-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--places-megargel-c-1c423-o-missing-scripts-or-shapes-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--places-megargel-c-1c423-o-missing-scripts-or-shapes-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                },
                {
                  "workerIndex": 483,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 183,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/megargel-cdp-al/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/megargel-cdp-al/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/megargel-cdp-al/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/megargel-cdp-al/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/megargel-cdp-al/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/megargel-cdp-al/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:31.561Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--places-megargel-c-1c423-o-missing-scripts-or-shapes-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--places-megargel-c-1c423-o-missing-scripts-or-shapes-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "aeca45b1951573114fd2-e3e936249d93d6f68d31",
          "file": "tests/ui/geo-map.spec.ts",
          "line": 18,
          "column": 7
        },
        {
          "title": "/postalcodes/73762/: boundary map, no missing scripts or shapes",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 60000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 508,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 172,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/73762/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/73762/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/73762/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/73762/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/73762/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/73762/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:32.564Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--postalcodes-73762-6c23f-o-missing-scripts-or-shapes-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--postalcodes-73762-6c23f-o-missing-scripts-or-shapes-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                },
                {
                  "workerIndex": 529,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 248,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/73762/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/73762/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/73762/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/73762/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/73762/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/73762/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:33.516Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--postalcodes-73762-6c23f-o-missing-scripts-or-shapes-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--postalcodes-73762-6c23f-o-missing-scripts-or-shapes-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--postalcodes-73762-6c23f-o-missing-scripts-or-shapes-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--postalcodes-73762-6c23f-o-missing-scripts-or-shapes-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                },
                {
                  "workerIndex": 555,
                  "parallelIndex": 16,
                  "status": "failed",
                  "duration": 161,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/73762/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/73762/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/73762/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/73762/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/geo-map.spec.ts:26:28",
                    "location": {
                      "file": "/app/tests/ui/geo-map.spec.ts",
                      "column": 28,
                      "line": 26
                    },
                    "snippet": "\u001b[0m \u001b[90m 24 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m failures\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                            \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 27 |\u001b[39m     expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m tag \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'script[src=\"/js/geo-map.js\"][data-geo-shape]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m     \u001b[36mawait\u001b[39m expect(tag)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/geo-map.spec.ts",
                        "column": 28,
                        "line": 26
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/73762/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/73762/\", waiting until \"load\"\u001b[22m\n\n\n  24 |     });\n  25 |     page.on('pageerror', e => failures.push(e.message));\n> 26 |     const res = await page.goto(path);\n     |                            ^\n  27 |     expect(res?.status(), `${path} should answer 200`).toBe(200);\n  28 |     const tag = page.locator('script[src=\"/js/geo-map.js\"][data-geo-shape]');\n  29 |     await expect(tag).toHaveCount(1);\n    at /app/tests/ui/geo-map.spec.ts:26:28"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:34.620Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--postalcodes-73762-6c23f-o-missing-scripts-or-shapes-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/geo-map--postalcodes-73762-6c23f-o-missing-scripts-or-shapes-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/geo-map.spec.ts",
                    "column": 28,
                    "line": 26
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "aeca45b1951573114fd2-e530e73c9cf719f4b9d0",
          "file": "tests/ui/geo-map.spec.ts",
          "line": 18,
          "column": 7
        }
      ]
    },
    {
      "title": "tests/ui/graph-control.spec.ts",
      "file": "tests/ui/graph-control.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "graph control everywhere (sites#355)",
          "file": "tests/ui/graph-control.spec.ts",
          "line": 16,
          "column": 6,
          "specs": [
            {
              "title": "a member sees Graph on / and gets the hint",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 17,
                      "parallelIndex": 17,
                      "status": "timedOut",
                      "duration": 40042,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 18,
                            "line": 20
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  18 |     test(`a member sees Graph on ${path} and gets the hint`, async ({ page }) => {\n  19 |       await as(page, 'jane@example.org');\n> 20 |       await page.goto(path);\n     |                  ^\n  21 |       const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  22 |       await expect(graph).toHaveCount(1, { timeout: 15000 });\n  23 |       await expect(graph).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/graph-control.spec.ts:20:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.188Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-0bc4d--Graph-on-and-gets-the-hint-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 49,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 313,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:20:18",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 18,
                          "line": 20
                        },
                        "snippet": "\u001b[0m \u001b[90m 18 |\u001b[39m     test(\u001b[32m`a member sees Graph on ${path} and gets the hint`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 21 |\u001b[39m       \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 18,
                            "line": 20
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  18 |     test(`a member sees Graph on ${path} and gets the hint`, async ({ page }) => {\n  19 |       await as(page, 'jane@example.org');\n> 20 |       await page.goto(path);\n     |                  ^\n  21 |       const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  22 |       await expect(graph).toHaveCount(1, { timeout: 15000 });\n  23 |       await expect(graph).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/graph-control.spec.ts:20:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:03.938Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-0bc4d--Graph-on-and-gets-the-hint-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-0bc4d--Graph-on-and-gets-the-hint-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-0bc4d--Graph-on-and-gets-the-hint-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-0bc4d--Graph-on-and-gets-the-hint-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 18,
                        "line": 20
                      }
                    },
                    {
                      "workerIndex": 59,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 310,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:20:18",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 18,
                          "line": 20
                        },
                        "snippet": "\u001b[0m \u001b[90m 18 |\u001b[39m     test(\u001b[32m`a member sees Graph on ${path} and gets the hint`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 21 |\u001b[39m       \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 18,
                            "line": 20
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  18 |     test(`a member sees Graph on ${path} and gets the hint`, async ({ page }) => {\n  19 |       await as(page, 'jane@example.org');\n> 20 |       await page.goto(path);\n     |                  ^\n  21 |       const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  22 |       await expect(graph).toHaveCount(1, { timeout: 15000 });\n  23 |       await expect(graph).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/graph-control.spec.ts:20:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.034Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-0bc4d--Graph-on-and-gets-the-hint-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-0bc4d--Graph-on-and-gets-the-hint-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 18,
                        "line": 20
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "0db1e5a4a35d5c975675-c9c4cb661d574f9d01c0",
              "file": "tests/ui/graph-control.spec.ts",
              "line": 18,
              "column": 9
            },
            {
              "title": "a member sees Graph on /candidates/ and gets the hint",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 80,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 255,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:20:18",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 18,
                          "line": 20
                        },
                        "snippet": "\u001b[0m \u001b[90m 18 |\u001b[39m     test(\u001b[32m`a member sees Graph on ${path} and gets the hint`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 21 |\u001b[39m       \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 18,
                            "line": 20
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  18 |     test(`a member sees Graph on ${path} and gets the hint`, async ({ page }) => {\n  19 |       await as(page, 'jane@example.org');\n> 20 |       await page.goto(path);\n     |                  ^\n  21 |       const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  22 |       await expect(graph).toHaveCount(1, { timeout: 15000 });\n  23 |       await expect(graph).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/graph-control.spec.ts:20:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.188Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-1adde-andidates-and-gets-the-hint-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-1adde-andidates-and-gets-the-hint-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 18,
                        "line": 20
                      }
                    },
                    {
                      "workerIndex": 109,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 437,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:20:18",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 18,
                          "line": 20
                        },
                        "snippet": "\u001b[0m \u001b[90m 18 |\u001b[39m     test(\u001b[32m`a member sees Graph on ${path} and gets the hint`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 21 |\u001b[39m       \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 18,
                            "line": 20
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  18 |     test(`a member sees Graph on ${path} and gets the hint`, async ({ page }) => {\n  19 |       await as(page, 'jane@example.org');\n> 20 |       await page.goto(path);\n     |                  ^\n  21 |       const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  22 |       await expect(graph).toHaveCount(1, { timeout: 15000 });\n  23 |       await expect(graph).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/graph-control.spec.ts:20:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.254Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-1adde-andidates-and-gets-the-hint-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-1adde-andidates-and-gets-the-hint-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-1adde-andidates-and-gets-the-hint-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-1adde-andidates-and-gets-the-hint-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 18,
                        "line": 20
                      }
                    },
                    {
                      "workerIndex": 142,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 239,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:20:18",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 18,
                          "line": 20
                        },
                        "snippet": "\u001b[0m \u001b[90m 18 |\u001b[39m     test(\u001b[32m`a member sees Graph on ${path} and gets the hint`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 19 |\u001b[39m       \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 20 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 21 |\u001b[39m       \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m       \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 18,
                            "line": 20
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  18 |     test(`a member sees Graph on ${path} and gets the hint`, async ({ page }) => {\n  19 |       await as(page, 'jane@example.org');\n> 20 |       await page.goto(path);\n     |                  ^\n  21 |       const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  22 |       await expect(graph).toHaveCount(1, { timeout: 15000 });\n  23 |       await expect(graph).not.toHaveAttribute('aria-disabled', 'true');\n    at /app/tests/ui/graph-control.spec.ts:20:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.658Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-1adde-andidates-and-gets-the-hint-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-1adde-andidates-and-gets-the-hint-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 18,
                        "line": 20
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "0db1e5a4a35d5c975675-b68c424c467012fbf13a",
              "file": "tests/ui/graph-control.spec.ts",
              "line": 18,
              "column": 9
            },
            {
              "title": "signed out, the homepage Graph is locked and offers sign-in",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 166,
                      "parallelIndex": 17,
                      "status": "timedOut",
                      "duration": 40043,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 16,
                            "line": 32
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  30 |   test('signed out, the homepage Graph is locked and offers sign-in', async ({ page }) => {\n  31 |     await as(page, '');\n> 32 |     await page.goto('/');\n     |                ^\n  33 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  34 |     await expect(graph).toHaveAttribute('aria-disabled', 'true', { timeout: 15000 });\n  35 |     await graph.click({ force: true });\n    at /app/tests/ui/graph-control.spec.ts:32:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.707Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-03882-s-locked-and-offers-sign-in-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 196,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 11570,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:32:16",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 16,
                          "line": 32
                        },
                        "snippet": "\u001b[0m \u001b[90m 30 |\u001b[39m   test(\u001b[32m'signed out, the homepage Graph is locked and offers sign-in'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 33 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 35 |\u001b[39m     \u001b[36mawait\u001b[39m graph\u001b[33m.\u001b[39mclick({ force\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 16,
                            "line": 32
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  30 |   test('signed out, the homepage Graph is locked and offers sign-in', async ({ page }) => {\n  31 |     await as(page, '');\n> 32 |     await page.goto('/');\n     |                ^\n  33 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  34 |     await expect(graph).toHaveAttribute('aria-disabled', 'true', { timeout: 15000 });\n  35 |     await graph.click({ force: true });\n    at /app/tests/ui/graph-control.spec.ts:32:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.447Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-03882-s-locked-and-offers-sign-in-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-03882-s-locked-and-offers-sign-in-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-03882-s-locked-and-offers-sign-in-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-03882-s-locked-and-offers-sign-in-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 16,
                        "line": 32
                      }
                    },
                    {
                      "workerIndex": 211,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 149,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:32:16",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 16,
                          "line": 32
                        },
                        "snippet": "\u001b[0m \u001b[90m 30 |\u001b[39m   test(\u001b[32m'signed out, the homepage Graph is locked and offers sign-in'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 33 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-disabled'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 35 |\u001b[39m     \u001b[36mawait\u001b[39m graph\u001b[33m.\u001b[39mclick({ force\u001b[33m:\u001b[39m \u001b[36mtrue\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 16,
                            "line": 32
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  30 |   test('signed out, the homepage Graph is locked and offers sign-in', async ({ page }) => {\n  31 |     await as(page, '');\n> 32 |     await page.goto('/');\n     |                ^\n  33 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  34 |     await expect(graph).toHaveAttribute('aria-disabled', 'true', { timeout: 15000 });\n  35 |     await graph.click({ force: true });\n    at /app/tests/ui/graph-control.spec.ts:32:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:02.746Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-03882-s-locked-and-offers-sign-in-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-03882-s-locked-and-offers-sign-in-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 16,
                        "line": 32
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "0db1e5a4a35d5c975675-a7d88a9a5ca0bd481c26",
              "file": "tests/ui/graph-control.spec.ts",
              "line": 30,
              "column": 7
            },
            {
              "title": "a committee page keeps one Graph control: the real pop-over",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 224,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:41:16",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 16,
                          "line": 41
                        },
                        "snippet": "\u001b[0m \u001b[90m 39 |\u001b[39m   test(\u001b[32m'a committee page keeps one Graph control: the real pop-over'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 40 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 41 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 42 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 43 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 44 |\u001b[39m     \u001b[36mawait\u001b[39m graph\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 16,
                            "line": 41
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  39 |   test('a committee page keeps one Graph control: the real pop-over', async ({ page }) => {\n  40 |     await as(page, 'jane@example.org');\n> 41 |     await page.goto(DNC);\n     |                ^\n  42 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  43 |     await expect(graph).toHaveCount(1, { timeout: 15000 });\n  44 |     await graph.click();\n    at /app/tests/ui/graph-control.spec.ts:41:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:03.556Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-91ad1-h-control-the-real-pop-over-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-91ad1-h-control-the-real-pop-over-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 16,
                        "line": 41
                      }
                    },
                    {
                      "workerIndex": 236,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 240,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:41:16",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 16,
                          "line": 41
                        },
                        "snippet": "\u001b[0m \u001b[90m 39 |\u001b[39m   test(\u001b[32m'a committee page keeps one Graph control: the real pop-over'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 40 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 41 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 42 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 43 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 44 |\u001b[39m     \u001b[36mawait\u001b[39m graph\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 16,
                            "line": 41
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  39 |   test('a committee page keeps one Graph control: the real pop-over', async ({ page }) => {\n  40 |     await as(page, 'jane@example.org');\n> 41 |     await page.goto(DNC);\n     |                ^\n  42 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  43 |     await expect(graph).toHaveCount(1, { timeout: 15000 });\n  44 |     await graph.click();\n    at /app/tests/ui/graph-control.spec.ts:41:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:04.407Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-91ad1-h-control-the-real-pop-over-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-91ad1-h-control-the-real-pop-over-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-91ad1-h-control-the-real-pop-over-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-91ad1-h-control-the-real-pop-over-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 16,
                        "line": 41
                      }
                    },
                    {
                      "workerIndex": 250,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 183,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/graph-control.spec.ts:41:16",
                        "location": {
                          "file": "/app/tests/ui/graph-control.spec.ts",
                          "column": 16,
                          "line": 41
                        },
                        "snippet": "\u001b[0m \u001b[90m 39 |\u001b[39m   test(\u001b[32m'a committee page keeps one Graph control: the real pop-over'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 40 |\u001b[39m     \u001b[36mawait\u001b[39m \u001b[36mas\u001b[39m(page\u001b[33m,\u001b[39m \u001b[32m'jane@example.org'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 41 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 42 |\u001b[39m     \u001b[36mconst\u001b[39m graph \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot [data-control=\"graph\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 43 |\u001b[39m     \u001b[36mawait\u001b[39m expect(graph)\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 44 |\u001b[39m     \u001b[36mawait\u001b[39m graph\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/graph-control.spec.ts",
                            "column": 16,
                            "line": 41
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  39 |   test('a committee page keeps one Graph control: the real pop-over', async ({ page }) => {\n  40 |     await as(page, 'jane@example.org');\n> 41 |     await page.goto(DNC);\n     |                ^\n  42 |     const graph = page.locator('#auth-slot [data-control=\"graph\"]');\n  43 |     await expect(graph).toHaveCount(1, { timeout: 15000 });\n  44 |     await graph.click();\n    at /app/tests/ui/graph-control.spec.ts:41:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:05.339Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-91ad1-h-control-the-real-pop-over-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/graph-control-graph-contro-91ad1-h-control-the-real-pop-over-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/graph-control.spec.ts",
                        "column": 16,
                        "line": 41
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "0db1e5a4a35d5c975675-75db582a009902b0a5ee",
              "file": "tests/ui/graph-control.spec.ts",
              "line": 39,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/identity-bar.spec.ts",
      "file": "tests/ui/identity-bar.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "identity bar (sites#355)",
          "file": "tests/ui/identity-bar.spec.ts",
          "line": 30,
          "column": 6,
          "specs": [
            {
              "title": "spans the page width under the header",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 18,
                      "parallelIndex": 18,
                      "status": "timedOut",
                      "duration": 40027,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:32:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.263Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c1b68-page-width-under-the-header-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 53,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 357,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:32:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:32:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:03.984Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c1b68-page-width-under-the-header-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c1b68-page-width-under-the-header-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c1b68-page-width-under-the-header-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c1b68-page-width-under-the-header-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 65,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 270,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:32:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:32:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.133Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c1b68-page-width-under-the-header-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c1b68-page-width-under-the-header-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-9dcbbbb9e824920aea79",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 31,
              "column": 7
            },
            {
              "title": "one row at 1280px: identity and account actions left, controls right",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 86,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 227,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.277Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--78b12-actions-left-controls-right-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--78b12-actions-left-controls-right-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 116,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 461,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.392Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--78b12-actions-left-controls-right-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--78b12-actions-left-controls-right-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--78b12-actions-left-controls-right-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--78b12-actions-left-controls-right-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 157,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 215,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:09.052Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--78b12-actions-left-controls-right-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--78b12-actions-left-controls-right-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-160c4c25106888353012",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 40,
              "column": 9
            },
            {
              "title": "one row at 390px: identity and account actions left, controls right",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 181,
                      "parallelIndex": 18,
                      "status": "timedOut",
                      "duration": 40040,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:10.010Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--eb035-actions-left-controls-right-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 206,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 12007,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.779Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--eb035-actions-left-controls-right-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--eb035-actions-left-controls-right-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--eb035-actions-left-controls-right-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--eb035-actions-left-controls-right-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 223,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 131,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:03.535Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--eb035-actions-left-controls-right-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--eb035-actions-left-controls-right-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-0bece716b3f0672b536f",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 40,
              "column": 9
            },
            {
              "title": "one row at 320px: identity and account actions left, controls right",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 237,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 150,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:04.423Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--f3428-actions-left-controls-right-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--f3428-actions-left-controls-right-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 249,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 264,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:05.300Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--f3428-actions-left-controls-right-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--f3428-actions-left-controls-right-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--f3428-actions-left-controls-right-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--f3428-actions-left-controls-right-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 265,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 158,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:42:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:06.275Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--f3428-actions-left-controls-right-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--f3428-actions-left-controls-right-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-689d04705a9b2cc425aa",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 40,
              "column": 9
            },
            {
              "title": "signed out at 1280px: Log in and Create an account are buttons in one row",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 280,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 188,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:07.214Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--6b600-ount-are-buttons-in-one-row-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--6b600-ount-are-buttons-in-one-row-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 295,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 303,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:08.161Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--6b600-ount-are-buttons-in-one-row-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--6b600-ount-are-buttons-in-one-row-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--6b600-ount-are-buttons-in-one-row-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--6b600-ount-are-buttons-in-one-row-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 314,
                      "parallelIndex": 18,
                      "status": "timedOut",
                      "duration": 40046,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:09.193Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--6b600-ount-are-buttons-in-one-row-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-e07c8deb6e75a0779103",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 65,
              "column": 9
            },
            {
              "title": "signed out at 390px: Log in and Create an account are buttons in one row",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 354,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 11341,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:49.891Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--7dc41-ount-are-buttons-in-one-row-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--7dc41-ount-are-buttons-in-one-row-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 362,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 243,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:01.960Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--7dc41-ount-are-buttons-in-one-row-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--7dc41-ount-are-buttons-in-one-row-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--7dc41-ount-are-buttons-in-one-row-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--7dc41-ount-are-buttons-in-one-row-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 372,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 162,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:03.021Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--7dc41-ount-are-buttons-in-one-row-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--7dc41-ount-are-buttons-in-one-row-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-e8fd3f0dcb15a84240d1",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 65,
              "column": 9
            },
            {
              "title": "signed out at 320px: Log in and Create an account are buttons in one row",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 382,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:03.879Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--8918a-ount-are-buttons-in-one-row-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--8918a-ount-are-buttons-in-one-row-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 391,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 224,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:04.720Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--8918a-ount-are-buttons-in-one-row-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--8918a-ount-are-buttons-in-one-row-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--8918a-ount-are-buttons-in-one-row-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--8918a-ount-are-buttons-in-one-row-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 402,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:67:7"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:05.654Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--8918a-ount-are-buttons-in-one-row-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--8918a-ount-are-buttons-in-one-row-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-5da6c1a3ca35936cab4d",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 65,
              "column": 9
            },
            {
              "title": "signed out: controls are shown locked and only offer sign-in",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 412,
                      "parallelIndex": 18,
                      "status": "failed",
                      "duration": 143,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:82:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:82:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:06.487Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--ee107-cked-and-only-offer-sign-in-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--ee107-cked-and-only-offer-sign-in-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 422,
                      "parallelIndex": 18,
                      "status": "timedOut",
                      "duration": 37112,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:82:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:07.306Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--ee107-cked-and-only-offer-sign-in-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--ee107-cked-and-only-offer-sign-in-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--ee107-cked-and-only-offer-sign-in-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 786,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 170,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:82:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:82:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:45.177Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--ee107-cked-and-only-offer-sign-in-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--ee107-cked-and-only-offer-sign-in-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-0d86a4cf589feeeec51e",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 81,
              "column": 7
            },
            {
              "title": "signed in: member controls work; area controls stay locked and offer Request access",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 804,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 181,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:97:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:97:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:46.134Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--a6c2b-ed-and-offer-Request-access-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--a6c2b-ed-and-offer-Request-access-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 821,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 269,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:97:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:97:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:47.023Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--a6c2b-ed-and-offer-Request-access-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--a6c2b-ed-and-offer-Request-access-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--a6c2b-ed-and-offer-Request-access-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--a6c2b-ed-and-offer-Request-access-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 838,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 167,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:97:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:97:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:48.003Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--a6c2b-ed-and-offer-Request-access-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--a6c2b-ed-and-offer-Request-access-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-af488c5deb8434e1716f",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 96,
              "column": 7
            },
            {
              "title": "entitled: the area control works",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 853,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 166,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:113:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:113:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:48.888Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--32980-tled-the-area-control-works-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--32980-tled-the-area-control-works-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 869,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 263,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:113:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:113:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:49.827Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--32980-tled-the-area-control-works-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--32980-tled-the-area-control-works-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--32980-tled-the-area-control-works-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--32980-tled-the-area-control-works-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 886,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 155,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:113:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:113:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:50.814Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--32980-tled-the-area-control-works-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--32980-tled-the-area-control-works-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-60a5cc8118857078ffcb",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 112,
              "column": 7
            },
            {
              "title": "entitlements open from Registered and never push the controls off the bar",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 899,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 170,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:120:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:120:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:51.678Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c3965-sh-the-controls-off-the-bar-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c3965-sh-the-controls-off-the-bar-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 911,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 257,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:120:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:120:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:52.676Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c3965-sh-the-controls-off-the-bar-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c3965-sh-the-controls-off-the-bar-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c3965-sh-the-controls-off-the-bar-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c3965-sh-the-controls-off-the-bar-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 927,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 158,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:120:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:120:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:53.628Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c3965-sh-the-controls-off-the-bar-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--c3965-sh-the-controls-off-the-bar-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-d6c93f7bcc18da1339a9",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 118,
              "column": 7
            },
            {
              "title": "Registered with nothing extra offers Request additional access",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 936,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 156,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:150:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:150:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:54.436Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--559fc-s-Request-additional-access-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--559fc-s-Request-additional-access-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 947,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 242,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:150:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:150:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:55.274Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--559fc-s-Request-additional-access-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--559fc-s-Request-additional-access-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--559fc-s-Request-additional-access-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--559fc-s-Request-additional-access-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 959,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 162,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:150:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:150:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:56.225Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--559fc-s-Request-additional-access-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--559fc-s-Request-additional-access-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-8fa4f7dd1d74c9ba7ac6",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 148,
              "column": 7
            },
            {
              "title": "controls registered after the bar rendered appear",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 969,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 134,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:161:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:161:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:57.049Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--41d5d-ter-the-bar-rendered-appear-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--41d5d-ter-the-bar-rendered-appear-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 978,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 199,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:161:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:161:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:57.810Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--41d5d-ter-the-bar-rendered-appear-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--41d5d-ter-the-bar-rendered-appear-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--41d5d-ter-the-bar-rendered-appear-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--41d5d-ter-the-bar-rendered-appear-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    },
                    {
                      "workerIndex": 986,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 156,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:161:5",
                        "location": {
                          "file": "/app/tests/ui/identity-bar.spec.ts",
                          "column": 14,
                          "line": 24
                        },
                        "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/whoami*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { enabled\u001b[33m:\u001b[39m \u001b[32m'true'\u001b[39m\u001b[33m,\u001b[39m email\u001b[33m,\u001b[39m elevated\u001b[33m:\u001b[39m \u001b[36mfalse\u001b[39m\u001b[33m,\u001b[39m entitlements } }))\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/auth/account/me*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { email\u001b[33m,\u001b[39m requests\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m agreement\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m granted\u001b[33m:\u001b[39m [] } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#auth-slot.ei-bar'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m }\n \u001b[90m 27 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/identity-bar.spec.ts",
                            "column": 14,
                            "line": 24
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  22 |   await page.route('**/auth/whoami*', r => r.fulfill({ json: { enabled: 'true', email, elevated: false, entitlements } }));\n  23 |   await page.route('**/auth/account/me*', r => r.fulfill({ json: { email, requests: [], agreement: null, granted: [] } }));\n> 24 |   await page.goto('/');\n     |              ^\n  25 |   await expect(page.locator('#auth-slot.ei-bar')).toBeVisible();\n  26 | }\n  27 |\n    at open (/app/tests/ui/identity-bar.spec.ts:24:14)\n    at /app/tests/ui/identity-bar.spec.ts:161:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:58.605Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--41d5d-ter-the-bar-rendered-appear-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/identity-bar-identity-bar--41d5d-ter-the-bar-rendered-appear-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/identity-bar.spec.ts",
                        "column": 14,
                        "line": 24
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "02f484a7e876cce0644e-c4d66bbb8ebe94ba4b0d",
              "file": "tests/ui/identity-bar.spec.ts",
              "line": 159,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/layout.spec.ts",
      "file": "tests/ui/layout.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "landing page layout",
          "file": "tests/ui/layout.spec.ts",
          "line": 35,
          "column": 6,
          "specs": [
            {
              "title": "/offices/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 19,
                      "parallelIndex": 19,
                      "status": "timedOut",
                      "duration": 40037,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.235Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f9a0f--loads-with-correct-heading-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 52,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 344,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:04.008Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f9a0f--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f9a0f--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f9a0f--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f9a0f--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 64,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 240,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.123Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f9a0f--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f9a0f--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-b103aceb46d9e33c607c",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/candidates/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 84,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 247,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.259Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-e1535--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-e1535--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 114,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 446,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.355Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-e1535--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-e1535--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-e1535--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-e1535--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 149,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 223,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.752Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-e1535--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-e1535--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-501813caa83ee6ffddae",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/committees/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 174,
                      "parallelIndex": 19,
                      "status": "timedOut",
                      "duration": 40047,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.887Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f8e77--loads-with-correct-heading-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 202,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 11631,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.655Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f8e77--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f8e77--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f8e77--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f8e77--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 218,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 168,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:03.029Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f8e77--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-f8e77--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-de18f184843b0fae568d",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/districts/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 231,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 152,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:03.885Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-35cf0--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-35cf0--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 243,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 240,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:04.776Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-35cf0--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-35cf0--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-35cf0--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-35cf0--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 256,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 166,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:05.720Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-35cf0--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-35cf0--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-1f26499e48b19f3c5079",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/elections/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 270,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 172,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:06.644Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-95621--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-95621--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 286,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 274,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:07.583Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-95621--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-95621--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-95621--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-95621--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 303,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 160,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:08.638Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-95621--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-95621--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-199799185e5210591ab4",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/employers/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 318,
                      "parallelIndex": 19,
                      "status": "timedOut",
                      "duration": 40039,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:09.483Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-7159b--loads-with-correct-heading-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 358,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 11477,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:50.118Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-7159b--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-7159b--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-7159b--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-7159b--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 368,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:02.352Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-7159b--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-7159b--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-2140f49bb861fe7bbe46",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/individuals/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 377,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 143,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:03.259Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-b60e0--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-b60e0--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 386,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 215,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:04.157Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-b60e0--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-b60e0--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-b60e0--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-b60e0--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 395,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 152,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:05.105Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-b60e0--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-b60e0--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-a633dc3b7a23c4f18ee7",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/parties/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 408,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:05.959Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-93081--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-93081--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 418,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 245,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:06.768Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-93081--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-93081--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-93081--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-93081--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 429,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 19789,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:07.692Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-93081--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-93081--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-4e481b7b1ad5efb291d8",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/vendors/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 445,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 143,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:28.074Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-3b19b--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-3b19b--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 452,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 219,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:28.959Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-3b19b--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-3b19b--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-3b19b--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-3b19b--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 462,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 147,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:29.843Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-3b19b--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-3b19b--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-88452699ffd4b556e70b",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/counties/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 473,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:30.734Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-00485--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-00485--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 484,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 283,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:31.635Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-00485--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-00485--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-00485--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-00485--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 512,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 203,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:32.767Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-00485--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-00485--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-6758f7f476db88956d39",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/places/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 533,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 179,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:33.729Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-places-loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-places-loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 556,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 337,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:34.718Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-places-loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-places-loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-places-loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-places-loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 588,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 199,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:35.908Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-places-loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-places-loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-f549dc77f989ce03913a",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/precincts/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 608,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 190,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:36.900Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-03eaf--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-03eaf--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 629,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 295,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.846Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-03eaf--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-03eaf--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-03eaf--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-03eaf--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 654,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 175,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.945Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-03eaf--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-03eaf--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-2b94cf26eef28c61b95a",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/tracts/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 673,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 193,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:39.937Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-tracts-loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-tracts-loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 697,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 337,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:40.905Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-tracts-loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-tracts-loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-tracts-loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-tracts-loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 722,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 183,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.085Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-tracts-loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-tracts-loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-6f56d03ec531675b43bb",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/postalcodes/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 743,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 166,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:43.024Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-2fbed--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-2fbed--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 762,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 302,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:43.947Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-2fbed--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-2fbed--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-2fbed--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-2fbed--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 785,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:45.142Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-2fbed--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-2fbed--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-cec77f76cc935aa28244",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/blocks/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 803,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 148,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:46.100Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-blocks-loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-blocks-loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 819,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 244,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:47.035Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-blocks-loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-blocks-loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-blocks-loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-blocks-loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 837,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 151,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:38:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:47.971Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-blocks-loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-blocks-loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-c7888d679ec3d65988bb",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/states/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 852,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 170,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:48.885Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-states-loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-states-loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 868,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 262,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:49.771Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-states-loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-states-loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-states-loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-states-loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 883,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 162,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/states/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/states/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:50.745Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-states-loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-states-loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-cb2a9d49b945fcadff5b",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/datasources/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 898,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 161,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:51.595Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-d7e7f--loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-d7e7f--loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 914,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 264,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:52.712Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-d7e7f--loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-d7e7f--loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-d7e7f--loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-d7e7f--loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 929,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/datasources/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/datasources/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:53.667Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-d7e7f--loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-d7e7f--loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-e15a22bb0b0e0b8702da",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            },
            {
              "title": "/ loads with correct heading",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 940,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 156,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:54.555Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-loads-with-correct-heading-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-loads-with-correct-heading-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 951,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 246,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:55.385Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-loads-with-correct-heading-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-loads-with-correct-heading-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-loads-with-correct-heading-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-loads-with-correct-heading-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 962,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:39:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m     test(\u001b[32m`${path} loads with correct heading`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 38 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 39
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  37 |     test(`${path} loads with correct heading`, async ({ page, request }) => {\n  38 |       if (premium) await skipIfPremiumGated(request, path);\n> 39 |       await page.goto(path);\n     |                  ^\n  40 |       await expect(page.locator('h1')).toContainText(heading);\n  41 |     });\n  42 |   }\n    at /app/tests/ui/layout.spec.ts:39:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:56.320Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-loads-with-correct-heading-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-landing-page-layout-loads-with-correct-heading-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-b3bb4507b2ed87666026",
              "file": "tests/ui/layout.spec.ts",
              "line": 37,
              "column": 9
            }
          ]
        },
        {
          "title": "entity index layout - search UI above results",
          "file": "tests/ui/layout.spec.ts",
          "line": 45,
          "column": 6,
          "specs": [
            {
              "title": "/offices/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 972,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 142,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:57.132Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-d0829--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-d0829--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 981,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 245,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:57.941Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-d0829--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-d0829--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-d0829--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-d0829--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 988,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 135,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:58.822Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-d0829--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-d0829--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-2f959d27c43f09851847",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/candidates/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 994,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 137,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:59.565Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-5cf92--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-5cf92--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1000,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 206,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:00.316Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-5cf92--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-5cf92--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-5cf92--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-5cf92--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1006,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 142,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:01.174Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-5cf92--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-5cf92--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-00076dbe4f0c22864078",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/committees/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1012,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 137,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:01.924Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-f16d0--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-f16d0--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1017,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 208,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:02.662Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-f16d0--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-f16d0--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-f16d0--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-f16d0--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1022,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 101,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:03.491Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-f16d0--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-0fe38d5384d0548662ad",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/districts/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1029,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 129,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:04.208Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59044--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59044--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1034,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 206,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:04.943Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59044--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59044--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59044--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59044--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1039,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 152,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:05.785Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59044--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59044--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-5648e4a82b3c14f4b29a",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/elections/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1046,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 131,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:06.535Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-069e9--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-069e9--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1050,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 215,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:07.289Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-069e9--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-069e9--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-069e9--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-069e9--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1054,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 149,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:08.157Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-069e9--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-069e9--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-baff7226ae19ee1c41c4",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/employers/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1058,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 125,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:08.912Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0759c--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0759c--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1061,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 242,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:09.651Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0759c--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0759c--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0759c--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0759c--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1064,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 128,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:10.533Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0759c--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0759c--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-f8acbc052c6aa8109879",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/individuals/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1067,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 142,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:11.254Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-37753--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-37753--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 1070,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 202,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:11.967Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-37753--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-37753--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-37753--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-37753--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 1073,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 141,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:12.793Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-37753--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-37753--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-012ad5df38578222c51a",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/parties/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1076,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:13.570Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-06b7d--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-06b7d--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1079,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 203,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:14.320Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-06b7d--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-06b7d--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-06b7d--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-06b7d--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1082,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 129,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:15.142Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-06b7d--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-06b7d--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-c3c8681cb3628cf835f3",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/vendors/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1085,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 135,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:15.852Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0b4b4--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0b4b4--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1088,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 222,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:16.568Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0b4b4--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0b4b4--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0b4b4--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0b4b4--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1091,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 132,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:17.420Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0b4b4--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-0b4b4--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-fdfc262d12f616388ed5",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/counties/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1094,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 145,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:18.143Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-cc2cb--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-cc2cb--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1097,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 233,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:18.900Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-cc2cb--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-cc2cb--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-cc2cb--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-cc2cb--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1100,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 134,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/counties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/counties/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:19.786Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-cc2cb--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-cc2cb--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-fd21bba6e2c81307bfbb",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/places/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1103,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 141,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:20.514Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-03981--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-03981--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1106,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 198,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:21.246Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-03981--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-03981--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-03981--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-03981--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1109,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 128,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/places/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/places/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:22.074Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-03981--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-03981--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-dc93ee5eb496af9f132d",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/precincts/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1108,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 132,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:22.322Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-b2a82--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-b2a82--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1111,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 198,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:22.969Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-b2a82--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-b2a82--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-b2a82--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-b2a82--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1113,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 141,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:23.780Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-b2a82--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-b2a82--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-b398a97535a50c3906a3",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/tracts/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1115,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 138,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:24.492Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-819d4--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-819d4--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1117,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 222,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:25.210Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-819d4--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-819d4--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-819d4--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-819d4--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1119,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 139,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:26.046Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-819d4--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-819d4--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-f1e37aa61dc45b736499",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/postalcodes/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1121,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 182,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:26.779Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-7b0e8--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-7b0e8--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1123,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 234,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:27.537Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-7b0e8--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-7b0e8--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-7b0e8--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-7b0e8--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    },
                    {
                      "workerIndex": 1125,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 129,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:49:18",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 18,
                          "line": 49
                        },
                        "snippet": "\u001b[0m \u001b[90m 47 |\u001b[39m     test(\u001b[32m`${path} has no static search description in main`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 48 |\u001b[39m       \u001b[36mif\u001b[39m (premium) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 49 |\u001b[39m       \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                  \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 50 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(heading)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n \u001b[90m 52 |\u001b[39m       \u001b[90m// The <main> element should have no <section> or <p> children\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 18,
                            "line": 49
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/\", waiting until \"load\"\u001b[22m\n\n\n  47 |     test(`${path} has no static search description in main`, async ({ page, request }) => {\n  48 |       if (premium) await skipIfPremiumGated(request, path);\n> 49 |       await page.goto(path);\n     |                  ^\n  50 |       await expect(page.locator('h1')).toContainText(heading);\n  51 |\n  52 |       // The <main> element should have no <section> or <p> children\n    at /app/tests/ui/layout.spec.ts:49:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:28.389Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-7b0e8--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-7b0e8--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 18,
                        "line": 49
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-c665f4d02c3670bb60f1",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "/blocks/ has no static search description in main",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1127,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 148,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:29.098Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-3f3cc--search-description-in-main-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-3f3cc--search-description-in-main-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 1129,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 211,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:29.819Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-3f3cc--search-description-in-main-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-3f3cc--search-description-in-main-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-3f3cc--search-description-in-main-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-3f3cc--search-description-in-main-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 1130,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 117,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/layout.spec.ts:48:44"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:30.646Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-3f3cc--search-description-in-main-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-3f3cc--search-description-in-main-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-a296b365c921f935f0ac",
              "file": "tests/ui/layout.spec.ts",
              "line": 47,
              "column": 9
            },
            {
              "title": "offices - search container appears before main in DOM",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1131,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 152,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:60:16",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 16,
                          "line": 60
                        },
                        "snippet": "\u001b[0m \u001b[90m 58 |\u001b[39m\n \u001b[90m 59 |\u001b[39m   test(\u001b[32m'offices - search container appears before main in DOM'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 60 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/offices/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 62 |\u001b[39m\n \u001b[90m 63 |\u001b[39m     \u001b[90m// Verify search container is a sibling before <main>, not inside it\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 16,
                            "line": 60
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  58 |\n  59 |   test('offices - search container appears before main in DOM', async ({ page }) => {\n> 60 |     await page.goto('/offices/');\n     |                ^\n  61 |     await expect(page.locator('.entity-search-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  62 |\n  63 |     // Verify search container is a sibling before <main>, not inside it\n    at /app/tests/ui/layout.spec.ts:60:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:31.348Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59504--appears-before-main-in-DOM-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59504--appears-before-main-in-DOM-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 16,
                        "line": 60
                      }
                    },
                    {
                      "workerIndex": 1132,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 194,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:60:16",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 16,
                          "line": 60
                        },
                        "snippet": "\u001b[0m \u001b[90m 58 |\u001b[39m\n \u001b[90m 59 |\u001b[39m   test(\u001b[32m'offices - search container appears before main in DOM'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 60 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/offices/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 62 |\u001b[39m\n \u001b[90m 63 |\u001b[39m     \u001b[90m// Verify search container is a sibling before <main>, not inside it\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 16,
                            "line": 60
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  58 |\n  59 |   test('offices - search container appears before main in DOM', async ({ page }) => {\n> 60 |     await page.goto('/offices/');\n     |                ^\n  61 |     await expect(page.locator('.entity-search-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  62 |\n  63 |     // Verify search container is a sibling before <main>, not inside it\n    at /app/tests/ui/layout.spec.ts:60:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:32.075Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59504--appears-before-main-in-DOM-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59504--appears-before-main-in-DOM-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59504--appears-before-main-in-DOM-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59504--appears-before-main-in-DOM-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 16,
                        "line": 60
                      }
                    },
                    {
                      "workerIndex": 1133,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 132,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:60:16",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 16,
                          "line": 60
                        },
                        "snippet": "\u001b[0m \u001b[90m 58 |\u001b[39m\n \u001b[90m 59 |\u001b[39m   test(\u001b[32m'offices - search container appears before main in DOM'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 60 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/offices/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 62 |\u001b[39m\n \u001b[90m 63 |\u001b[39m     \u001b[90m// Verify search container is a sibling before <main>, not inside it\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 16,
                            "line": 60
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  58 |\n  59 |   test('offices - search container appears before main in DOM', async ({ page }) => {\n> 60 |     await page.goto('/offices/');\n     |                ^\n  61 |     await expect(page.locator('.entity-search-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  62 |\n  63 |     // Verify search container is a sibling before <main>, not inside it\n    at /app/tests/ui/layout.spec.ts:60:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:32.904Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59504--appears-before-main-in-DOM-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-59504--appears-before-main-in-DOM-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 16,
                        "line": 60
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-025db2696f459ca9ce93",
              "file": "tests/ui/layout.spec.ts",
              "line": 59,
              "column": 7
            },
            {
              "title": "candidates - search container appears before main in DOM",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1134,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 133,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:75:16",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 16,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m\n \u001b[90m 74 |\u001b[39m   test(\u001b[32m'candidates - search container appears before main in DOM'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/candidates/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m\n \u001b[90m 78 |\u001b[39m     \u001b[36mconst\u001b[39m searchIsBeforeMain \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mevaluate(() \u001b[33m=>\u001b[39m {\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 16,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  73 |\n  74 |   test('candidates - search container appears before main in DOM', async ({ page }) => {\n> 75 |     await page.goto('/candidates/');\n     |                ^\n  76 |     await expect(page.locator('.entity-search-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  77 |\n  78 |     const searchIsBeforeMain = await page.evaluate(() => {\n    at /app/tests/ui/layout.spec.ts:75:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:33.630Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-729a8--appears-before-main-in-DOM-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-729a8--appears-before-main-in-DOM-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 16,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 1135,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 212,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:75:16",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 16,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m\n \u001b[90m 74 |\u001b[39m   test(\u001b[32m'candidates - search container appears before main in DOM'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/candidates/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m\n \u001b[90m 78 |\u001b[39m     \u001b[36mconst\u001b[39m searchIsBeforeMain \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mevaluate(() \u001b[33m=>\u001b[39m {\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 16,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  73 |\n  74 |   test('candidates - search container appears before main in DOM', async ({ page }) => {\n> 75 |     await page.goto('/candidates/');\n     |                ^\n  76 |     await expect(page.locator('.entity-search-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  77 |\n  78 |     const searchIsBeforeMain = await page.evaluate(() => {\n    at /app/tests/ui/layout.spec.ts:75:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:34.355Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-729a8--appears-before-main-in-DOM-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-729a8--appears-before-main-in-DOM-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-729a8--appears-before-main-in-DOM-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-729a8--appears-before-main-in-DOM-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 16,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 1136,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/layout.spec.ts:75:16",
                        "location": {
                          "file": "/app/tests/ui/layout.spec.ts",
                          "column": 16,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m\n \u001b[90m 74 |\u001b[39m   test(\u001b[32m'candidates - search container appears before main in DOM'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/candidates/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-container'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m\n \u001b[90m 78 |\u001b[39m     \u001b[36mconst\u001b[39m searchIsBeforeMain \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mevaluate(() \u001b[33m=>\u001b[39m {\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/layout.spec.ts",
                            "column": 16,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  73 |\n  74 |   test('candidates - search container appears before main in DOM', async ({ page }) => {\n> 75 |     await page.goto('/candidates/');\n     |                ^\n  76 |     await expect(page.locator('.entity-search-container')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  77 |\n  78 |     const searchIsBeforeMain = await page.evaluate(() => {\n    at /app/tests/ui/layout.spec.ts:75:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:35.189Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-729a8--appears-before-main-in-DOM-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/layout-entity-index-layout-729a8--appears-before-main-in-DOM-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/layout.spec.ts",
                        "column": 16,
                        "line": 75
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9f98fd8c8d1538f5ebbb-fc645687ac9b64d16a9d",
              "file": "tests/ui/layout.spec.ts",
              "line": 74,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/leaf-details.spec.ts",
      "file": "tests/ui/leaf-details.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "leaf collection client-side detail pages",
          "file": "tests/ui/leaf-details.spec.ts",
          "line": 69,
          "column": 6,
          "specs": [
            {
              "title": "individual detail renders a bounded contribution profile",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 20,
                      "parallelIndex": 20,
                      "status": "timedOut",
                      "duration": 30100,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:71:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.076Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c5a9d-ounded-contribution-profile-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c5a9d-ounded-contribution-profile-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 43,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 11570,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:71:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:71:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.945Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c5a9d-ounded-contribution-profile-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c5a9d-ounded-contribution-profile-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c5a9d-ounded-contribution-profile-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c5a9d-ounded-contribution-profile-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 93,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 191,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:71:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:71:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:06.419Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c5a9d-ounded-contribution-profile-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c5a9d-ounded-contribution-profile-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-a2db653e74557c471e56",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 70,
              "column": 7
            },
            {
              "title": "employer detail renders totals and a bounded donor list below threshold",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 121,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 250,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\", waiting until \"load\"\u001b[22m\n\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:91:26",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 31,
                          "line": 52
                        },
                        "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(sample\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.path} should serve the baked shell`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(sample\u001b[33m.\u001b[39mheading\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 31,
                            "line": 52
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\", waiting until \"load\"\u001b[22m\n\n\n  50 |   });\n  51 |\n> 52 |   const response = await page.goto(sample.path);\n     |                               ^\n  53 |   expect(response?.status(), `${sample.path} should serve the baked shell`).toBe(200);\n  54 |   await expect(page.locator('.leaf-detail-page h1')).toHaveText(sample.heading, { timeout: DATA_LOAD_TIMEOUT });\n  55 |\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:91:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:07.517Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-26705--donor-list-below-threshold-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-26705--donor-list-below-threshold-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 31,
                        "line": 52
                      }
                    },
                    {
                      "workerIndex": 141,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 389,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\", waiting until \"load\"\u001b[22m\n\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:91:26",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 31,
                          "line": 52
                        },
                        "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(sample\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.path} should serve the baked shell`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(sample\u001b[33m.\u001b[39mheading\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 31,
                            "line": 52
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\", waiting until \"load\"\u001b[22m\n\n\n  50 |   });\n  51 |\n> 52 |   const response = await page.goto(sample.path);\n     |                               ^\n  53 |   expect(response?.status(), `${sample.path} should serve the baked shell`).toBe(200);\n  54 |   await expect(page.locator('.leaf-detail-page h1')).toHaveText(sample.heading, { timeout: DATA_LOAD_TIMEOUT });\n  55 |\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:91:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:08.648Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-26705--donor-list-below-threshold-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-26705--donor-list-below-threshold-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-26705--donor-list-below-threshold-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-26705--donor-list-below-threshold-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 31,
                        "line": 52
                      }
                    },
                    {
                      "workerIndex": 178,
                      "parallelIndex": 20,
                      "status": "timedOut",
                      "duration": 40043,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 31,
                            "line": 52
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/5f9a1727-2225-3699-685b-8fb15c17c8f3/\", waiting until \"load\"\u001b[22m\n\n\n  50 |   });\n  51 |\n> 52 |   const response = await page.goto(sample.path);\n     |                               ^\n  53 |   expect(response?.status(), `${sample.path} should serve the baked shell`).toBe(200);\n  54 |   await expect(page.locator('.leaf-detail-page h1')).toHaveText(sample.heading, { timeout: DATA_LOAD_TIMEOUT });\n  55 |\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:91:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:09.912Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-26705--donor-list-below-threshold-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-f7566958d39b4e43ad90",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 89,
              "column": 7
            },
            {
              "title": "vendor detail renders totals and committee clients, ranked or edge-sorted",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 203,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 11398,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\", waiting until \"load\"\u001b[22m\n\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:99:26",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 31,
                          "line": 52
                        },
                        "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(sample\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.path} should serve the baked shell`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(sample\u001b[33m.\u001b[39mheading\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 31,
                            "line": 52
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\", waiting until \"load\"\u001b[22m\n\n\n  50 |   });\n  51 |\n> 52 |   const response = await page.goto(sample.path);\n     |                               ^\n  53 |   expect(response?.status(), `${sample.path} should serve the baked shell`).toBe(200);\n  54 |   await expect(page.locator('.leaf-detail-page h1')).toHaveText(sample.heading, { timeout: DATA_LOAD_TIMEOUT });\n  55 |\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:99:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:50.711Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-1a58b-ients-ranked-or-edge-sorted-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-1a58b-ients-ranked-or-edge-sorted-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 31,
                        "line": 52
                      }
                    },
                    {
                      "workerIndex": 213,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 251,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\", waiting until \"load\"\u001b[22m\n\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:99:26",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 31,
                          "line": 52
                        },
                        "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(sample\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.path} should serve the baked shell`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(sample\u001b[33m.\u001b[39mheading\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 31,
                            "line": 52
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\", waiting until \"load\"\u001b[22m\n\n\n  50 |   });\n  51 |\n> 52 |   const response = await page.goto(sample.path);\n     |                               ^\n  53 |   expect(response?.status(), `${sample.path} should serve the baked shell`).toBe(200);\n  54 |   await expect(page.locator('.leaf-detail-page h1')).toHaveText(sample.heading, { timeout: DATA_LOAD_TIMEOUT });\n  55 |\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:99:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:02.820Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-1a58b-ients-ranked-or-edge-sorted-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-1a58b-ients-ranked-or-edge-sorted-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-1a58b-ients-ranked-or-edge-sorted-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-1a58b-ients-ranked-or-edge-sorted-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 31,
                        "line": 52
                      }
                    },
                    {
                      "workerIndex": 227,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 172,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\", waiting until \"load\"\u001b[22m\n\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:99:26",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 31,
                          "line": 52
                        },
                        "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(sample\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.path} should serve the baked shell`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(sample\u001b[33m.\u001b[39mheading\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 31,
                            "line": 52
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/a2e9cfea-dee0-2824-46f2-843916cd2199/\", waiting until \"load\"\u001b[22m\n\n\n  50 |   });\n  51 |\n> 52 |   const response = await page.goto(sample.path);\n     |                               ^\n  53 |   expect(response?.status(), `${sample.path} should serve the baked shell`).toBe(200);\n  54 |   await expect(page.locator('.leaf-detail-page h1')).toHaveText(sample.heading, { timeout: DATA_LOAD_TIMEOUT });\n  55 |\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:99:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:03.824Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-1a58b-ients-ranked-or-edge-sorted-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-1a58b-ients-ranked-or-edge-sorted-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 31,
                        "line": 52
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-4a09f332855f839e222b",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 98,
              "column": 7
            },
            {
              "title": "block detail renders voter data and bounded geography links",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 241,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 153,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:119:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:119:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:04.730Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-50a84-and-bounded-geography-links-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-50a84-and-bounded-geography-links-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 252,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 269,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:119:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:119:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:05.648Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-50a84-and-bounded-geography-links-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-50a84-and-bounded-geography-links-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-50a84-and-bounded-geography-links-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-50a84-and-bounded-geography-links-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 272,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 145,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:119:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:119:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:06.698Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-50a84-and-bounded-geography-links-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-50a84-and-bounded-geography-links-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-8e2fbaa51cd3bb771d1c",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 118,
              "column": 7
            },
            {
              "title": "block map links (/blocks/<geoid>/) resolve to the block by its derived id",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 289,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:128:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:128:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:07.608Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-3e05c-the-block-by-its-derived-id-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-3e05c-the-block-by-its-derived-id-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 301,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 234,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:128:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:128:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:08.616Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-3e05c-the-block-by-its-derived-id-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-3e05c-the-block-by-its-derived-id-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-3e05c-the-block-by-its-derived-id-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-3e05c-the-block-by-its-derived-id-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 319,
                      "parallelIndex": 20,
                      "status": "timedOut",
                      "duration": 30127,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:128:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:09.535Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-3e05c-the-block-by-its-derived-id-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-3e05c-the-block-by-its-derived-id-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-e2fa35759bb0fb651ac4",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 127,
              "column": 7
            },
            {
              "title": "precinct detail bootstraps directly and renders results",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 335,
                      "parallelIndex": 20,
                      "status": "timedOut",
                      "duration": 40048,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 31,
                            "line": 52
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\", waiting until \"load\"\u001b[22m\n\n\n  50 |   });\n  51 |\n> 52 |   const response = await page.goto(sample.path);\n     |                               ^\n  53 |   expect(response?.status(), `${sample.path} should serve the baked shell`).toBe(200);\n  54 |   await expect(page.locator('.leaf-detail-page h1')).toHaveText(sample.heading, { timeout: DATA_LOAD_TIMEOUT });\n  55 |\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:136:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:40.610Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-ad0bd-irectly-and-renders-results-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 441,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 7442,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\", waiting until \"load\"\u001b[22m\n\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:136:26",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 31,
                          "line": 52
                        },
                        "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(sample\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.path} should serve the baked shell`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(sample\u001b[33m.\u001b[39mheading\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 31,
                            "line": 52
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\", waiting until \"load\"\u001b[22m\n\n\n  50 |   });\n  51 |\n> 52 |   const response = await page.goto(sample.path);\n     |                               ^\n  53 |   expect(response?.status(), `${sample.path} should serve the baked shell`).toBe(200);\n  54 |   await expect(page.locator('.leaf-detail-page h1')).toHaveText(sample.heading, { timeout: DATA_LOAD_TIMEOUT });\n  55 |\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:136:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:21.281Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-ad0bd-irectly-and-renders-results-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-ad0bd-irectly-and-renders-results-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-ad0bd-irectly-and-renders-results-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-ad0bd-irectly-and-renders-results-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 31,
                        "line": 52
                      }
                    },
                    {
                      "workerIndex": 457,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 129,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\", waiting until \"load\"\u001b[22m\n\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:136:26",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 31,
                          "line": 52
                        },
                        "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(sample\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${sample.path} should serve the baked shell`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(sample\u001b[33m.\u001b[39mheading\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 31,
                            "line": 52
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/precincts/2ff858ff-68ec-a17d-a564-4e71054573c6/\", waiting until \"load\"\u001b[22m\n\n\n  50 |   });\n  51 |\n> 52 |   const response = await page.goto(sample.path);\n     |                               ^\n  53 |   expect(response?.status(), `${sample.path} should serve the baked shell`).toBe(200);\n  54 |   await expect(page.locator('.leaf-detail-page h1')).toHaveText(sample.heading, { timeout: DATA_LOAD_TIMEOUT });\n  55 |\n    at openLeafDetail (/app/tests/ui/leaf-details.spec.ts:52:31)\n    at /app/tests/ui/leaf-details.spec.ts:136:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:29.425Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-ad0bd-irectly-and-renders-results-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-ad0bd-irectly-and-renders-results-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 31,
                        "line": 52
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-498f148b1bb8c8ca5043",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 135,
              "column": 7
            },
            {
              "title": "tract detail remains client-rendered under the generalized leaf route",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 467,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/48453000101/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/48453000101/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/48453000101/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/48453000101/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:152:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 152
                        },
                        "snippet": "\u001b[0m \u001b[90m 150 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 151 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 152 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/tracts/48453000101/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 153 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 154 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'header h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Census Tract 1.01'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 155 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page)\u001b[33m.\u001b[39mtoHaveTitle(\u001b[35m/elect\\.info$/i\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 152
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/48453000101/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/48453000101/\", waiting until \"load\"\u001b[22m\n\n\n  150 |     });\n  151 |\n> 152 |     const response = await page.goto('/tracts/48453000101/');\n      |                                 ^\n  153 |     expect(response?.status()).toBe(200);\n  154 |     await expect(page.locator('header h1')).toContainText('Census Tract 1.01', { timeout: DATA_LOAD_TIMEOUT });\n  155 |     await expect(page).toHaveTitle(/elect\\.info$/i);\n    at /app/tests/ui/leaf-details.spec.ts:152:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:30.246Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-6e33d--the-generalized-leaf-route-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-6e33d--the-generalized-leaf-route-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 152
                      }
                    },
                    {
                      "workerIndex": 478,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 258,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/48453000101/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/48453000101/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/48453000101/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/48453000101/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:152:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 152
                        },
                        "snippet": "\u001b[0m \u001b[90m 150 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 151 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 152 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/tracts/48453000101/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 153 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 154 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'header h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Census Tract 1.01'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 155 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page)\u001b[33m.\u001b[39mtoHaveTitle(\u001b[35m/elect\\.info$/i\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 152
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/48453000101/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/48453000101/\", waiting until \"load\"\u001b[22m\n\n\n  150 |     });\n  151 |\n> 152 |     const response = await page.goto('/tracts/48453000101/');\n      |                                 ^\n  153 |     expect(response?.status()).toBe(200);\n  154 |     await expect(page.locator('header h1')).toContainText('Census Tract 1.01', { timeout: DATA_LOAD_TIMEOUT });\n  155 |     await expect(page).toHaveTitle(/elect\\.info$/i);\n    at /app/tests/ui/leaf-details.spec.ts:152:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:31.042Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-6e33d--the-generalized-leaf-route-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-6e33d--the-generalized-leaf-route-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-6e33d--the-generalized-leaf-route-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-6e33d--the-generalized-leaf-route-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 152
                      }
                    },
                    {
                      "workerIndex": 496,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 174,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/48453000101/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/48453000101/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/48453000101/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/48453000101/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:152:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 152
                        },
                        "snippet": "\u001b[0m \u001b[90m 150 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 151 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 152 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/tracts/48453000101/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 153 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 154 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'header h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Census Tract 1.01'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 155 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page)\u001b[33m.\u001b[39mtoHaveTitle(\u001b[35m/elect\\.info$/i\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 152
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/tracts/48453000101/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/tracts/48453000101/\", waiting until \"load\"\u001b[22m\n\n\n  150 |     });\n  151 |\n> 152 |     const response = await page.goto('/tracts/48453000101/');\n      |                                 ^\n  153 |     expect(response?.status()).toBe(200);\n  154 |     await expect(page.locator('header h1')).toContainText('Census Tract 1.01', { timeout: DATA_LOAD_TIMEOUT });\n  155 |     await expect(page).toHaveTitle(/elect\\.info$/i);\n    at /app/tests/ui/leaf-details.spec.ts:152:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:32.087Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-6e33d--the-generalized-leaf-route-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-6e33d--the-generalized-leaf-route-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 152
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-943e9e10b1959a53f29b",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 144,
              "column": 7
            },
            {
              "title": "hub employer renders totals without issuing a live connection query",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 518,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 162,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/hub%20test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/hub%20test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/hub%20test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/hub%20test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:200:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 200
                        },
                        "snippet": "\u001b[0m \u001b[90m 198 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 199 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 200 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/employers/hub%20test/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 201 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 202 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'HUB EMPLOYER'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 203 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-hub-deferred'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'50,000 related records'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 200
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/hub%20test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/hub%20test/\", waiting until \"load\"\u001b[22m\n\n\n  198 |     });\n  199 |\n> 200 |     const response = await page.goto('/employers/hub%20test/');\n      |                                 ^\n  201 |     expect(response?.status()).toBe(200);\n  202 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('HUB EMPLOYER', { timeout: DATA_LOAD_TIMEOUT });\n  203 |     await expect(page.locator('.leaf-hub-deferred')).toContainText('50,000 related records');\n    at /app/tests/ui/leaf-details.spec.ts:200:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:33.049Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-84944-ing-a-live-connection-query-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-84944-ing-a-live-connection-query-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 200
                      }
                    },
                    {
                      "workerIndex": 540,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 284,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/hub%20test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/hub%20test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/hub%20test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/hub%20test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:200:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 200
                        },
                        "snippet": "\u001b[0m \u001b[90m 198 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 199 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 200 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/employers/hub%20test/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 201 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 202 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'HUB EMPLOYER'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 203 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-hub-deferred'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'50,000 related records'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 200
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/hub%20test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/hub%20test/\", waiting until \"load\"\u001b[22m\n\n\n  198 |     });\n  199 |\n> 200 |     const response = await page.goto('/employers/hub%20test/');\n      |                                 ^\n  201 |     expect(response?.status()).toBe(200);\n  202 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('HUB EMPLOYER', { timeout: DATA_LOAD_TIMEOUT });\n  203 |     await expect(page.locator('.leaf-hub-deferred')).toContainText('50,000 related records');\n    at /app/tests/ui/leaf-details.spec.ts:200:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:34.013Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-84944-ing-a-live-connection-query-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-84944-ing-a-live-connection-query-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-84944-ing-a-live-connection-query-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-84944-ing-a-live-connection-query-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 200
                      }
                    },
                    {
                      "workerIndex": 570,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 210,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/hub%20test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/hub%20test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/hub%20test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/hub%20test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:200:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 200
                        },
                        "snippet": "\u001b[0m \u001b[90m 198 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 199 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 200 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/employers/hub%20test/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 201 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 202 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'HUB EMPLOYER'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 203 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-hub-deferred'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'50,000 related records'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 200
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/hub%20test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/hub%20test/\", waiting until \"load\"\u001b[22m\n\n\n  198 |     });\n  199 |\n> 200 |     const response = await page.goto('/employers/hub%20test/');\n      |                                 ^\n  201 |     expect(response?.status()).toBe(200);\n  202 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('HUB EMPLOYER', { timeout: DATA_LOAD_TIMEOUT });\n  203 |     await expect(page.locator('.leaf-hub-deferred')).toContainText('50,000 related records');\n    at /app/tests/ui/leaf-details.spec.ts:200:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:35.130Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-84944-ing-a-live-connection-query-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-84944-ing-a-live-connection-query-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 200
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-a8b9358953cbb0b8c0a9",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 164,
              "column": 7
            },
            {
              "title": "hub vendor resolves an alias without issuing a live connection query",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 593,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 179,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/consulting/hub-alias/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/consulting/hub-alias/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/consulting/hub-alias/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/consulting/hub-alias/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:265:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 265
                        },
                        "snippet": "\u001b[0m \u001b[90m 263 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 264 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 265 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/consulting/hub-alias/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 266 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 267 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'HUB VENDOR'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 268 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-hub-deferred'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'50,000 related records'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 265
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/consulting/hub-alias/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/consulting/hub-alias/\", waiting until \"load\"\u001b[22m\n\n\n  263 |     });\n  264 |\n> 265 |     const response = await page.goto('/vendors/consulting/hub-alias/');\n      |                                 ^\n  266 |     expect(response?.status()).toBe(200);\n  267 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('HUB VENDOR', { timeout: DATA_LOAD_TIMEOUT });\n  268 |     await expect(page.locator('.leaf-hub-deferred')).toContainText('50,000 related records');\n    at /app/tests/ui/leaf-details.spec.ts:265:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:36.141Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-86be8-ing-a-live-connection-query-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-86be8-ing-a-live-connection-query-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 265
                      }
                    },
                    {
                      "workerIndex": 615,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 297,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/consulting/hub-alias/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/consulting/hub-alias/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/consulting/hub-alias/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/consulting/hub-alias/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:265:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 265
                        },
                        "snippet": "\u001b[0m \u001b[90m 263 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 264 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 265 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/consulting/hub-alias/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 266 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 267 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'HUB VENDOR'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 268 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-hub-deferred'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'50,000 related records'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 265
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/consulting/hub-alias/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/consulting/hub-alias/\", waiting until \"load\"\u001b[22m\n\n\n  263 |     });\n  264 |\n> 265 |     const response = await page.goto('/vendors/consulting/hub-alias/');\n      |                                 ^\n  266 |     expect(response?.status()).toBe(200);\n  267 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('HUB VENDOR', { timeout: DATA_LOAD_TIMEOUT });\n  268 |     await expect(page.locator('.leaf-hub-deferred')).toContainText('50,000 related records');\n    at /app/tests/ui/leaf-details.spec.ts:265:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.187Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-86be8-ing-a-live-connection-query-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-86be8-ing-a-live-connection-query-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-86be8-ing-a-live-connection-query-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-86be8-ing-a-live-connection-query-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 265
                      }
                    },
                    {
                      "workerIndex": 642,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 173,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/consulting/hub-alias/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/consulting/hub-alias/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/consulting/hub-alias/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/consulting/hub-alias/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:265:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 265
                        },
                        "snippet": "\u001b[0m \u001b[90m 263 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 264 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 265 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/consulting/hub-alias/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 266 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 267 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'HUB VENDOR'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 268 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-hub-deferred'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'50,000 related records'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 265
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/consulting/hub-alias/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/consulting/hub-alias/\", waiting until \"load\"\u001b[22m\n\n\n  263 |     });\n  264 |\n> 265 |     const response = await page.goto('/vendors/consulting/hub-alias/');\n      |                                 ^\n  266 |     expect(response?.status()).toBe(200);\n  267 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('HUB VENDOR', { timeout: DATA_LOAD_TIMEOUT });\n  268 |     await expect(page.locator('.leaf-hub-deferred')).toContainText('50,000 related records');\n    at /app/tests/ui/leaf-details.spec.ts:265:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.316Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-86be8-ing-a-live-connection-query-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-86be8-ing-a-live-connection-query-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 265
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-f2d8cbd96bd16419f748",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 214,
              "column": 7
            },
            {
              "title": "hub vendor lists its ranked top clients with a top-N-of-P footer and Sankey (sites#261)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 663,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 189,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/hub-ranked/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/hub-ranked/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/hub-ranked/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/hub-ranked/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:334:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 334
                        },
                        "snippet": "\u001b[0m \u001b[90m 332 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 333 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 334 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/hub-ranked/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 335 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 336 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'RANKED HUB VENDOR'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 337 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-hub-deferred'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 334
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/hub-ranked/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/hub-ranked/\", waiting until \"load\"\u001b[22m\n\n\n  332 |     });\n  333 |\n> 334 |     const response = await page.goto('/vendors/hub-ranked/');\n      |                                 ^\n  335 |     expect(response?.status()).toBe(200);\n  336 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('RANKED HUB VENDOR', { timeout: DATA_LOAD_TIMEOUT });\n  337 |     await expect(page.locator('.leaf-hub-deferred')).toHaveCount(0);\n    at /app/tests/ui/leaf-details.spec.ts:334:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:39.251Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-22f5d-ooter-and-Sankey-sites-261--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-22f5d-ooter-and-Sankey-sites-261--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 334
                      }
                    },
                    {
                      "workerIndex": 684,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 293,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/hub-ranked/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/hub-ranked/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/hub-ranked/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/hub-ranked/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:334:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 334
                        },
                        "snippet": "\u001b[0m \u001b[90m 332 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 333 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 334 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/hub-ranked/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 335 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 336 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'RANKED HUB VENDOR'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 337 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-hub-deferred'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 334
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/hub-ranked/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/hub-ranked/\", waiting until \"load\"\u001b[22m\n\n\n  332 |     });\n  333 |\n> 334 |     const response = await page.goto('/vendors/hub-ranked/');\n      |                                 ^\n  335 |     expect(response?.status()).toBe(200);\n  336 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('RANKED HUB VENDOR', { timeout: DATA_LOAD_TIMEOUT });\n  337 |     await expect(page.locator('.leaf-hub-deferred')).toHaveCount(0);\n    at /app/tests/ui/leaf-details.spec.ts:334:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:40.253Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-22f5d-ooter-and-Sankey-sites-261--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-22f5d-ooter-and-Sankey-sites-261--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-22f5d-ooter-and-Sankey-sites-261--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-22f5d-ooter-and-Sankey-sites-261--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 334
                      }
                    },
                    {
                      "workerIndex": 712,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 194,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/hub-ranked/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/hub-ranked/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/hub-ranked/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/hub-ranked/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:334:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 334
                        },
                        "snippet": "\u001b[0m \u001b[90m 332 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 333 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 334 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/hub-ranked/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 335 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 336 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'RANKED HUB VENDOR'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 337 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-hub-deferred'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 334
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/hub-ranked/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/hub-ranked/\", waiting until \"load\"\u001b[22m\n\n\n  332 |     });\n  333 |\n> 334 |     const response = await page.goto('/vendors/hub-ranked/');\n      |                                 ^\n  335 |     expect(response?.status()).toBe(200);\n  336 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('RANKED HUB VENDOR', { timeout: DATA_LOAD_TIMEOUT });\n  337 |     await expect(page.locator('.leaf-hub-deferred')).toHaveCount(0);\n    at /app/tests/ui/leaf-details.spec.ts:334:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:41.373Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-22f5d-ooter-and-Sankey-sites-261--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-22f5d-ooter-and-Sankey-sites-261--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 334
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-efc8dff31707720d5493",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 285,
              "column": 7
            },
            {
              "title": "individual Overview, Location and Districts link like the voter page, districts by ZIP overlap",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 732,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 166,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:354:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:354:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:42.360Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-746b8-ge-districts-by-ZIP-overlap-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-746b8-ge-districts-by-ZIP-overlap-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 752,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 272,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:354:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:354:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:43.345Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-746b8-ge-districts-by-ZIP-overlap-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-746b8-ge-districts-by-ZIP-overlap-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-746b8-ge-districts-by-ZIP-overlap-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-746b8-ge-districts-by-ZIP-overlap-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 776,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 167,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:354:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:354:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:44.419Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-746b8-ge-districts-by-ZIP-overlap-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-746b8-ge-districts-by-ZIP-overlap-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-996e402e97983a8e9e9e",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 353,
              "column": 7
            },
            {
              "title": "individual Top Committees: one row per committee and a distinct-committee footer (sites#194)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 791,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 160,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:414:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:414:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:45.339Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c9ccd-committee-footer-sites-194--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c9ccd-committee-footer-sites-194--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 808,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 267,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:414:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:414:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:46.315Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c9ccd-committee-footer-sites-194--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c9ccd-committee-footer-sites-194--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c9ccd-committee-footer-sites-194--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c9ccd-committee-footer-sites-194--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 827,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 152,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:414:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:414:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:47.377Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c9ccd-committee-footer-sites-194--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-c9ccd-committee-footer-sites-194--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-e7d9a1f93425703003bf",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 413,
              "column": 7
            },
            {
              "title": "individual Top Committees: Sankey by category, decoded types, refund columns only when refunded (sites#413)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 843,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 129,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:461:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:461:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:48.259Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-034c4-ly-when-refunded-sites-413--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-034c4-ly-when-refunded-sites-413--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 859,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 231,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:461:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:461:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:49.163Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-034c4-ly-when-refunded-sites-413--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-034c4-ly-when-refunded-sites-413--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-034c4-ly-when-refunded-sites-413--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-034c4-ly-when-refunded-sites-413--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 874,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:461:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/leaf-details.spec.ts:461:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:50.150Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-034c4-ly-when-refunded-sites-413--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-034c4-ly-when-refunded-sites-413--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-1986b3c0dcd9a2db60fc",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 460,
              "column": 7
            },
            {
              "title": "vendor live clients come from moneyCounterparties when the graph has no ranks (sites#194)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 889,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 172,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-194/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-194/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-194/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-194/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:554:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 554
                        },
                        "snippet": "\u001b[0m \u001b[90m 552 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 553 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 554 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/vendor-194/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 555 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 556 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'LIVE VENDOR'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 557 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#clients .leaf-list-footer'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'Showing top 2 of 3 committees'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 554
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-194/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-194/\", waiting until \"load\"\u001b[22m\n\n\n  552 |     });\n  553 |\n> 554 |     const response = await page.goto('/vendors/vendor-194/');\n      |                                 ^\n  555 |     expect(response?.status()).toBe(200);\n  556 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('LIVE VENDOR', { timeout: DATA_LOAD_TIMEOUT });\n  557 |     await expect(page.locator('#clients .leaf-list-footer')).toHaveText('Showing top 2 of 3 committees');\n    at /app/tests/ui/leaf-details.spec.ts:554:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:51.002Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-92c9b-aph-has-no-ranks-sites-194--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-92c9b-aph-has-no-ranks-sites-194--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 554
                      }
                    },
                    {
                      "workerIndex": 902,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 243,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-194/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-194/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-194/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-194/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:554:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 554
                        },
                        "snippet": "\u001b[0m \u001b[90m 552 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 553 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 554 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/vendor-194/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 555 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 556 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'LIVE VENDOR'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 557 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#clients .leaf-list-footer'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'Showing top 2 of 3 committees'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 554
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-194/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-194/\", waiting until \"load\"\u001b[22m\n\n\n  552 |     });\n  553 |\n> 554 |     const response = await page.goto('/vendors/vendor-194/');\n      |                                 ^\n  555 |     expect(response?.status()).toBe(200);\n  556 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('LIVE VENDOR', { timeout: DATA_LOAD_TIMEOUT });\n  557 |     await expect(page.locator('#clients .leaf-list-footer')).toHaveText('Showing top 2 of 3 committees');\n    at /app/tests/ui/leaf-details.spec.ts:554:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:51.845Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-92c9b-aph-has-no-ranks-sites-194--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-92c9b-aph-has-no-ranks-sites-194--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-92c9b-aph-has-no-ranks-sites-194--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-92c9b-aph-has-no-ranks-sites-194--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 554
                      }
                    },
                    {
                      "workerIndex": 915,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-194/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-194/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-194/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-194/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/leaf-details.spec.ts:554:33",
                        "location": {
                          "file": "/app/tests/ui/leaf-details.spec.ts",
                          "column": 33,
                          "line": 554
                        },
                        "snippet": "\u001b[0m \u001b[90m 552 |\u001b[39m     })\u001b[33m;\u001b[39m\n \u001b[90m 553 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 554 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/vendor-194/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 555 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 556 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'LIVE VENDOR'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 557 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#clients .leaf-list-footer'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'Showing top 2 of 3 committees'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/leaf-details.spec.ts",
                            "column": 33,
                            "line": 554
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-194/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-194/\", waiting until \"load\"\u001b[22m\n\n\n  552 |     });\n  553 |\n> 554 |     const response = await page.goto('/vendors/vendor-194/');\n      |                                 ^\n  555 |     expect(response?.status()).toBe(200);\n  556 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText('LIVE VENDOR', { timeout: DATA_LOAD_TIMEOUT });\n  557 |     await expect(page.locator('#clients .leaf-list-footer')).toHaveText('Showing top 2 of 3 committees');\n    at /app/tests/ui/leaf-details.spec.ts:554:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:52.836Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-92c9b-aph-has-no-ranks-sites-194--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/leaf-details-leaf-collecti-92c9b-aph-has-no-ranks-sites-194--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/leaf-details.spec.ts",
                        "column": 33,
                        "line": 554
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "d48770b0cc7e6c0061b9-8ec7a2312ae8e8cad842",
              "file": "tests/ui/leaf-details.spec.ts",
              "line": 520,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/map-insets.spec.ts",
      "file": "tests/ui/map-insets.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "/districts/ map draws AK, HI and DC insets and drills in from a label",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 21,
                  "parallelIndex": 21,
                  "status": "timedOut",
                  "duration": 90185,
                  "error": {
                    "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:01:23.234Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--districts-map--6e244--and-drills-in-from-a-label-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--districts-map--6e244--and-drills-in-from-a-label-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 209,
                  "parallelIndex": 21,
                  "status": "failed",
                  "duration": 11427,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:02:54.090Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--districts-map--6e244--and-drills-in-from-a-label-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--districts-map--6e244--and-drills-in-from-a-label-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--districts-map--6e244--and-drills-in-from-a-label-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--districts-map--6e244--and-drills-in-from-a-label-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 263,
                  "parallelIndex": 21,
                  "status": "failed",
                  "duration": 161,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:06.250Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--districts-map--6e244--and-drills-in-from-a-label-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--districts-map--6e244--and-drills-in-from-a-label-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "8c8626a2a2859708e98d-a3e97435c9e0d3e45fba",
          "file": "tests/ui/map-insets.spec.ts",
          "line": 20,
          "column": 7
        },
        {
          "title": "/counties/ map draws AK, HI and DC insets and drills in from a label",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 278,
                  "parallelIndex": 21,
                  "status": "failed",
                  "duration": 159,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:07.178Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--counties-map-d-6daa6--and-drills-in-from-a-label-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--counties-map-d-6daa6--and-drills-in-from-a-label-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 294,
                  "parallelIndex": 21,
                  "status": "failed",
                  "duration": 295,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:08.110Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--counties-map-d-6daa6--and-drills-in-from-a-label-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--counties-map-d-6daa6--and-drills-in-from-a-label-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--counties-map-d-6daa6--and-drills-in-from-a-label-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--counties-map-d-6daa6--and-drills-in-from-a-label-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 310,
                  "parallelIndex": 21,
                  "status": "timedOut",
                  "duration": 90209,
                  "error": {
                    "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:09.134Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--counties-map-d-6daa6--and-drills-in-from-a-label-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--counties-map-d-6daa6--and-drills-in-from-a-label-ui-retry2/error-context.md"
                    }
                  ]
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "8c8626a2a2859708e98d-a77db558efcf1ad0db31",
          "file": "tests/ui/map-insets.spec.ts",
          "line": 20,
          "column": 7
        },
        {
          "title": "/places/ map draws AK, HI and DC insets and drills in from a label",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 682,
                  "parallelIndex": 21,
                  "status": "failed",
                  "duration": 163,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:40.105Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--places-map-dra-cdb87--and-drills-in-from-a-label-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--places-map-dra-cdb87--and-drills-in-from-a-label-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 705,
                  "parallelIndex": 21,
                  "status": "failed",
                  "duration": 323,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:41.161Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--places-map-dra-cdb87--and-drills-in-from-a-label-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--places-map-dra-cdb87--and-drills-in-from-a-label-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--places-map-dra-cdb87--and-drills-in-from-a-label-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--places-map-dra-cdb87--and-drills-in-from-a-label-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 731,
                  "parallelIndex": 21,
                  "status": "failed",
                  "duration": 157,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:42.327Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--places-map-dra-cdb87--and-drills-in-from-a-label-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--places-map-dra-cdb87--and-drills-in-from-a-label-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "8c8626a2a2859708e98d-624d5260ac6ac832968b",
          "file": "tests/ui/map-insets.spec.ts",
          "line": 20,
          "column": 7
        },
        {
          "title": "/postalcodes/ map draws AK, HI and DC insets and drills in from a label",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 751,
                  "parallelIndex": 20,
                  "status": "failed",
                  "duration": 151,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:43.256Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--postalcodes-ma-78035--and-drills-in-from-a-label-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--postalcodes-ma-78035--and-drills-in-from-a-label-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 769,
                  "parallelIndex": 20,
                  "status": "failed",
                  "duration": 286,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:44.289Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--postalcodes-ma-78035--and-drills-in-from-a-label-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--postalcodes-ma-78035--and-drills-in-from-a-label-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--postalcodes-ma-78035--and-drills-in-from-a-label-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--postalcodes-ma-78035--and-drills-in-from-a-label-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 790,
                  "parallelIndex": 18,
                  "status": "failed",
                  "duration": 149,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:45.358Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--postalcodes-ma-78035--and-drills-in-from-a-label-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--postalcodes-ma-78035--and-drills-in-from-a-label-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "8c8626a2a2859708e98d-c0e2b394b83c4f049726",
          "file": "tests/ui/map-insets.spec.ts",
          "line": 20,
          "column": 7
        },
        {
          "title": "/tracts/ map draws AK, HI and DC insets and drills in from a label",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 809,
                  "parallelIndex": 18,
                  "status": "failed",
                  "duration": 148,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:46.327Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--tracts-map-dra-fa276--and-drills-in-from-a-label-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--tracts-map-dra-fa276--and-drills-in-from-a-label-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 826,
                  "parallelIndex": 14,
                  "status": "failed",
                  "duration": 229,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:47.264Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--tracts-map-dra-fa276--and-drills-in-from-a-label-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--tracts-map-dra-fa276--and-drills-in-from-a-label-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--tracts-map-dra-fa276--and-drills-in-from-a-label-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--tracts-map-dra-fa276--and-drills-in-from-a-label-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 842,
                  "parallelIndex": 14,
                  "status": "failed",
                  "duration": 140,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:48.201Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--tracts-map-dra-fa276--and-drills-in-from-a-label-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--tracts-map-dra-fa276--and-drills-in-from-a-label-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "8c8626a2a2859708e98d-f77eb6cadecb3e9478cd",
          "file": "tests/ui/map-insets.spec.ts",
          "line": 20,
          "column": 7
        },
        {
          "title": "/precincts/ map draws AK, HI and DC insets and drills in from a label",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 857,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 138,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:49.018Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--precincts-map--32f4c--and-drills-in-from-a-label-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--precincts-map--32f4c--and-drills-in-from-a-label-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 872,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 233,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:49.929Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--precincts-map--32f4c--and-drills-in-from-a-label-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--precincts-map--32f4c--and-drills-in-from-a-label-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--precincts-map--32f4c--and-drills-in-from-a-label-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--precincts-map--32f4c--and-drills-in-from-a-label-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                },
                {
                  "workerIndex": 888,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 145,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:23:31",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 31,
                      "line": 23
                    },
                    "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m     \u001b[36mif\u001b[39m (path \u001b[33m===\u001b[39m \u001b[32m'/blocks/'\u001b[39m) \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m path)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 31,
                        "line": 23
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  21 |     test.setTimeout(90000);\n  22 |     if (path === '/blocks/') await skipIfPremiumGated(request, path);\n> 23 |     const geo = await request.get('/geo/states/us-states.geojson');\n     |                               ^\n  24 |     test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  25 |\n  26 |     const res = await page.goto(path);\n    at /app/tests/ui/map-insets.spec.ts:23:31"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:50.889Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--precincts-map--32f4c--and-drills-in-from-a-label-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--precincts-map--32f4c--and-drills-in-from-a-label-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 31,
                    "line": 23
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "8c8626a2a2859708e98d-58e522f8f980e1ee90e3",
          "file": "tests/ui/map-insets.spec.ts",
          "line": 20,
          "column": 7
        },
        {
          "title": "/blocks/ map draws AK, HI and DC insets and drills in from a label",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 901,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 144,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/map-insets.spec.ts:22:54",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/map-insets.spec.ts:22:54"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:51.706Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--blocks-map-dra-47d1e--and-drills-in-from-a-label-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--blocks-map-dra-47d1e--and-drills-in-from-a-label-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                },
                {
                  "workerIndex": 912,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 220,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/map-insets.spec.ts:22:54",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/map-insets.spec.ts:22:54"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:52.661Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--blocks-map-dra-47d1e--and-drills-in-from-a-label-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--blocks-map-dra-47d1e--and-drills-in-from-a-label-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--blocks-map-dra-47d1e--and-drills-in-from-a-label-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--blocks-map-dra-47d1e--and-drills-in-from-a-label-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                },
                {
                  "workerIndex": 925,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 135,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/map-insets.spec.ts:22:54",
                    "location": {
                      "file": "/app/tests/ui/helpers.ts",
                      "column": 29,
                      "line": 17
                    },
                    "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/blocks/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/map-insets.spec.ts:22:54"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:53.593Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--blocks-map-dra-47d1e--and-drills-in-from-a-label-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--blocks-map-dra-47d1e--and-drills-in-from-a-label-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/helpers.ts",
                    "column": 29,
                    "line": 17
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "8c8626a2a2859708e98d-6e0a7da708471aec2cbc",
          "file": "tests/ui/map-insets.spec.ts",
          "line": 20,
          "column": 7
        },
        {
          "title": "/states/ map frames AK, HI and DC insets and a label opens the state page",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 937,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 137,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:48:29",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 29,
                      "line": 48
                    },
                    "snippet": "\u001b[0m \u001b[90m 46 |\u001b[39m test(\u001b[32m'/states/ map frames AK, HI and DC insets and a label opens the state page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 47 |\u001b[39m   test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 48 |\u001b[39m   \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 49 |\u001b[39m   test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 50 |\u001b[39m\n \u001b[90m 51 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/states/'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 29,
                        "line": 48
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  46 | test('/states/ map frames AK, HI and DC insets and a label opens the state page', async ({ page, request }) => {\n  47 |   test.setTimeout(90000);\n> 48 |   const geo = await request.get('/geo/states/us-states.geojson');\n     |                             ^\n  49 |   test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  50 |\n  51 |   const res = await page.goto('/states/');\n    at /app/tests/ui/map-insets.spec.ts:48:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:54.465Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--states-map-fra-484b8--label-opens-the-state-page-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--states-map-fra-484b8--label-opens-the-state-page-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 29,
                    "line": 48
                  }
                },
                {
                  "workerIndex": 948,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 236,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:48:29",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 29,
                      "line": 48
                    },
                    "snippet": "\u001b[0m \u001b[90m 46 |\u001b[39m test(\u001b[32m'/states/ map frames AK, HI and DC insets and a label opens the state page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 47 |\u001b[39m   test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 48 |\u001b[39m   \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 49 |\u001b[39m   test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 50 |\u001b[39m\n \u001b[90m 51 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/states/'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 29,
                        "line": 48
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  46 | test('/states/ map frames AK, HI and DC insets and a label opens the state page', async ({ page, request }) => {\n  47 |   test.setTimeout(90000);\n> 48 |   const geo = await request.get('/geo/states/us-states.geojson');\n     |                             ^\n  49 |   test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  50 |\n  51 |   const res = await page.goto('/states/');\n    at /app/tests/ui/map-insets.spec.ts:48:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:55.328Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--states-map-fra-484b8--label-opens-the-state-page-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--states-map-fra-484b8--label-opens-the-state-page-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--states-map-fra-484b8--label-opens-the-state-page-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--states-map-fra-484b8--label-opens-the-state-page-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 29,
                    "line": 48
                  }
                },
                {
                  "workerIndex": 961,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 139,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/map-insets.spec.ts:48:29",
                    "location": {
                      "file": "/app/tests/ui/map-insets.spec.ts",
                      "column": 29,
                      "line": 48
                    },
                    "snippet": "\u001b[0m \u001b[90m 46 |\u001b[39m test(\u001b[32m'/states/ map frames AK, HI and DC insets and a label opens the state page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 47 |\u001b[39m   test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 48 |\u001b[39m   \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/states/us-states.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 49 |\u001b[39m   test\u001b[33m.\u001b[39mskip(geo\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'state boundaries are not served in this environment'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 50 |\u001b[39m\n \u001b[90m 51 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/states/'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/map-insets.spec.ts",
                        "column": 29,
                        "line": 48
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/states/us-states.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  46 | test('/states/ map frames AK, HI and DC insets and a label opens the state page', async ({ page, request }) => {\n  47 |   test.setTimeout(90000);\n> 48 |   const geo = await request.get('/geo/states/us-states.geojson');\n     |                             ^\n  49 |   test.skip(geo.status() !== 200, 'state boundaries are not served in this environment');\n  50 |\n  51 |   const res = await page.goto('/states/');\n    at /app/tests/ui/map-insets.spec.ts:48:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:56.237Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--states-map-fra-484b8--label-opens-the-state-page-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/map-insets--states-map-fra-484b8--label-opens-the-state-page-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/map-insets.spec.ts",
                    "column": 29,
                    "line": 48
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "8c8626a2a2859708e98d-146f5ff8d2b9e4c7bba5",
          "file": "tests/ui/map-insets.spec.ts",
          "line": 46,
          "column": 5
        }
      ]
    },
    {
      "title": "tests/ui/money-flow-mount.spec.ts",
      "file": "tests/ui/money-flow-mount.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "Candidate: two-column mount still toggles and disposes",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 22,
                  "parallelIndex": 22,
                  "status": "timedOut",
                  "duration": 30092,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/money-flow-mount.spec.ts",
                        "column": 39,
                        "line": 21
                      },
                      "message": "Error: apiRequestContext.get: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |     // even though the bundle is available. Fetch through the authenticated\n  20 |     // request context, then inject those exact served bytes, not a local build.\n> 21 |     const bundle = await page.request.get('/js/money-flow.js');\n     |                                       ^\n  22 |     expect(bundle.status(), 'served money-flow bundle should load').toBe(200);\n  23 |     expect(bundle.headers()['content-type']).toMatch(/(?:java|ecma)script/);\n  24 |     await page.addScriptTag({ content: await bundle.text() });\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:01:23.290Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Candidate-fb352--still-toggles-and-disposes-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Candidate-fb352--still-toggles-and-disposes-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 44,
                  "parallelIndex": 22,
                  "status": "failed",
                  "duration": 11710,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39",
                    "location": {
                      "file": "/app/tests/ui/money-flow-mount.spec.ts",
                      "column": 39,
                      "line": 21
                    },
                    "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m     \u001b[90m// even though the bundle is available. Fetch through the authenticated\u001b[39m\n \u001b[90m 20 |\u001b[39m     \u001b[90m// request context, then inject those exact served bytes, not a local build.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mconst\u001b[39m bundle \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mrequest\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/js/money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                       \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'served money-flow bundle should load'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoMatch(\u001b[35m/(?:java|ecma)script/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39maddScriptTag({ content\u001b[33m:\u001b[39m \u001b[36mawait\u001b[39m bundle\u001b[33m.\u001b[39mtext() })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/money-flow-mount.spec.ts",
                        "column": 39,
                        "line": 21
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |     // even though the bundle is available. Fetch through the authenticated\n  20 |     // request context, then inject those exact served bytes, not a local build.\n> 21 |     const bundle = await page.request.get('/js/money-flow.js');\n     |                                       ^\n  22 |     expect(bundle.status(), 'served money-flow bundle should load').toBe(200);\n  23 |     expect(bundle.headers()['content-type']).toMatch(/(?:java|ecma)script/);\n  24 |     await page.addScriptTag({ content: await bundle.text() });\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:01:54.055Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Candidate-fb352--still-toggles-and-disposes-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Candidate-fb352--still-toggles-and-disposes-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Candidate-fb352--still-toggles-and-disposes-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Candidate-fb352--still-toggles-and-disposes-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/money-flow-mount.spec.ts",
                    "column": 39,
                    "line": 21
                  }
                },
                {
                  "workerIndex": 97,
                  "parallelIndex": 22,
                  "status": "failed",
                  "duration": 184,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39",
                    "location": {
                      "file": "/app/tests/ui/money-flow-mount.spec.ts",
                      "column": 39,
                      "line": 21
                    },
                    "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m     \u001b[90m// even though the bundle is available. Fetch through the authenticated\u001b[39m\n \u001b[90m 20 |\u001b[39m     \u001b[90m// request context, then inject those exact served bytes, not a local build.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mconst\u001b[39m bundle \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mrequest\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/js/money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                       \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'served money-flow bundle should load'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoMatch(\u001b[35m/(?:java|ecma)script/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39maddScriptTag({ content\u001b[33m:\u001b[39m \u001b[36mawait\u001b[39m bundle\u001b[33m.\u001b[39mtext() })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/money-flow-mount.spec.ts",
                        "column": 39,
                        "line": 21
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |     // even though the bundle is available. Fetch through the authenticated\n  20 |     // request context, then inject those exact served bytes, not a local build.\n> 21 |     const bundle = await page.request.get('/js/money-flow.js');\n     |                                       ^\n  22 |     expect(bundle.status(), 'served money-flow bundle should load').toBe(200);\n  23 |     expect(bundle.headers()['content-type']).toMatch(/(?:java|ecma)script/);\n  24 |     await page.addScriptTag({ content: await bundle.text() });\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:02:06.654Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Candidate-fb352--still-toggles-and-disposes-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Candidate-fb352--still-toggles-and-disposes-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/money-flow-mount.spec.ts",
                    "column": 39,
                    "line": 21
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "0a17689d70e3e5ee0c25-0e163677fe23b16c04ff",
          "file": "tests/ui/money-flow-mount.spec.ts",
          "line": 10,
          "column": 7
        },
        {
          "title": "Committee: two-column mount still toggles and disposes",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 127,
                  "parallelIndex": 22,
                  "status": "failed",
                  "duration": 225,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39",
                    "location": {
                      "file": "/app/tests/ui/money-flow-mount.spec.ts",
                      "column": 39,
                      "line": 21
                    },
                    "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m     \u001b[90m// even though the bundle is available. Fetch through the authenticated\u001b[39m\n \u001b[90m 20 |\u001b[39m     \u001b[90m// request context, then inject those exact served bytes, not a local build.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mconst\u001b[39m bundle \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mrequest\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/js/money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                       \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'served money-flow bundle should load'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoMatch(\u001b[35m/(?:java|ecma)script/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39maddScriptTag({ content\u001b[33m:\u001b[39m \u001b[36mawait\u001b[39m bundle\u001b[33m.\u001b[39mtext() })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/money-flow-mount.spec.ts",
                        "column": 39,
                        "line": 21
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |     // even though the bundle is available. Fetch through the authenticated\n  20 |     // request context, then inject those exact served bytes, not a local build.\n> 21 |     const bundle = await page.request.get('/js/money-flow.js');\n     |                                       ^\n  22 |     expect(bundle.status(), 'served money-flow bundle should load').toBe(200);\n  23 |     expect(bundle.headers()['content-type']).toMatch(/(?:java|ecma)script/);\n  24 |     await page.addScriptTag({ content: await bundle.text() });\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:02:07.733Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Committee-41495--still-toggles-and-disposes-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Committee-41495--still-toggles-and-disposes-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/money-flow-mount.spec.ts",
                    "column": 39,
                    "line": 21
                  }
                },
                {
                  "workerIndex": 151,
                  "parallelIndex": 22,
                  "status": "failed",
                  "duration": 359,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39",
                    "location": {
                      "file": "/app/tests/ui/money-flow-mount.spec.ts",
                      "column": 39,
                      "line": 21
                    },
                    "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m     \u001b[90m// even though the bundle is available. Fetch through the authenticated\u001b[39m\n \u001b[90m 20 |\u001b[39m     \u001b[90m// request context, then inject those exact served bytes, not a local build.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mconst\u001b[39m bundle \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mrequest\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/js/money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                       \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'served money-flow bundle should load'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoMatch(\u001b[35m/(?:java|ecma)script/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39maddScriptTag({ content\u001b[33m:\u001b[39m \u001b[36mawait\u001b[39m bundle\u001b[33m.\u001b[39mtext() })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/money-flow-mount.spec.ts",
                        "column": 39,
                        "line": 21
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |     // even though the bundle is available. Fetch through the authenticated\n  20 |     // request context, then inject those exact served bytes, not a local build.\n> 21 |     const bundle = await page.request.get('/js/money-flow.js');\n     |                                       ^\n  22 |     expect(bundle.status(), 'served money-flow bundle should load').toBe(200);\n  23 |     expect(bundle.headers()['content-type']).toMatch(/(?:java|ecma)script/);\n  24 |     await page.addScriptTag({ content: await bundle.text() });\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:02:08.997Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Committee-41495--still-toggles-and-disposes-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Committee-41495--still-toggles-and-disposes-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Committee-41495--still-toggles-and-disposes-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Committee-41495--still-toggles-and-disposes-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/money-flow-mount.spec.ts",
                    "column": 39,
                    "line": 21
                  }
                },
                {
                  "workerIndex": 182,
                  "parallelIndex": 22,
                  "status": "timedOut",
                  "duration": 30116,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/money-flow-mount.spec.ts",
                        "column": 39,
                        "line": 21
                      },
                      "message": "Error: apiRequestContext.get: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |     // even though the bundle is available. Fetch through the authenticated\n  20 |     // request context, then inject those exact served bytes, not a local build.\n> 21 |     const bundle = await page.request.get('/js/money-flow.js');\n     |                                       ^\n  22 |     expect(bundle.status(), 'served money-flow bundle should load').toBe(200);\n  23 |     expect(bundle.headers()['content-type']).toMatch(/(?:java|ecma)script/);\n  24 |     await page.addScriptTag({ content: await bundle.text() });\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:02:10.081Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Committee-41495--still-toggles-and-disposes-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Committee-41495--still-toggles-and-disposes-ui-retry2/error-context.md"
                    }
                  ]
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "0a17689d70e3e5ee0c25-4556932a37ce611852fd",
          "file": "tests/ui/money-flow-mount.spec.ts",
          "line": 10,
          "column": 7
        },
        {
          "title": "Vendor: two-column mount still toggles and disposes",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 194,
                  "parallelIndex": 22,
                  "status": "timedOut",
                  "duration": 30107,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/money-flow-mount.spec.ts",
                        "column": 39,
                        "line": 21
                      },
                      "message": "Error: apiRequestContext.get: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |     // even though the bundle is available. Fetch through the authenticated\n  20 |     // request context, then inject those exact served bytes, not a local build.\n> 21 |     const bundle = await page.request.get('/js/money-flow.js');\n     |                                       ^\n  22 |     expect(bundle.status(), 'served money-flow bundle should load').toBe(200);\n  23 |     expect(bundle.headers()['content-type']).toMatch(/(?:java|ecma)script/);\n  24 |     await page.addScriptTag({ content: await bundle.text() });\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:02:40.781Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Vendor-tw-8746b--still-toggles-and-disposes-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Vendor-tw-8746b--still-toggles-and-disposes-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 330,
                  "parallelIndex": 22,
                  "status": "timedOut",
                  "duration": 30597,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/money-flow-mount.spec.ts",
                        "column": 39,
                        "line": 21
                      },
                      "message": "Error: apiRequestContext.get: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |     // even though the bundle is available. Fetch through the authenticated\n  20 |     // request context, then inject those exact served bytes, not a local build.\n> 21 |     const bundle = await page.request.get('/js/money-flow.js');\n     |                                       ^\n  22 |     expect(bundle.status(), 'served money-flow bundle should load').toBe(200);\n  23 |     expect(bundle.headers()['content-type']).toMatch(/(?:java|ecma)script/);\n  24 |     await page.addScriptTag({ content: await bundle.text() });\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:11.464Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Vendor-tw-8746b--still-toggles-and-disposes-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Vendor-tw-8746b--still-toggles-and-disposes-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Vendor-tw-8746b--still-toggles-and-disposes-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Vendor-tw-8746b--still-toggles-and-disposes-ui-retry1/trace.zip"
                    }
                  ]
                },
                {
                  "workerIndex": 346,
                  "parallelIndex": 22,
                  "status": "failed",
                  "duration": 19750,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39",
                    "location": {
                      "file": "/app/tests/ui/money-flow-mount.spec.ts",
                      "column": 39,
                      "line": 21
                    },
                    "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m     \u001b[90m// even though the bundle is available. Fetch through the authenticated\u001b[39m\n \u001b[90m 20 |\u001b[39m     \u001b[90m// request context, then inject those exact served bytes, not a local build.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mconst\u001b[39m bundle \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mrequest\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/js/money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                       \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m'served money-flow bundle should load'\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m     expect(bundle\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoMatch(\u001b[35m/(?:java|ecma)script/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39maddScriptTag({ content\u001b[33m:\u001b[39m \u001b[36mawait\u001b[39m bundle\u001b[33m.\u001b[39mtext() })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/money-flow-mount.spec.ts",
                        "column": 39,
                        "line": 21
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/js/money-flow.js\u001b[22m\n\u001b[2m    - user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |     // even though the bundle is available. Fetch through the authenticated\n  20 |     // request context, then inject those exact served bytes, not a local build.\n> 21 |     const bundle = await page.request.get('/js/money-flow.js');\n     |                                       ^\n  22 |     expect(bundle.status(), 'served money-flow bundle should load').toBe(200);\n  23 |     expect(bundle.headers()['content-type']).toMatch(/(?:java|ecma)script/);\n  24 |     await page.addScriptTag({ content: await bundle.text() });\n    at /app/tests/ui/money-flow-mount.spec.ts:21:39"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:42.658Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Vendor-tw-8746b--still-toggles-and-disposes-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-mount-Vendor-tw-8746b--still-toggles-and-disposes-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/money-flow-mount.spec.ts",
                    "column": 39,
                    "line": 21
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "0a17689d70e3e5ee0c25-39393939450120315a11",
          "file": "tests/ui/money-flow-mount.spec.ts",
          "line": 10,
          "column": 7
        }
      ]
    },
    {
      "title": "tests/ui/money-flow.spec.ts",
      "file": "tests/ui/money-flow.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "money-flow script injection",
          "file": "tests/ui/money-flow.spec.ts",
          "line": 25,
          "column": 6,
          "specs": [
            {
              "title": "injected once on /committees/a75a9110-f1db-a945-39a8-7503ed3c04da/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 23,
                      "parallelIndex": 23,
                      "status": "timedOut",
                      "duration": 30013,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 28
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  26 |   for (const path of [DNC, HARRIS]) {\n  27 |     test(`injected once on ${path}`, async ({ request }) => {\n> 28 |       const res = await request.get(path);\n     |                                 ^\n  29 |       expect(res.status()).toBe(200);\n  30 |       const html = await res.text();\n  31 |       expect(html.split(SCRIPT).length - 1).toBe(1);\n    at /app/tests/ui/money-flow.spec.ts:28:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.242Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-e98f2-1db-a945-39a8-7503ed3c04da--ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 40,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 11253,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:28:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 28
                        },
                        "snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 27 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 29 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m       \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect(html\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 28
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  26 |   for (const path of [DNC, HARRIS]) {\n  27 |     test(`injected once on ${path}`, async ({ request }) => {\n> 28 |       const res = await request.get(path);\n     |                                 ^\n  29 |       expect(res.status()).toBe(200);\n  30 |       const html = await res.text();\n  31 |       expect(html.split(SCRIPT).length - 1).toBe(1);\n    at /app/tests/ui/money-flow.spec.ts:28:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.840Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-e98f2-1db-a945-39a8-7503ed3c04da--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-e98f2-1db-a945-39a8-7503ed3c04da--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 28
                      }
                    },
                    {
                      "workerIndex": 75,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 35,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:28:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 28
                        },
                        "snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 27 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 29 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m       \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect(html\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 28
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  26 |   for (const path of [DNC, HARRIS]) {\n  27 |     test(`injected once on ${path}`, async ({ request }) => {\n> 28 |       const res = await request.get(path);\n     |                                 ^\n  29 |       expect(res.status()).toBe(200);\n  30 |       const html = await res.text();\n  31 |       expect(html.split(SCRIPT).length - 1).toBe(1);\n    at /app/tests/ui/money-flow.spec.ts:28:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:06.029Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-e98f2-1db-a945-39a8-7503ed3c04da--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 28
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-ac19bd19a112bbc633b9",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 27,
              "column": 9
            },
            {
              "title": "injected once on /candidates/a8897257-430c-2bf3-4498-349021b09ca3/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 99,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:28:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 28
                        },
                        "snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 27 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 29 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m       \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect(html\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 28
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  26 |   for (const path of [DNC, HARRIS]) {\n  27 |     test(`injected once on ${path}`, async ({ request }) => {\n> 28 |       const res = await request.get(path);\n     |                                 ^\n  29 |       expect(res.status()).toBe(200);\n  30 |       const html = await res.text();\n  31 |       expect(html.split(SCRIPT).length - 1).toBe(1);\n    at /app/tests/ui/money-flow.spec.ts:28:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.819Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-c48e8-30c-2bf3-4498-349021b09ca3--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 28
                      }
                    },
                    {
                      "workerIndex": 122,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 89,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:28:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 28
                        },
                        "snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 27 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 29 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m       \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect(html\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 28
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  26 |   for (const path of [DNC, HARRIS]) {\n  27 |     test(`injected once on ${path}`, async ({ request }) => {\n> 28 |       const res = await request.get(path);\n     |                                 ^\n  29 |       expect(res.status()).toBe(200);\n  30 |       const html = await res.text();\n  31 |       expect(html.split(SCRIPT).length - 1).toBe(1);\n    at /app/tests/ui/money-flow.spec.ts:28:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.596Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-c48e8-30c-2bf3-4498-349021b09ca3--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-c48e8-30c-2bf3-4498-349021b09ca3--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 28
                      }
                    },
                    {
                      "workerIndex": 134,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 33,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:28:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 28
                        },
                        "snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[33mDNC\u001b[39m\u001b[33m,\u001b[39m \u001b[33mHARRIS\u001b[39m]) {\n \u001b[90m 27 |\u001b[39m     test(\u001b[32m`injected once on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 29 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m       \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m       expect(html\u001b[33m.\u001b[39msplit(\u001b[33mSCRIPT\u001b[39m)\u001b[33m.\u001b[39mlength \u001b[33m-\u001b[39m \u001b[35m1\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 28
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  26 |   for (const path of [DNC, HARRIS]) {\n  27 |     test(`injected once on ${path}`, async ({ request }) => {\n> 28 |       const res = await request.get(path);\n     |                                 ^\n  29 |       expect(res.status()).toBe(200);\n  30 |       const html = await res.text();\n  31 |       expect(html.split(SCRIPT).length - 1).toBe(1);\n    at /app/tests/ui/money-flow.spec.ts:28:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.490Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-c48e8-30c-2bf3-4498-349021b09ca3--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 28
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-1e24093b4e753edfa81f",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 27,
              "column": 9
            },
            {
              "title": "not injected on /states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 159,
                      "parallelIndex": 23,
                      "status": "timedOut",
                      "duration": 30023,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.324Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-edc3b-554-f435-2a6d-50b3c8cc01d7--ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 185,
                      "parallelIndex": 23,
                      "status": "timedOut",
                      "duration": 30046,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:39.883Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-edc3b-554-f435-2a6d-50b3c8cc01d7--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-edc3b-554-f435-2a6d-50b3c8cc01d7--ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 320,
                      "parallelIndex": 23,
                      "status": "timedOut",
                      "duration": 30024,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/states/032f8d61-f554-f435-2a6d-50b3c8cc01d7/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:10.492Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-edc3b-554-f435-2a6d-50b3c8cc01d7--ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-7a4f8e57d8a34b965055",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 36,
              "column": 9
            },
            {
              "title": "not injected on /elections/2024/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 336,
                      "parallelIndex": 23,
                      "status": "timedOut",
                      "duration": 30027,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:41.045Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-df1fd-injected-on-elections-2024--ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 432,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 19451,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:37:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 36 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:11.610Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-df1fd-injected-on-elections-2024--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-df1fd-injected-on-elections-2024--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 37
                      }
                    },
                    {
                      "workerIndex": 489,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 38,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:37:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 36 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/elections/2024/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:31.730Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-df1fd-injected-on-elections-2024--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 37
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-2dcd02a112846a1c74ab",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 36,
              "column": 9
            },
            {
              "title": "not injected on /offices/president/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 504,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:37:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 36 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.453Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-68b8a-ected-on-offices-president--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 37
                      }
                    },
                    {
                      "workerIndex": 520,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 51,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:37:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 36 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:33.162Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-68b8a-ected-on-offices-president--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-68b8a-ected-on-offices-president--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 37
                      }
                    },
                    {
                      "workerIndex": 538,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:37:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 36 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/offices/president/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.916Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-68b8a-ected-on-offices-president--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 37
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-a7c67ffeb658d5760d58",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 36,
              "column": 9
            },
            {
              "title": "not injected on /districts/ak/00/",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 554,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak/00/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak/00/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:37:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 36 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak/00/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.647Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-cb298-njected-on-districts-ak-00--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 37
                      }
                    },
                    {
                      "workerIndex": 575,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 69,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak/00/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak/00/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:37:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 36 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak/00/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.344Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-cb298-njected-on-districts-ak-00--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-cb298-njected-on-districts-ak-00--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 37
                      }
                    },
                    {
                      "workerIndex": 592,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 37,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak/00/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak/00/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:37:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 37
                        },
                        "snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m \u001b[33mOTHER_PAGES\u001b[39m) {\n \u001b[90m 36 |\u001b[39m     test(\u001b[32m`not injected on ${path}`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m       expect(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext())\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoContain(\u001b[32m'money-flow.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m     })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 37
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak/00/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  35 |   for (const path of OTHER_PAGES) {\n  36 |     test(`not injected on ${path}`, async ({ request }) => {\n> 37 |       const res = await request.get(path);\n     |                                 ^\n  38 |       expect(res.status()).toBe(200);\n  39 |       expect(await res.text()).not.toContain('money-flow.js');\n  40 |     });\n    at /app/tests/ui/money-flow.spec.ts:37:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.158Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-scri-cb298-njected-on-districts-ak-00--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 37
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-70d1251eabbd50eef434",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 36,
              "column": 9
            }
          ]
        },
        {
          "title": "money-flow card toggle",
          "file": "tests/ui/money-flow.spec.ts",
          "line": 44,
          "column": 6,
          "specs": [
            {
              "title": "committee: each money card defaults to the Sankey",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 607,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 181,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:48:16",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 16,
                          "line": 48
                        },
                        "snippet": "\u001b[0m \u001b[90m 46 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 48 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 49 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m id \u001b[36mof\u001b[39m [\u001b[32m'incoming'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'outgoing'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'funded'\u001b[39m]) {\n \u001b[90m 50 |\u001b[39m       \u001b[36mconst\u001b[39m card \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m`#${id}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m       \u001b[36mawait\u001b[39m expect(card\u001b[33m.\u001b[39mlocator(\u001b[32m'.money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 16,
                            "line": 48
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  46 |     const errors: string[] = [];\n  47 |     page.on('pageerror', (e) => errors.push(String(e)));\n> 48 |     await page.goto(DNC);\n     |                ^\n  49 |     for (const id of ['incoming', 'outgoing', 'funded']) {\n  50 |       const card = page.locator(`#${id}`);\n  51 |       await expect(card.locator('.money-flow-chart canvas')).toHaveCount(1, { timeout: 15000 });\n    at /app/tests/ui/money-flow.spec.ts:48:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:36.906Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-90793-card-defaults-to-the-Sankey-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-90793-card-defaults-to-the-Sankey-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 16,
                        "line": 48
                      }
                    },
                    {
                      "workerIndex": 631,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 287,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:48:16",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 16,
                          "line": 48
                        },
                        "snippet": "\u001b[0m \u001b[90m 46 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 48 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 49 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m id \u001b[36mof\u001b[39m [\u001b[32m'incoming'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'outgoing'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'funded'\u001b[39m]) {\n \u001b[90m 50 |\u001b[39m       \u001b[36mconst\u001b[39m card \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m`#${id}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m       \u001b[36mawait\u001b[39m expect(card\u001b[33m.\u001b[39mlocator(\u001b[32m'.money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 16,
                            "line": 48
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  46 |     const errors: string[] = [];\n  47 |     page.on('pageerror', (e) => errors.push(String(e)));\n> 48 |     await page.goto(DNC);\n     |                ^\n  49 |     for (const id of ['incoming', 'outgoing', 'funded']) {\n  50 |       const card = page.locator(`#${id}`);\n  51 |       await expect(card.locator('.money-flow-chart canvas')).toHaveCount(1, { timeout: 15000 });\n    at /app/tests/ui/money-flow.spec.ts:48:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.932Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-90793-card-defaults-to-the-Sankey-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-90793-card-defaults-to-the-Sankey-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-90793-card-defaults-to-the-Sankey-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-90793-card-defaults-to-the-Sankey-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 16,
                        "line": 48
                      }
                    },
                    {
                      "workerIndex": 656,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 173,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:48:16",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 16,
                          "line": 48
                        },
                        "snippet": "\u001b[0m \u001b[90m 46 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 48 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mDNC\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 49 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m id \u001b[36mof\u001b[39m [\u001b[32m'incoming'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'outgoing'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'funded'\u001b[39m]) {\n \u001b[90m 50 |\u001b[39m       \u001b[36mconst\u001b[39m card \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m`#${id}`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m       \u001b[36mawait\u001b[39m expect(card\u001b[33m.\u001b[39mlocator(\u001b[32m'.money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 16,
                            "line": 48
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\", waiting until \"load\"\u001b[22m\n\n\n  46 |     const errors: string[] = [];\n  47 |     page.on('pageerror', (e) => errors.push(String(e)));\n> 48 |     await page.goto(DNC);\n     |                ^\n  49 |     for (const id of ['incoming', 'outgoing', 'funded']) {\n  50 |       const card = page.locator(`#${id}`);\n  51 |       await expect(card.locator('.money-flow-chart canvas')).toHaveCount(1, { timeout: 15000 });\n    at /app/tests/ui/money-flow.spec.ts:48:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:39.010Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-90793-card-defaults-to-the-Sankey-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-90793-card-defaults-to-the-Sankey-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 16,
                        "line": 48
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-1379512e23819a3f13a3",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 45,
              "column": 7
            },
            {
              "title": "candidate: Top Contributors toggles between Sankey and table",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 677,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 183,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:60:16",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 16,
                          "line": 60
                        },
                        "snippet": "\u001b[0m \u001b[90m 58 |\u001b[39m\n \u001b[90m 59 |\u001b[39m   test(\u001b[32m'candidate: Top Contributors toggles between Sankey and table'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 60 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mHARRIS\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mconst\u001b[39m card \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#funding'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 62 |\u001b[39m     \u001b[36mawait\u001b[39m expect(card\u001b[33m.\u001b[39mlocator(\u001b[32m'.money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 63 |\u001b[39m     \u001b[36mawait\u001b[39m expect(card\u001b[33m.\u001b[39mlocator(\u001b[32m'table'\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 16,
                            "line": 60
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n\n  58 |\n  59 |   test('candidate: Top Contributors toggles between Sankey and table', async ({ page }) => {\n> 60 |     await page.goto(HARRIS);\n     |                ^\n  61 |     const card = page.locator('#funding');\n  62 |     await expect(card.locator('.money-flow-chart canvas')).toHaveCount(1, { timeout: 15000 });\n  63 |     await expect(card.locator('table')).toBeHidden();\n    at /app/tests/ui/money-flow.spec.ts:60:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:39.965Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-05c02-es-between-Sankey-and-table-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-05c02-es-between-Sankey-and-table-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 16,
                        "line": 60
                      }
                    },
                    {
                      "workerIndex": 699,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 314,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:60:16",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 16,
                          "line": 60
                        },
                        "snippet": "\u001b[0m \u001b[90m 58 |\u001b[39m\n \u001b[90m 59 |\u001b[39m   test(\u001b[32m'candidate: Top Contributors toggles between Sankey and table'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 60 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mHARRIS\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mconst\u001b[39m card \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#funding'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 62 |\u001b[39m     \u001b[36mawait\u001b[39m expect(card\u001b[33m.\u001b[39mlocator(\u001b[32m'.money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 63 |\u001b[39m     \u001b[36mawait\u001b[39m expect(card\u001b[33m.\u001b[39mlocator(\u001b[32m'table'\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 16,
                            "line": 60
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n\n  58 |\n  59 |   test('candidate: Top Contributors toggles between Sankey and table', async ({ page }) => {\n> 60 |     await page.goto(HARRIS);\n     |                ^\n  61 |     const card = page.locator('#funding');\n  62 |     await expect(card.locator('.money-flow-chart canvas')).toHaveCount(1, { timeout: 15000 });\n  63 |     await expect(card.locator('table')).toBeHidden();\n    at /app/tests/ui/money-flow.spec.ts:60:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:40.918Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-05c02-es-between-Sankey-and-table-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-05c02-es-between-Sankey-and-table-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-05c02-es-between-Sankey-and-table-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-05c02-es-between-Sankey-and-table-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 16,
                        "line": 60
                      }
                    },
                    {
                      "workerIndex": 720,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 179,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:60:16",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 16,
                          "line": 60
                        },
                        "snippet": "\u001b[0m \u001b[90m 58 |\u001b[39m\n \u001b[90m 59 |\u001b[39m   test(\u001b[32m'candidate: Top Contributors toggles between Sankey and table'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 60 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[33mHARRIS\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mconst\u001b[39m card \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#funding'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 62 |\u001b[39m     \u001b[36mawait\u001b[39m expect(card\u001b[33m.\u001b[39mlocator(\u001b[32m'.money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 63 |\u001b[39m     \u001b[36mawait\u001b[39m expect(card\u001b[33m.\u001b[39mlocator(\u001b[32m'table'\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 16,
                            "line": 60
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/a8897257-430c-2bf3-4498-349021b09ca3/\", waiting until \"load\"\u001b[22m\n\n\n  58 |\n  59 |   test('candidate: Top Contributors toggles between Sankey and table', async ({ page }) => {\n> 60 |     await page.goto(HARRIS);\n     |                ^\n  61 |     const card = page.locator('#funding');\n  62 |     await expect(card.locator('.money-flow-chart canvas')).toHaveCount(1, { timeout: 15000 });\n  63 |     await expect(card.locator('table')).toBeHidden();\n    at /app/tests/ui/money-flow.spec.ts:60:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.022Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-05c02-es-between-Sankey-and-table-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-05c02-es-between-Sankey-and-table-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 16,
                        "line": 60
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-66eef433452cb5f4518f",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 59,
              "column": 7
            },
            {
              "title": "candidate: #ie-support card follows the independent-expenditure data",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 741,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:43.001Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-72da7-ndependent-expenditure-data-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-72da7-ndependent-expenditure-data-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 760,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 263,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:43.944Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-72da7-ndependent-expenditure-data-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-72da7-ndependent-expenditure-data-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-72da7-ndependent-expenditure-data-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-72da7-ndependent-expenditure-data-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 781,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:45.059Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-72da7-ndependent-expenditure-data-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-72da7-ndependent-expenditure-data-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-1839d1cd12dab3de3014",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 79,
              "column": 9
            },
            {
              "title": "committee: #ie-support card follows the independent-expenditure data",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 800,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 138,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:46.008Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-77078-ndependent-expenditure-data-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-77078-ndependent-expenditure-data-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 818,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 221,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:46.889Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-77078-ndependent-expenditure-data-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-77078-ndependent-expenditure-data-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-77078-ndependent-expenditure-data-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-77078-ndependent-expenditure-data-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 835,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 161,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:47.866Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-77078-ndependent-expenditure-data-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-77078-ndependent-expenditure-data-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-c03ecaaa846d30d640c2",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 79,
              "column": 9
            },
            {
              "title": "candidate: #ie-oppose card follows the independent-expenditure data",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 850,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 155,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:48.765Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-b1fd1-ndependent-expenditure-data-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-b1fd1-ndependent-expenditure-data-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 867,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 216,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:49.641Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-b1fd1-ndependent-expenditure-data-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-b1fd1-ndependent-expenditure-data-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-b1fd1-ndependent-expenditure-data-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-b1fd1-ndependent-expenditure-data-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 881,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 122,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:50.602Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-b1fd1-ndependent-expenditure-data-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-b1fd1-ndependent-expenditure-data-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-cd8390d905a0c386907e",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 79,
              "column": 9
            },
            {
              "title": "committee: #ie-oppose card follows the independent-expenditure data",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 895,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 354,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:51.399Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-f1bb4-ndependent-expenditure-data-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-f1bb4-ndependent-expenditure-data-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 910,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 223,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:52.449Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-f1bb4-ndependent-expenditure-data-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-f1bb4-ndependent-expenditure-data-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-f1bb4-ndependent-expenditure-data-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-f1bb4-ndependent-expenditure-data-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 923,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 122,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n    at /app/tests/ui/money-flow.spec.ts:82:33",
                        "location": {
                          "file": "/app/tests/ui/money-flow.spec.ts",
                          "column": 33,
                          "line": 82
                        },
                        "snippet": "\u001b[0m \u001b[90m 80 |\u001b[39m       \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m       page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 82 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 83 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }'\u001b[39m\u001b[33m,\u001b[39m variables\u001b[33m:\u001b[39m { f\u001b[33m:\u001b[39m fecId } }\u001b[33m,\u001b[39m\n \u001b[90m 84 |\u001b[39m         headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 85 |\u001b[39m       })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/money-flow.spec.ts",
                            "column": 33,
                            "line": 82
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 104\u001b[22m\n\n\n  80 |       const errors: string[] = [];\n  81 |       page.on('pageerror', (e) => errors.push(String(e)));\n> 82 |       const res = await request.post('/api/graphql', {\n     |                                 ^\n  83 |         data: { query: 'query($f: String!) { moneyFlow(fecId: $f) { nodes { side } } }', variables: { f: fecId } },\n  84 |         headers: visitorHeaders(),\n  85 |       });\n    at /app/tests/ui/money-flow.spec.ts:82:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:53.406Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-f1bb4-ndependent-expenditure-data-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/money-flow-money-flow-card-f1bb4-ndependent-expenditure-data-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/money-flow.spec.ts",
                        "column": 33,
                        "line": 82
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "298b24fdb93a81fb6ce7-b82415fcc5b419d3939e",
              "file": "tests/ui/money-flow.spec.ts",
              "line": 79,
              "column": 9
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/news-feed.spec.ts",
      "file": "tests/ui/news-feed.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "news feed (source: OPENSEARCH)",
          "file": "tests/ui/news-feed.spec.ts",
          "line": 38,
          "column": 6,
          "specs": [
            {
              "title": "the feed serves articles with resolved entities",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 24,
                      "status": "timedOut",
                      "duration": 30012,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:40:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.286Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-171e9-cles-with-resolved-entities-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 41,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 11302,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:40:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:40:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.884Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-171e9-cles-with-resolved-entities-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-171e9-cles-with-resolved-entities-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 78,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 37,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:40:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:40:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:06.127Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-171e9-cles-with-resolved-entities-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1af1026586bac743cce4-f13e5cf3d2f509b8f6ed",
              "file": "tests/ui/news-feed.spec.ts",
              "line": 39,
              "column": 7
            },
            {
              "title": "candidate chips carry an FEC party code, never a graph id",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 103,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 38,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:48:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:48:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.881Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-06230-party-code-never-a-graph-id-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 124,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 122,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:48:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:48:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.641Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-06230-party-code-never-a-graph-id-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-06230-party-code-never-a-graph-id-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    },
                    {
                      "workerIndex": 135,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 44,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:48:35",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 42,
                          "line": 154
                        },
                        "snippet": "   at tests/ui/helpers.ts:154\n\n\u001b[0m \u001b[90m 152 |\u001b[39m   variables\u001b[33m:\u001b[39m \u001b[33mRecord\u001b[39m\u001b[33m<\u001b[39m\u001b[33mstring\u001b[39m\u001b[33m,\u001b[39m unknown\u001b[33m>\u001b[39m \u001b[33m=\u001b[39m {}\u001b[33m,\u001b[39m\n \u001b[90m 153 |\u001b[39m )\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mT\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 154 |\u001b[39m   \u001b[36mconst\u001b[39m res\u001b[33m:\u001b[39m \u001b[33mAPIResponse\u001b[39m \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m { data\u001b[33m:\u001b[39m { query\u001b[33m,\u001b[39m variables }\u001b[33m,\u001b[39m headers\u001b[33m:\u001b[39m visitorHeaders() })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                          \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 155 |\u001b[39m   \u001b[36mconst\u001b[39m label \u001b[33m=\u001b[39m query\u001b[33m.\u001b[39mreplace(\u001b[35m/\\s+/g\u001b[39m\u001b[33m,\u001b[39m \u001b[32m' '\u001b[39m)\u001b[33m.\u001b[39mtrim()\u001b[33m.\u001b[39mslice(\u001b[35m0\u001b[39m\u001b[33m,\u001b[39m \u001b[35m120\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 156 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`POST /api/graphql ${label} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 157 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:48:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.521Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-06230-party-code-never-a-graph-id-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 42,
                        "line": 154
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1af1026586bac743cce4-a0d92ad6dfd4d6b3887d",
              "file": "tests/ui/news-feed.spec.ts",
              "line": 47,
              "column": 7
            },
            {
              "title": "party facet keys are FEC codes and the party filter matches",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 160,
                      "parallelIndex": 24,
                      "status": "timedOut",
                      "duration": 30027,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:62:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.324Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-ebcf0-nd-the-party-filter-matches-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 186,
                      "parallelIndex": 24,
                      "status": "timedOut",
                      "duration": 30065,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:62:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:39.900Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-ebcf0-nd-the-party-filter-matches-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-ebcf0-nd-the-party-filter-matches-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 321,
                      "parallelIndex": 24,
                      "status": "timedOut",
                      "duration": 30027,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 42,
                            "line": 154
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 277\u001b[22m\n\n\n   at tests/ui/helpers.ts:154\n\n  152 |   variables: Record<string, unknown> = {},\n  153 | ): Promise<T> {\n> 154 |   const res: APIResponse = await request.post('/api/graphql', { data: { query, variables }, headers: visitorHeaders() });\n      |                                          ^\n  155 |   const label = query.replace(/\\s+/g, ' ').trim().slice(0, 120);\n  156 |   expect(res.status(), `POST /api/graphql ${label} should answer 200`).toBe(200);\n  157 |   const body = await res.json();\n    at gql (/app/tests/ui/helpers.ts:154:42)\n    at /app/tests/ui/news-feed.spec.ts:62:35"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:10.539Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/news-feed-news-feed-source-ebcf0-nd-the-party-filter-matches-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1af1026586bac743cce4-ad8d68d0c5df3f8fda27",
              "file": "tests/ui/news-feed.spec.ts",
              "line": 61,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/page-aliases.spec.ts",
      "file": "tests/ui/page-aliases.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "static page aliases",
          "file": "tests/ui/page-aliases.spec.ts",
          "line": 45,
          "column": 6,
          "specs": [
            {
              "title": "canonical vanity URL serves the stored page",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                      "location": {
                        "file": "/app/tests/ui/page-aliases.spec.ts",
                        "line": 46,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:22.378Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                          "location": {
                            "file": "/app/tests/ui/page-aliases.spec.ts",
                            "line": 46,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "435b8a583a557afdb4f4-01c6492deafe21c2f9dd",
              "file": "tests/ui/page-aliases.spec.ts",
              "line": 48,
              "column": 7
            },
            {
              "title": "vanity lookup ignores case, trailing slash and index.html",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                      "location": {
                        "file": "/app/tests/ui/page-aliases.spec.ts",
                        "line": 46,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:22.379Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                          "location": {
                            "file": "/app/tests/ui/page-aliases.spec.ts",
                            "line": 46,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "435b8a583a557afdb4f4-07e8807475348f87bc20",
              "file": "tests/ui/page-aliases.spec.ts",
              "line": 52,
              "column": 7
            },
            {
              "title": "UUID URL serves the page with its vanity canonical",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                      "location": {
                        "file": "/app/tests/ui/page-aliases.spec.ts",
                        "line": 46,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:22.379Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                          "location": {
                            "file": "/app/tests/ui/page-aliases.spec.ts",
                            "line": 46,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "435b8a583a557afdb4f4-d8a32d62d9503bea2b6e",
              "file": "tests/ui/page-aliases.spec.ts",
              "line": 58,
              "column": 7
            },
            {
              "title": "secondary keys redirect to the canonical URL",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                      "location": {
                        "file": "/app/tests/ui/page-aliases.spec.ts",
                        "line": 46,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:22.379Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                          "location": {
                            "file": "/app/tests/ui/page-aliases.spec.ts",
                            "line": 46,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "435b8a583a557afdb4f4-79778d6ee4c3fd5bcef0",
              "file": "tests/ui/page-aliases.spec.ts",
              "line": 66,
              "column": 7
            },
            {
              "title": "legacy URL shapes redirect to the canonical URL",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                      "location": {
                        "file": "/app/tests/ui/page-aliases.spec.ts",
                        "line": 46,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:22.379Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                          "location": {
                            "file": "/app/tests/ui/page-aliases.spec.ts",
                            "line": 46,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "435b8a583a557afdb4f4-b1dcc28f4f8ac7c8b0e9",
              "file": "tests/ui/page-aliases.spec.ts",
              "line": 76,
              "column": 7
            },
            {
              "title": "redirect targets are served",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                      "location": {
                        "file": "/app/tests/ui/page-aliases.spec.ts",
                        "line": 46,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:22.380Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                          "location": {
                            "file": "/app/tests/ui/page-aliases.spec.ts",
                            "line": 46,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "435b8a583a557afdb4f4-1953e0e87b9ede5e9f3e",
              "file": "tests/ui/page-aliases.spec.ts",
              "line": 82,
              "column": 7
            },
            {
              "title": "an unknown address is not served as a page",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                      "location": {
                        "file": "/app/tests/ui/page-aliases.spec.ts",
                        "line": 46,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:22.380Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published aliases",
                          "location": {
                            "file": "/app/tests/ui/page-aliases.spec.ts",
                            "line": 46,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "435b8a583a557afdb4f4-cf40560c183e754a8e41",
              "file": "tests/ui/page-aliases.spec.ts",
              "line": 88,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/postalcodes.spec.ts",
      "file": "tests/ui/postalcodes.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "ZIP code overlaps (API)",
          "file": "tests/ui/postalcodes.spec.ts",
          "line": 38,
          "column": 6,
          "specs": [
            {
              "title": "78701 overlaps TX-37 and Travis County, with land area",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 25,
                      "parallelIndex": 26,
                      "status": "timedOut",
                      "duration": 30026,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/postalcodes.spec.ts:39:8",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 8,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m\n \u001b[90m 38 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'ZIP code overlaps (API)'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasOverlaps(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no PostalCode OVERLAPS yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 8,
                            "line": 39
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  37 |\n  38 | test.describe('ZIP code overlaps (API)', () => {\n> 39 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  40 |     test.skip(!(await apiHasOverlaps(request)), 'the API behind this host has no PostalCode OVERLAPS yet');\n  41 |   });\n  42 |\n    at /app/tests/ui/postalcodes.spec.ts:39:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.026Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-4d532-ravis-County-with-land-area-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 8,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 33,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 11250,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.631Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-4d532-ravis-County-with-land-area-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-4d532-ravis-County-with-land-area-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 70,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.688Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-4d532-ravis-County-with-land-area-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9e1d6d67ffc6aff66f08-fd9f717d5d792e008913",
              "file": "tests/ui/postalcodes.spec.ts",
              "line": 43,
              "column": 7
            },
            {
              "title": "a ZIP split across districts and counties: 02467 (Chestnut Hill, MA)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 94,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.405Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-d756a-ies-02467-Chestnut-Hill-MA--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 106,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 81,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.183Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-d756a-ies-02467-Chestnut-Hill-MA--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-d756a-ies-02467-Chestnut-Hill-MA--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 131,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 21,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.111Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-d756a-ies-02467-Chestnut-Hill-MA--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9e1d6d67ffc6aff66f08-b1cff2326cd3f5773029",
              "file": "tests/ui/postalcodes.spec.ts",
              "line": 54,
              "column": 7
            },
            {
              "title": "the edges read both ways: TX-37 and Travis County list 78701",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 152,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 30,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.058Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-e4cfb-nd-Travis-County-list-78701-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 169,
                      "parallelIndex": 26,
                      "status": "timedOut",
                      "duration": 30059,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/postalcodes.spec.ts:39:8",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 8,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m\n \u001b[90m 38 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'ZIP code overlaps (API)'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasOverlaps(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no PostalCode OVERLAPS yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 8,
                            "line": 39
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  37 |\n  38 | test.describe('ZIP code overlaps (API)', () => {\n> 39 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  40 |     test.skip(!(await apiHasOverlaps(request)), 'the API behind this host has no PostalCode OVERLAPS yet');\n  41 |   });\n  42 |\n    at /app/tests/ui/postalcodes.spec.ts:39:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:09.778Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-e4cfb-nd-Travis-County-list-78701-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-e4cfb-nd-Travis-County-list-78701-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 8,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 193,
                      "parallelIndex": 26,
                      "status": "timedOut",
                      "duration": 30024,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/postalcodes.spec.ts:39:8",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 8,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m\n \u001b[90m 38 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'ZIP code overlaps (API)'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasOverlaps(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no PostalCode OVERLAPS yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 8,
                            "line": 39
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  37 |\n  38 | test.describe('ZIP code overlaps (API)', () => {\n> 39 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  40 |     test.skip(!(await apiHasOverlaps(request)), 'the API behind this host has no PostalCode OVERLAPS yet');\n  41 |   });\n  42 |\n    at /app/tests/ui/postalcodes.spec.ts:39:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:40.411Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-e4cfb-nd-Travis-County-list-78701-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 8,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9e1d6d67ffc6aff66f08-9053988a012c927e29a5",
              "file": "tests/ui/postalcodes.spec.ts",
              "line": 61,
              "column": 7
            },
            {
              "title": "almost every ZIP has a county",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 329,
                      "parallelIndex": 26,
                      "status": "timedOut",
                      "duration": 30031,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/postalcodes.spec.ts:39:8",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 8,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m\n \u001b[90m 38 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'ZIP code overlaps (API)'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasOverlaps(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no PostalCode OVERLAPS yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 8,
                            "line": 39
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  37 |\n  38 | test.describe('ZIP code overlaps (API)', () => {\n> 39 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  40 |     test.skip(!(await apiHasOverlaps(request)), 'the API behind this host has no PostalCode OVERLAPS yet');\n  41 |   });\n  42 |\n    at /app/tests/ui/postalcodes.spec.ts:39:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:10.963Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-7d023-most-every-ZIP-has-a-county-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 8,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 345,
                      "parallelIndex": 26,
                      "status": "timedOut",
                      "duration": 30045,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/postalcodes.spec.ts:39:8",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 8,
                          "line": 39
                        },
                        "snippet": "\u001b[0m \u001b[90m 37 |\u001b[39m\n \u001b[90m 38 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'ZIP code overlaps (API)'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 39 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 40 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39m(\u001b[36mawait\u001b[39m apiHasOverlaps(request))\u001b[33m,\u001b[39m \u001b[32m'the API behind this host has no PostalCode OVERLAPS yet'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 41 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 42 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 8,
                            "line": 39
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  37 |\n  38 | test.describe('ZIP code overlaps (API)', () => {\n> 39 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  40 |     test.skip(!(await apiHasOverlaps(request)), 'the API behind this host has no PostalCode OVERLAPS yet');\n  41 |   });\n  42 |\n    at /app/tests/ui/postalcodes.spec.ts:39:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: Request context disposed.\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:41.531Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-7d023-most-every-ZIP-has-a-county-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-7d023-most-every-ZIP-has-a-county-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 8,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 438,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 19431,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:40:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:12.115Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-overl-7d023-most-every-ZIP-has-a-county-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9e1d6d67ffc6aff66f08-91224e7aa3b0911623c7",
              "file": "tests/ui/postalcodes.spec.ts",
              "line": 73,
              "column": 7
            }
          ]
        },
        {
          "title": "ZIP code pages",
          "file": "tests/ui/postalcodes.spec.ts",
          "line": 86,
          "column": 6,
          "specs": [
            {
              "title": "78701 lists TX-37 and Travis County, linked",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 498,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 172,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/78701/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/78701/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/78701/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/78701/\", waiting until \"load\"\u001b[22m\n\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:96:11",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 33,
                          "line": 89
                        },
                        "snippet": "\u001b[0m \u001b[90m 87 |\u001b[39m   \u001b[90m// The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\u001b[39m\n \u001b[90m 88 |\u001b[39m   \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m rendered(page\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mPage\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 89 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 90 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 91 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39mresponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'this host serves static ZIP pages, not the us-pages renderer'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 92 |\u001b[39m     \u001b[36mreturn\u001b[39m response\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 33,
                            "line": 89
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/78701/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/78701/\", waiting until \"load\"\u001b[22m\n\n\n  87 |   // The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\n  88 |   async function rendered(page: import('@playwright/test').Page, path: string) {\n> 89 |     const response = await page.goto(path);\n     |                                 ^\n  90 |     expect(response?.status(), `${path} should answer 200`).toBe(200);\n  91 |     test.skip(!response?.headers()['x-graph-build'], 'this host serves static ZIP pages, not the us-pages renderer');\n  92 |     return response;\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:96:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.228Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-b006c-37-and-Travis-County-linked-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-b006c-37-and-Travis-County-linked-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 33,
                        "line": 89
                      }
                    },
                    {
                      "workerIndex": 522,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 251,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/78701/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/78701/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/78701/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/78701/\", waiting until \"load\"\u001b[22m\n\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:96:11",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 33,
                          "line": 89
                        },
                        "snippet": "\u001b[0m \u001b[90m 87 |\u001b[39m   \u001b[90m// The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\u001b[39m\n \u001b[90m 88 |\u001b[39m   \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m rendered(page\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mPage\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 89 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 90 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 91 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39mresponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'this host serves static ZIP pages, not the us-pages renderer'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 92 |\u001b[39m     \u001b[36mreturn\u001b[39m response\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 33,
                            "line": 89
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/78701/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/78701/\", waiting until \"load\"\u001b[22m\n\n\n  87 |   // The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\n  88 |   async function rendered(page: import('@playwright/test').Page, path: string) {\n> 89 |     const response = await page.goto(path);\n     |                                 ^\n  90 |     expect(response?.status(), `${path} should answer 200`).toBe(200);\n  91 |     test.skip(!response?.headers()['x-graph-build'], 'this host serves static ZIP pages, not the us-pages renderer');\n  92 |     return response;\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:96:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:33.236Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-b006c-37-and-Travis-County-linked-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-b006c-37-and-Travis-County-linked-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-b006c-37-and-Travis-County-linked-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-b006c-37-and-Travis-County-linked-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 33,
                        "line": 89
                      }
                    },
                    {
                      "workerIndex": 548,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 172,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/78701/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/78701/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/78701/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/78701/\", waiting until \"load\"\u001b[22m\n\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:96:11",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 33,
                          "line": 89
                        },
                        "snippet": "\u001b[0m \u001b[90m 87 |\u001b[39m   \u001b[90m// The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\u001b[39m\n \u001b[90m 88 |\u001b[39m   \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m rendered(page\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mPage\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 89 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 90 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 91 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39mresponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'this host serves static ZIP pages, not the us-pages renderer'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 92 |\u001b[39m     \u001b[36mreturn\u001b[39m response\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 33,
                            "line": 89
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/78701/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/78701/\", waiting until \"load\"\u001b[22m\n\n\n  87 |   // The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\n  88 |   async function rendered(page: import('@playwright/test').Page, path: string) {\n> 89 |     const response = await page.goto(path);\n     |                                 ^\n  90 |     expect(response?.status(), `${path} should answer 200`).toBe(200);\n  91 |     test.skip(!response?.headers()['x-graph-build'], 'this host serves static ZIP pages, not the us-pages renderer');\n  92 |     return response;\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:96:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:34.319Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-b006c-37-and-Travis-County-linked-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-b006c-37-and-Travis-County-linked-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 33,
                        "line": 89
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9e1d6d67ffc6aff66f08-dcfd4ffc4d7c795082e0",
              "file": "tests/ui/postalcodes.spec.ts",
              "line": 95,
              "column": 7
            },
            {
              "title": "02467 lists three districts, largest overlap first, and three counties",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 574,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 181,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/02467/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/02467/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/02467/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/02467/\", waiting until \"load\"\u001b[22m\n\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:105:11",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 33,
                          "line": 89
                        },
                        "snippet": "\u001b[0m \u001b[90m 87 |\u001b[39m   \u001b[90m// The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\u001b[39m\n \u001b[90m 88 |\u001b[39m   \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m rendered(page\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mPage\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 89 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 90 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 91 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39mresponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'this host serves static ZIP pages, not the us-pages renderer'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 92 |\u001b[39m     \u001b[36mreturn\u001b[39m response\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 33,
                            "line": 89
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/02467/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/02467/\", waiting until \"load\"\u001b[22m\n\n\n  87 |   // The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\n  88 |   async function rendered(page: import('@playwright/test').Page, path: string) {\n> 89 |     const response = await page.goto(path);\n     |                                 ^\n  90 |     expect(response?.status(), `${path} should answer 200`).toBe(200);\n  91 |     test.skip(!response?.headers()['x-graph-build'], 'this host serves static ZIP pages, not the us-pages renderer');\n  92 |     return response;\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:105:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:35.270Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-8dbdc-ap-first-and-three-counties-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-8dbdc-ap-first-and-three-counties-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 33,
                        "line": 89
                      }
                    },
                    {
                      "workerIndex": 595,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 274,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/02467/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/02467/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/02467/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/02467/\", waiting until \"load\"\u001b[22m\n\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:105:11",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 33,
                          "line": 89
                        },
                        "snippet": "\u001b[0m \u001b[90m 87 |\u001b[39m   \u001b[90m// The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\u001b[39m\n \u001b[90m 88 |\u001b[39m   \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m rendered(page\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mPage\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 89 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 90 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 91 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39mresponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'this host serves static ZIP pages, not the us-pages renderer'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 92 |\u001b[39m     \u001b[36mreturn\u001b[39m response\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 33,
                            "line": 89
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/02467/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/02467/\", waiting until \"load\"\u001b[22m\n\n\n  87 |   // The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\n  88 |   async function rendered(page: import('@playwright/test').Page, path: string) {\n> 89 |     const response = await page.goto(path);\n     |                                 ^\n  90 |     expect(response?.status(), `${path} should answer 200`).toBe(200);\n  91 |     test.skip(!response?.headers()['x-graph-build'], 'this host serves static ZIP pages, not the us-pages renderer');\n  92 |     return response;\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:105:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:36.309Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-8dbdc-ap-first-and-three-counties-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-8dbdc-ap-first-and-three-counties-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-8dbdc-ap-first-and-three-counties-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-8dbdc-ap-first-and-three-counties-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 33,
                        "line": 89
                      }
                    },
                    {
                      "workerIndex": 622,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 167,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/02467/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/02467/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/02467/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/02467/\", waiting until \"load\"\u001b[22m\n\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:105:11",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 33,
                          "line": 89
                        },
                        "snippet": "\u001b[0m \u001b[90m 87 |\u001b[39m   \u001b[90m// The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\u001b[39m\n \u001b[90m 88 |\u001b[39m   \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m rendered(page\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mPage\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 89 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 90 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 91 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39mresponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'this host serves static ZIP pages, not the us-pages renderer'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 92 |\u001b[39m     \u001b[36mreturn\u001b[39m response\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 33,
                            "line": 89
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/02467/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/02467/\", waiting until \"load\"\u001b[22m\n\n\n  87 |   // The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\n  88 |   async function rendered(page: import('@playwright/test').Page, path: string) {\n> 89 |     const response = await page.goto(path);\n     |                                 ^\n  90 |     expect(response?.status(), `${path} should answer 200`).toBe(200);\n  91 |     test.skip(!response?.headers()['x-graph-build'], 'this host serves static ZIP pages, not the us-pages renderer');\n  92 |     return response;\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:105:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:37.408Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-8dbdc-ap-first-and-three-counties-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-8dbdc-ap-first-and-three-counties-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 33,
                        "line": 89
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9e1d6d67ffc6aff66f08-29298cb4d577f7a7bfe7",
              "file": "tests/ui/postalcodes.spec.ts",
              "line": 104,
              "column": 7
            },
            {
              "title": "the water-only \"ZZ\" district is not listed: 60611 (Chicago, on Lake Michigan)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 643,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 158,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/60611/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/60611/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/60611/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/60611/\", waiting until \"load\"\u001b[22m\n\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:114:11",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 33,
                          "line": 89
                        },
                        "snippet": "\u001b[0m \u001b[90m 87 |\u001b[39m   \u001b[90m// The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\u001b[39m\n \u001b[90m 88 |\u001b[39m   \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m rendered(page\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mPage\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 89 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 90 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 91 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39mresponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'this host serves static ZIP pages, not the us-pages renderer'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 92 |\u001b[39m     \u001b[36mreturn\u001b[39m response\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 33,
                            "line": 89
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/60611/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/60611/\", waiting until \"load\"\u001b[22m\n\n\n  87 |   // The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\n  88 |   async function rendered(page: import('@playwright/test').Page, path: string) {\n> 89 |     const response = await page.goto(path);\n     |                                 ^\n  90 |     expect(response?.status(), `${path} should answer 200`).toBe(200);\n  91 |     test.skip(!response?.headers()['x-graph-build'], 'this host serves static ZIP pages, not the us-pages renderer');\n  92 |     return response;\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:114:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:38.358Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-53b84-1-Chicago-on-Lake-Michigan--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-53b84-1-Chicago-on-Lake-Michigan--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 33,
                        "line": 89
                      }
                    },
                    {
                      "workerIndex": 664,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 299,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/60611/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/60611/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/60611/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/60611/\", waiting until \"load\"\u001b[22m\n\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:114:11",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 33,
                          "line": 89
                        },
                        "snippet": "\u001b[0m \u001b[90m 87 |\u001b[39m   \u001b[90m// The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\u001b[39m\n \u001b[90m 88 |\u001b[39m   \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m rendered(page\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mPage\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 89 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 90 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 91 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39mresponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'this host serves static ZIP pages, not the us-pages renderer'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 92 |\u001b[39m     \u001b[36mreturn\u001b[39m response\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 33,
                            "line": 89
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/60611/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/60611/\", waiting until \"load\"\u001b[22m\n\n\n  87 |   // The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\n  88 |   async function rendered(page: import('@playwright/test').Page, path: string) {\n> 89 |     const response = await page.goto(path);\n     |                                 ^\n  90 |     expect(response?.status(), `${path} should answer 200`).toBe(200);\n  91 |     test.skip(!response?.headers()['x-graph-build'], 'this host serves static ZIP pages, not the us-pages renderer');\n  92 |     return response;\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:114:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:39.232Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-53b84-1-Chicago-on-Lake-Michigan--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-53b84-1-Chicago-on-Lake-Michigan--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-53b84-1-Chicago-on-Lake-Michigan--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-53b84-1-Chicago-on-Lake-Michigan--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 33,
                        "line": 89
                      }
                    },
                    {
                      "workerIndex": 690,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/60611/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/60611/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/60611/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/60611/\", waiting until \"load\"\u001b[22m\n\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:114:11",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 33,
                          "line": 89
                        },
                        "snippet": "\u001b[0m \u001b[90m 87 |\u001b[39m   \u001b[90m// The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\u001b[39m\n \u001b[90m 88 |\u001b[39m   \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m rendered(page\u001b[33m:\u001b[39m \u001b[36mimport\u001b[39m(\u001b[32m'@playwright/test'\u001b[39m)\u001b[33m.\u001b[39m\u001b[33mPage\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 89 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(path)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 90 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 91 |\u001b[39m     test\u001b[33m.\u001b[39mskip(\u001b[33m!\u001b[39mresponse\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'this host serves static ZIP pages, not the us-pages renderer'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 92 |\u001b[39m     \u001b[36mreturn\u001b[39m response\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 33,
                            "line": 89
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/postalcodes/60611/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/postalcodes/60611/\", waiting until \"load\"\u001b[22m\n\n\n  87 |   // The us-pages renderer marks its pages with x-graph-build; static pages predate the OVERLAPS edges.\n  88 |   async function rendered(page: import('@playwright/test').Page, path: string) {\n> 89 |     const response = await page.goto(path);\n     |                                 ^\n  90 |     expect(response?.status(), `${path} should answer 200`).toBe(200);\n  91 |     test.skip(!response?.headers()['x-graph-build'], 'this host serves static ZIP pages, not the us-pages renderer');\n  92 |     return response;\n    at rendered (/app/tests/ui/postalcodes.spec.ts:89:33)\n    at /app/tests/ui/postalcodes.spec.ts:114:11"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.401Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-53b84-1-Chicago-on-Lake-Michigan--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-53b84-1-Chicago-on-Lake-Michigan--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 33,
                        "line": 89
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9e1d6d67ffc6aff66f08-c65d4ecf3d263b810145",
              "file": "tests/ui/postalcodes.spec.ts",
              "line": 113,
              "column": 7
            },
            {
              "title": "the ZIP list shows each ZIP with its districts",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 711,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 165,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:121:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:121:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:41.344Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-69177-each-ZIP-with-its-districts-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-69177-each-ZIP-with-its-districts-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 730,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 265,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:121:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:121:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:42.332Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-69177-each-ZIP-with-its-districts-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-69177-each-ZIP-with-its-districts-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-69177-each-ZIP-with-its-districts-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-69177-each-ZIP-with-its-districts-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    },
                    {
                      "workerIndex": 754,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 180,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:121:23",
                        "location": {
                          "file": "/app/tests/ui/postalcodes.spec.ts",
                          "column": 29,
                          "line": 12
                        },
                        "snippet": "\u001b[0m \u001b[90m 10 |\u001b[39m\n \u001b[90m 11 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiHasOverlaps(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 12 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 13 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"PostalCode\") { fields { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 14 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 15 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/postalcodes.spec.ts",
                            "column": 29,
                            "line": 12
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 64\u001b[22m\n\n\n  10 |\n  11 | async function apiHasOverlaps(request: APIRequestContext): Promise<boolean> {\n> 12 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  13 |     data: { query: '{ __type(name: \"PostalCode\") { fields { name } } }' },\n  14 |     headers: visitorHeaders(),\n  15 |   });\n    at apiHasOverlaps (/app/tests/ui/postalcodes.spec.ts:12:29)\n    at /app/tests/ui/postalcodes.spec.ts:121:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:43.381Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-69177-each-ZIP-with-its-districts-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/postalcodes-ZIP-code-pages-69177-each-ZIP-with-its-districts-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/postalcodes.spec.ts",
                        "column": 29,
                        "line": 12
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "9e1d6d67ffc6aff66f08-6c3a7e83de813fd10f0b",
              "file": "tests/ui/postalcodes.spec.ts",
              "line": 120,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/routing.spec.ts",
      "file": "tests/ui/routing.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "routing: canonical URLs per collection",
          "file": "tests/ui/routing.spec.ts",
          "line": 40,
          "column": 6,
          "specs": [
            {
              "title": "candidates: sitemap URLs serve their page with rel=canonical = the sitemap URL",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                      "location": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "line": 41,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 27,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.337Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "line": 41,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "43935043b4e8ab2472fa-7e72ef257b7e33487ee9",
              "file": "tests/ui/routing.spec.ts",
              "line": 44,
              "column": 9
            },
            {
              "title": "committees: sitemap URLs serve their page with rel=canonical = the sitemap URL",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                      "location": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "line": 41,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 27,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.341Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "line": 41,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "43935043b4e8ab2472fa-6a2ccbae2d970ac2c3e6",
              "file": "tests/ui/routing.spec.ts",
              "line": 44,
              "column": 9
            },
            {
              "title": "parties: sitemap URLs serve their page with rel=canonical = the sitemap URL",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                      "location": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "line": 41,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 27,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.342Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "line": 41,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "43935043b4e8ab2472fa-9a390171348199e3fe37",
              "file": "tests/ui/routing.spec.ts",
              "line": 44,
              "column": 9
            },
            {
              "title": "offices: sitemap URLs serve their page with rel=canonical = the sitemap URL",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                      "location": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "line": 41,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 27,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.342Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "line": 41,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "43935043b4e8ab2472fa-d3be535c29f4096c9220",
              "file": "tests/ui/routing.spec.ts",
              "line": 44,
              "column": 9
            },
            {
              "title": "districts: sitemap URLs serve their page with rel=canonical = the sitemap URL",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                      "location": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "line": 41,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 27,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.343Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "line": 41,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "43935043b4e8ab2472fa-427ce06575114febc501",
              "file": "tests/ui/routing.spec.ts",
              "line": 44,
              "column": 9
            },
            {
              "title": "states: sitemap URLs serve their page with rel=canonical = the sitemap URL",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                      "location": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "line": 41,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 27,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.343Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "line": 41,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "43935043b4e8ab2472fa-8e99a0e3eb3637999e3a",
              "file": "tests/ui/routing.spec.ts",
              "line": 44,
              "column": 9
            },
            {
              "title": "elections: sitemap URLs serve their page with rel=canonical = the sitemap URL",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                      "location": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "line": 41,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 27,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.343Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "line": 41,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "43935043b4e8ab2472fa-9897885e79ca8680f521",
              "file": "tests/ui/routing.spec.ts",
              "line": 44,
              "column": 9
            },
            {
              "title": "party badge links by FEC code redirect to the party page",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [
                    {
                      "type": "skip",
                      "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                      "location": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "line": 41,
                        "column": 8
                      }
                    }
                  ],
                  "expectedStatus": "skipped",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 27,
                      "status": "skipped",
                      "duration": 0,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.343Z",
                      "annotations": [
                        {
                          "type": "skip",
                          "description": "Set EXPECT_ALIASES=1 against a target with published page paths",
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "line": 41,
                            "column": 8
                          }
                        }
                      ],
                      "attachments": []
                    }
                  ],
                  "status": "skipped"
                }
              ],
              "id": "43935043b4e8ab2472fa-6f7f16146e9fcae9c6f1",
              "file": "tests/ui/routing.spec.ts",
              "line": 59,
              "column": 7
            }
          ]
        },
        {
          "title": "routing: every index link resolves",
          "file": "tests/ui/routing.spec.ts",
          "line": 71,
          "column": 6,
          "specs": [
            {
              "title": "/candidates/ first-page links all answer 200 or 301",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 27,
                      "status": "timedOut",
                      "duration": 130059,
                      "error": {
                        "message": "\u001b[31mTest timeout of 120000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 120000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 120000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.343Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-d47ad-links-all-answer-200-or-301-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 332,
                      "parallelIndex": 27,
                      "status": "failed",
                      "duration": 69860,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:34.063Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-d47ad-links-all-answer-200-or-301-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-d47ad-links-all-answer-200-or-301-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-d47ad-links-all-answer-200-or-301-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-d47ad-links-all-answer-200-or-301-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 777,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 166,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:44.684Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-d47ad-links-all-answer-200-or-301-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-d47ad-links-all-answer-200-or-301-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-a17ae3fc2924fcb5ebd6",
              "file": "tests/ui/routing.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "/committees/ first-page links all answer 200 or 301",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 796,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 168,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:45.591Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-a9934-links-all-answer-200-or-301-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-a9934-links-all-answer-200-or-301-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 815,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 273,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:46.506Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-a9934-links-all-answer-200-or-301-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-a9934-links-all-answer-200-or-301-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-a9934-links-all-answer-200-or-301-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-a9934-links-all-answer-200-or-301-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 832,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 160,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/committees/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/committees/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:47.551Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-a9934-links-all-answer-200-or-301-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-a9934-links-all-answer-200-or-301-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-5a49ba9c6938493d73e1",
              "file": "tests/ui/routing.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "/parties/ first-page links all answer 200 or 301",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 848,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:48.405Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-460ac-links-all-answer-200-or-301-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-460ac-links-all-answer-200-or-301-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 863,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 261,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:49.320Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-460ac-links-all-answer-200-or-301-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-460ac-links-all-answer-200-or-301-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-460ac-links-all-answer-200-or-301-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-460ac-links-all-answer-200-or-301-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 879,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 131,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/parties/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/parties/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:50.372Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-460ac-links-all-answer-200-or-301-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-460ac-links-all-answer-200-or-301-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-c682837875ef71f142bb",
              "file": "tests/ui/routing.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "/offices/ first-page links all answer 200 or 301",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 894,
                      "parallelIndex": 12,
                      "status": "failed",
                      "duration": 147,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:51.206Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-530ff-links-all-answer-200-or-301-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-530ff-links-all-answer-200-or-301-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 904,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 241,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:52.268Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-530ff-links-all-answer-200-or-301-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-530ff-links-all-answer-200-or-301-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-530ff-links-all-answer-200-or-301-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-530ff-links-all-answer-200-or-301-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 921,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/offices/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/offices/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:53.217Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-530ff-links-all-answer-200-or-301-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-530ff-links-all-answer-200-or-301-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-89f42d8f841e3082c77a",
              "file": "tests/ui/routing.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "/districts/ first-page links all answer 200 or 301",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 932,
                      "parallelIndex": 9,
                      "status": "failed",
                      "duration": 153,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:54.052Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-05f7d-links-all-answer-200-or-301-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-05f7d-links-all-answer-200-or-301-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 942,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 223,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:54.829Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-05f7d-links-all-answer-200-or-301-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-05f7d-links-all-answer-200-or-301-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-05f7d-links-all-answer-200-or-301-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-05f7d-links-all-answer-200-or-301-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 954,
                      "parallelIndex": 8,
                      "status": "failed",
                      "duration": 145,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/districts/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/districts/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:55.738Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-05f7d-links-all-answer-200-or-301-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-05f7d-links-all-answer-200-or-301-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-88f733cf8629f34dddff",
              "file": "tests/ui/routing.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "/elections/ first-page links all answer 200 or 301",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 964,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 135,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:56.527Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-57a14-links-all-answer-200-or-301-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-57a14-links-all-answer-200-or-301-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 974,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 236,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:57.303Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-57a14-links-all-answer-200-or-301-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-57a14-links-all-answer-200-or-301-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-57a14-links-all-answer-200-or-301-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-57a14-links-all-answer-200-or-301-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 984,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 129,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/elections/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/elections/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:58.231Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-57a14-links-all-answer-200-or-301-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-57a14-links-all-answer-200-or-301-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-3800effe3714880c03cd",
              "file": "tests/ui/routing.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "/employers/ first-page links all answer 200 or 301",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 991,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 138,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:59.000Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-96c98-links-all-answer-200-or-301-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-96c98-links-all-answer-200-or-301-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 997,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 205,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:59.757Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-96c98-links-all-answer-200-or-301-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-96c98-links-all-answer-200-or-301-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-96c98-links-all-answer-200-or-301-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-96c98-links-all-answer-200-or-301-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 1003,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 127,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/employers/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/employers/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:00.599Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-96c98-links-all-answer-200-or-301-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-96c98-links-all-answer-200-or-301-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-22e23060552aa17bc15f",
              "file": "tests/ui/routing.spec.ts",
              "line": 73,
              "column": 9
            },
            {
              "title": "/vendors/ first-page links all answer 200 or 301",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1008,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 141,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:01.308Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-cf190-links-all-answer-200-or-301-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-cf190-links-all-answer-200-or-301-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 1014,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 210,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:02.057Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-cf190-links-all-answer-200-or-301-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-cf190-links-all-answer-200-or-301-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-cf190-links-all-answer-200-or-301-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-cf190-links-all-answer-200-or-301-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    },
                    {
                      "workerIndex": 1019,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 126,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:75:30",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 30,
                          "line": 75
                        },
                        "snippet": "\u001b[0m \u001b[90m 73 |\u001b[39m     test(\u001b[32m`${index} first-page links all answer 200 or 301`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 74 |\u001b[39m       test\u001b[33m.\u001b[39msetTimeout(\u001b[35m120000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 75 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(index)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 76 |\u001b[39m       expect(res\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${index} should answer 200`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 77 |\u001b[39m       \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m,\u001b[39m \u001b[32m`${index} should list results`\u001b[39m)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 78 |\u001b[39m       \u001b[36mconst\u001b[39m hrefs \u001b[33m=\u001b[39m (\u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'.entity-search-result'\u001b[39m)\u001b[33m.\u001b[39mevaluateAll(els \u001b[33m=>\u001b[39m els\u001b[33m.\u001b[39mmap(e \u001b[33m=>\u001b[39m e\u001b[33m.\u001b[39mgetAttribute(\u001b[32m'href'\u001b[39m))))\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 30,
                            "line": 75
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/\", waiting until \"load\"\u001b[22m\n\n\n  73 |     test(`${index} first-page links all answer 200 or 301`, async ({ page, request }) => {\n  74 |       test.setTimeout(120000);\n> 75 |       const res = await page.goto(index);\n     |                              ^\n  76 |       expect(res?.status(), `${index} should answer 200`).toBe(200);\n  77 |       await expect(page.locator('.entity-search-result').first(), `${index} should list results`).toBeVisible({ timeout: 15000 });\n  78 |       const hrefs = (await page.locator('.entity-search-result').evaluateAll(els => els.map(e => e.getAttribute('href'))))\n    at /app/tests/ui/routing.spec.ts:75:30"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:02.902Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-cf190-links-all-answer-200-or-301-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-every-inde-cf190-links-all-answer-200-or-301-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 30,
                        "line": 75
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-676c232661cc4f58e461",
              "file": "tests/ui/routing.spec.ts",
              "line": 73,
              "column": 9
            }
          ]
        },
        {
          "title": "routing: unknown addresses",
          "file": "tests/ui/routing.spec.ts",
          "line": 91,
          "column": 6,
          "specs": [
            {
              "title": "an unknown entity path answers 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1024,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 21,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:98:33",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 33,
                          "line": 98
                        },
                        "snippet": "\u001b[0m \u001b[90m  96 |\u001b[39m     \u001b[90m// leaf collections are covered below.\u001b[39m\n \u001b[90m  97 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/candidates/no-such-entity-zz/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/committees/no-such-entity-zz/'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m  98 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m  99 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 404`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 100 |\u001b[39m     }\n \u001b[90m 101 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 33,
                            "line": 98
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   96 |     // leaf collections are covered below.\n   97 |     for (const path of ['/candidates/no-such-entity-zz/', '/committees/no-such-entity-zz/']) {\n>  98 |       const res = await request.get(path, { maxRedirects: 0 });\n      |                                 ^\n   99 |       expect(res.status(), `${path} should answer 404`).toBe(404);\n  100 |     }\n  101 |   });\n    at /app/tests/ui/routing.spec.ts:98:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:03.635Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-unknown-ad-8ff51-own-entity-path-answers-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 33,
                        "line": 98
                      }
                    },
                    {
                      "workerIndex": 1028,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 44,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:98:33",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 33,
                          "line": 98
                        },
                        "snippet": "\u001b[0m \u001b[90m  96 |\u001b[39m     \u001b[90m// leaf collections are covered below.\u001b[39m\n \u001b[90m  97 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/candidates/no-such-entity-zz/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/committees/no-such-entity-zz/'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m  98 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m  99 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 404`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 100 |\u001b[39m     }\n \u001b[90m 101 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 33,
                            "line": 98
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   96 |     // leaf collections are covered below.\n   97 |     for (const path of ['/candidates/no-such-entity-zz/', '/committees/no-such-entity-zz/']) {\n>  98 |       const res = await request.get(path, { maxRedirects: 0 });\n      |                                 ^\n   99 |       expect(res.status(), `${path} should answer 404`).toBe(404);\n  100 |     }\n  101 |   });\n    at /app/tests/ui/routing.spec.ts:98:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:04.164Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-unknown-ad-8ff51-own-entity-path-answers-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-unknown-ad-8ff51-own-entity-path-answers-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 33,
                        "line": 98
                      }
                    },
                    {
                      "workerIndex": 1032,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 19,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/routing.spec.ts:98:33",
                        "location": {
                          "file": "/app/tests/ui/routing.spec.ts",
                          "column": 33,
                          "line": 98
                        },
                        "snippet": "\u001b[0m \u001b[90m  96 |\u001b[39m     \u001b[90m// leaf collections are covered below.\u001b[39m\n \u001b[90m  97 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/candidates/no-such-entity-zz/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/committees/no-such-entity-zz/'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m  98 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m  99 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${path} should answer 404`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 100 |\u001b[39m     }\n \u001b[90m 101 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/routing.spec.ts",
                            "column": 33,
                            "line": 98
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   96 |     // leaf collections are covered below.\n   97 |     for (const path of ['/candidates/no-such-entity-zz/', '/committees/no-such-entity-zz/']) {\n>  98 |       const res = await request.get(path, { maxRedirects: 0 });\n      |                                 ^\n   99 |       expect(res.status(), `${path} should answer 404`).toBe(404);\n  100 |     }\n  101 |   });\n    at /app/tests/ui/routing.spec.ts:98:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:04.757Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-unknown-ad-8ff51-own-entity-path-answers-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/routing.spec.ts",
                        "column": 33,
                        "line": 98
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-b05908296c32b152b967",
              "file": "tests/ui/routing.spec.ts",
              "line": 92,
              "column": 7
            },
            {
              "title": "an unknown leaf entity path serves the collection shell",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1036,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at /app/tests/ui/routing.spec.ts:110:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at /app/tests/ui/routing.spec.ts:110:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:05.300Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-unknown-ad-1c942-serves-the-collection-shell-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 1040,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 53,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at /app/tests/ui/routing.spec.ts:110:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at /app/tests/ui/routing.spec.ts:110:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:05.847Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-unknown-ad-1c942-serves-the-collection-shell-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-unknown-ad-1c942-serves-the-collection-shell-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 1044,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 21,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at /app/tests/ui/routing.spec.ts:110:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/individuals/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at /app/tests/ui/routing.spec.ts:110:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:06.465Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/routing-routing-unknown-ad-1c942-serves-the-collection-shell-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "43935043b4e8ab2472fa-bcb1fae8f9ad8a3e2a8b",
              "file": "tests/ui/routing.spec.ts",
              "line": 103,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/serving.spec.ts",
      "file": "tests/ui/serving.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "sitemaps",
          "file": "tests/ui/serving.spec.ts",
          "line": 22,
          "column": 6,
          "specs": [
            {
              "title": "candidates: the index lists one file per lead character, each a urlset",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 27,
                      "parallelIndex": 28,
                      "status": "timedOut",
                      "duration": 30015,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 25
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-candidates.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  23 |   for (const collection of ['candidates', 'committees']) {\n  24 |     test(`${collection}: the index lists one file per lead character, each a urlset`, async ({ request }) => {\n> 25 |       const res = await request.get(`/${collection}/sitemap-${collection}.xml`);\n     |                                 ^\n  26 |       expect(res.status()).toBe(200);\n  27 |       expect(res.headers()['content-type']).toContain('xml');\n  28 |       const xml = await res.text();\n    at /app/tests/ui/serving.spec.ts:25:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.287Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-candidate-8ae73-ead-character-each-a-urlset-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 42,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 11255,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-candidates.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-candidates.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:25:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 25
                        },
                        "snippet": "\u001b[0m \u001b[90m 23 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'candidates'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'committees'\u001b[39m]) {\n \u001b[90m 24 |\u001b[39m     test(\u001b[32m`${collection}: the index lists one file per lead character, each a urlset`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 25 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}/sitemap-${collection}.xml`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 26 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'xml'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m xml \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 25
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-candidates.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  23 |   for (const collection of ['candidates', 'committees']) {\n  24 |     test(`${collection}: the index lists one file per lead character, each a urlset`, async ({ request }) => {\n> 25 |       const res = await request.get(`/${collection}/sitemap-${collection}.xml`);\n     |                                 ^\n  26 |       expect(res.status()).toBe(200);\n  27 |       expect(res.headers()['content-type']).toContain('xml');\n  28 |       const xml = await res.text();\n    at /app/tests/ui/serving.spec.ts:25:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:01:53.910Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-candidate-8ae73-ead-character-each-a-urlset-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-candidate-8ae73-ead-character-each-a-urlset-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 25
                      }
                    },
                    {
                      "workerIndex": 77,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 33,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-candidates.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-candidates.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:25:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 25
                        },
                        "snippet": "\u001b[0m \u001b[90m 23 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'candidates'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'committees'\u001b[39m]) {\n \u001b[90m 24 |\u001b[39m     test(\u001b[32m`${collection}: the index lists one file per lead character, each a urlset`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 25 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}/sitemap-${collection}.xml`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 26 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'xml'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m xml \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 25
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-candidates.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  23 |   for (const collection of ['candidates', 'committees']) {\n  24 |     test(`${collection}: the index lists one file per lead character, each a urlset`, async ({ request }) => {\n> 25 |       const res = await request.get(`/${collection}/sitemap-${collection}.xml`);\n     |                                 ^\n  26 |       expect(res.status()).toBe(200);\n  27 |       expect(res.headers()['content-type']).toContain('xml');\n  28 |       const xml = await res.text();\n    at /app/tests/ui/serving.spec.ts:25:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:06.100Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-candidate-8ae73-ead-character-each-a-urlset-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 25
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-9767824df806d6118ac7",
              "file": "tests/ui/serving.spec.ts",
              "line": 24,
              "column": 9
            },
            {
              "title": "committees: the index lists one file per lead character, each a urlset",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 102,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/sitemap-committees.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/sitemap-committees.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:25:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 25
                        },
                        "snippet": "\u001b[0m \u001b[90m 23 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'candidates'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'committees'\u001b[39m]) {\n \u001b[90m 24 |\u001b[39m     test(\u001b[32m`${collection}: the index lists one file per lead character, each a urlset`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 25 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}/sitemap-${collection}.xml`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 26 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'xml'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m xml \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 25
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/sitemap-committees.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  23 |   for (const collection of ['candidates', 'committees']) {\n  24 |     test(`${collection}: the index lists one file per lead character, each a urlset`, async ({ request }) => {\n> 25 |       const res = await request.get(`/${collection}/sitemap-${collection}.xml`);\n     |                                 ^\n  26 |       expect(res.status()).toBe(200);\n  27 |       expect(res.headers()['content-type']).toContain('xml');\n  28 |       const xml = await res.text();\n    at /app/tests/ui/serving.spec.ts:25:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.901Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-committee-6152b-ead-character-each-a-urlset-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 25
                      }
                    },
                    {
                      "workerIndex": 126,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 72,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/sitemap-committees.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/sitemap-committees.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:25:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 25
                        },
                        "snippet": "\u001b[0m \u001b[90m 23 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'candidates'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'committees'\u001b[39m]) {\n \u001b[90m 24 |\u001b[39m     test(\u001b[32m`${collection}: the index lists one file per lead character, each a urlset`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 25 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}/sitemap-${collection}.xml`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 26 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'xml'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m xml \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 25
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/sitemap-committees.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  23 |   for (const collection of ['candidates', 'committees']) {\n  24 |     test(`${collection}: the index lists one file per lead character, each a urlset`, async ({ request }) => {\n> 25 |       const res = await request.get(`/${collection}/sitemap-${collection}.xml`);\n     |                                 ^\n  26 |       expect(res.status()).toBe(200);\n  27 |       expect(res.headers()['content-type']).toContain('xml');\n  28 |       const xml = await res.text();\n    at /app/tests/ui/serving.spec.ts:25:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.733Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-committee-6152b-ead-character-each-a-urlset-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-committee-6152b-ead-character-each-a-urlset-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 25
                      }
                    },
                    {
                      "workerIndex": 139,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 30,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/sitemap-committees.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/sitemap-committees.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:25:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 25
                        },
                        "snippet": "\u001b[0m \u001b[90m 23 |\u001b[39m   \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'candidates'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'committees'\u001b[39m]) {\n \u001b[90m 24 |\u001b[39m     test(\u001b[32m`${collection}: the index lists one file per lead character, each a urlset`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 25 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}/sitemap-${collection}.xml`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 26 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'xml'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 28 |\u001b[39m       \u001b[36mconst\u001b[39m xml \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 25
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/sitemap-committees.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  23 |   for (const collection of ['candidates', 'committees']) {\n  24 |     test(`${collection}: the index lists one file per lead character, each a urlset`, async ({ request }) => {\n> 25 |       const res = await request.get(`/${collection}/sitemap-${collection}.xml`);\n     |                                 ^\n  26 |       expect(res.status()).toBe(200);\n  27 |       expect(res.headers()['content-type']).toContain('xml');\n  28 |       const xml = await res.text();\n    at /app/tests/ui/serving.spec.ts:25:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.595Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-committee-6152b-ead-character-each-a-urlset-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 25
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-94aa544e2eac8eead0f5",
              "file": "tests/ui/serving.spec.ts",
              "line": 24,
              "column": 9
            },
            {
              "title": "a single-file collection sitemap is a urlset of its own pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 163,
                      "parallelIndex": 28,
                      "status": "timedOut",
                      "duration": 30023,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 43
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/sitemap-parties.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  41 |\n  42 |   test('a single-file collection sitemap is a urlset of its own pages', async ({ request }) => {\n> 43 |     const res = await request.get('/parties/sitemap-parties.xml');\n     |                               ^\n  44 |     expect(res.status()).toBe(200);\n  45 |     const all = locs(await res.text());\n  46 |     expect(all.length).toBeGreaterThan(50);\n    at /app/tests/ui/serving.spec.ts:43:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.392Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-a-single--1a512-s-a-urlset-of-its-own-pages-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 187,
                      "parallelIndex": 28,
                      "status": "timedOut",
                      "duration": 30043,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 43
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/sitemap-parties.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  41 |\n  42 |   test('a single-file collection sitemap is a urlset of its own pages', async ({ request }) => {\n> 43 |     const res = await request.get('/parties/sitemap-parties.xml');\n     |                               ^\n  44 |     expect(res.status()).toBe(200);\n  45 |     const all = locs(await res.text());\n  46 |     expect(all.length).toBeGreaterThan(50);\n    at /app/tests/ui/serving.spec.ts:43:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:39.979Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-a-single--1a512-s-a-urlset-of-its-own-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-a-single--1a512-s-a-urlset-of-its-own-pages-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 322,
                      "parallelIndex": 28,
                      "status": "timedOut",
                      "duration": 30022,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 43
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/parties/sitemap-parties.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  41 |\n  42 |   test('a single-file collection sitemap is a urlset of its own pages', async ({ request }) => {\n> 43 |     const res = await request.get('/parties/sitemap-parties.xml');\n     |                               ^\n  44 |     expect(res.status()).toBe(200);\n  45 |     const all = locs(await res.text());\n  46 |     expect(all.length).toBeGreaterThan(50);\n    at /app/tests/ui/serving.spec.ts:43:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:10.593Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-a-single--1a512-s-a-urlset-of-its-own-pages-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-63d1a6acfa8333a6974d",
              "file": "tests/ui/serving.spec.ts",
              "line": 42,
              "column": 7
            },
            {
              "title": "a sitemap that does not exist is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 338,
                      "parallelIndex": 28,
                      "status": "timedOut",
                      "duration": 30040,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 29,
                            "line": 52
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-nope.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  50 |   test('a sitemap that does not exist is 404', async ({ request }) => {\n  51 |     for (const path of ['/candidates/sitemap-nope.xml', '/candidates/sitemap-candidates-zz.xml']) {\n> 52 |       expect((await request.get(path)).status(), path).toBe(404);\n     |                             ^\n  53 |     }\n  54 |   });\n  55 | });\n    at /app/tests/ui/serving.spec.ts:52:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:41.147Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-a-sitemap-that-does-not-exist-is-404-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 434,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 19342,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-nope.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-nope.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:52:29",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 29,
                          "line": 52
                        },
                        "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m   test(\u001b[32m'a sitemap that does not exist is 404'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 51 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/candidates/sitemap-nope.xml'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/candidates/sitemap-candidates-zz.xml'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m path)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m     }\n \u001b[90m 54 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 29,
                            "line": 52
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-nope.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  50 |   test('a sitemap that does not exist is 404', async ({ request }) => {\n  51 |     for (const path of ['/candidates/sitemap-nope.xml', '/candidates/sitemap-candidates-zz.xml']) {\n> 52 |       expect((await request.get(path)).status(), path).toBe(404);\n     |                             ^\n  53 |     }\n  54 |   });\n  55 | });\n    at /app/tests/ui/serving.spec.ts:52:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:11.715Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-a-sitemap-that-does-not-exist-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-a-sitemap-that-does-not-exist-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 29,
                        "line": 52
                      }
                    },
                    {
                      "workerIndex": 487,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-nope.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-nope.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:52:29",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 29,
                          "line": 52
                        },
                        "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m   test(\u001b[32m'a sitemap that does not exist is 404'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 51 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/candidates/sitemap-nope.xml'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/candidates/sitemap-candidates-zz.xml'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m path)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m     }\n \u001b[90m 54 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 29,
                            "line": 52
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/sitemap-nope.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  50 |   test('a sitemap that does not exist is 404', async ({ request }) => {\n  51 |     for (const path of ['/candidates/sitemap-nope.xml', '/candidates/sitemap-candidates-zz.xml']) {\n> 52 |       expect((await request.get(path)).status(), path).toBe(404);\n     |                             ^\n  53 |     }\n  54 |   });\n  55 | });\n    at /app/tests/ui/serving.spec.ts:52:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:31.710Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-sitemaps-a-sitemap-that-does-not-exist-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 29,
                        "line": 52
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-27904f07922a9c50fc21",
              "file": "tests/ui/serving.spec.ts",
              "line": 50,
              "column": 7
            }
          ]
        },
        {
          "title": "static assets",
          "file": "tests/ui/serving.spec.ts",
          "line": 57,
          "column": 6,
          "specs": [
            {
              "title": "state images are SVG with CORS and caching headers",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 502,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/ak.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/ak.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:59:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 59
                        },
                        "snippet": "\u001b[0m \u001b[90m 57 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'static assets'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 58 |\u001b[39m   test(\u001b[32m'state images are SVG with CORS and caching headers'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 59 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/images/states/ak.svg'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 60 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mconst\u001b[39m h \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()\u001b[33m;\u001b[39m\n \u001b[90m 62 |\u001b[39m     expect(h[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'image/svg+xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 59
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/ak.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  57 | test.describe('static assets', () => {\n  58 |   test('state images are SVG with CORS and caching headers', async ({ request }) => {\n> 59 |     const res = await request.get('/images/states/ak.svg');\n     |                               ^\n  60 |     expect(res.status()).toBe(200);\n  61 |     const h = res.headers();\n  62 |     expect(h['content-type']).toContain('image/svg+xml');\n    at /app/tests/ui/serving.spec.ts:59:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.409Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-stat-9f2c0-th-CORS-and-caching-headers-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 59
                      }
                    },
                    {
                      "workerIndex": 519,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 53,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/ak.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/ak.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:59:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 59
                        },
                        "snippet": "\u001b[0m \u001b[90m 57 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'static assets'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 58 |\u001b[39m   test(\u001b[32m'state images are SVG with CORS and caching headers'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 59 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/images/states/ak.svg'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 60 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mconst\u001b[39m h \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()\u001b[33m;\u001b[39m\n \u001b[90m 62 |\u001b[39m     expect(h[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'image/svg+xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 59
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/ak.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  57 | test.describe('static assets', () => {\n  58 |   test('state images are SVG with CORS and caching headers', async ({ request }) => {\n> 59 |     const res = await request.get('/images/states/ak.svg');\n     |                               ^\n  60 |     expect(res.status()).toBe(200);\n  61 |     const h = res.headers();\n  62 |     expect(h['content-type']).toContain('image/svg+xml');\n    at /app/tests/ui/serving.spec.ts:59:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:33.138Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-stat-9f2c0-th-CORS-and-caching-headers-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-stat-9f2c0-th-CORS-and-caching-headers-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 59
                      }
                    },
                    {
                      "workerIndex": 537,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/ak.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/ak.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:59:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 59
                        },
                        "snippet": "\u001b[0m \u001b[90m 57 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'static assets'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 58 |\u001b[39m   test(\u001b[32m'state images are SVG with CORS and caching headers'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 59 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/images/states/ak.svg'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 60 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mconst\u001b[39m h \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()\u001b[33m;\u001b[39m\n \u001b[90m 62 |\u001b[39m     expect(h[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'image/svg+xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 59
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/ak.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  57 | test.describe('static assets', () => {\n  58 |   test('state images are SVG with CORS and caching headers', async ({ request }) => {\n> 59 |     const res = await request.get('/images/states/ak.svg');\n     |                               ^\n  60 |     expect(res.status()).toBe(200);\n  61 |     const h = res.headers();\n  62 |     expect(h['content-type']).toContain('image/svg+xml');\n    at /app/tests/ui/serving.spec.ts:59:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.878Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-stat-9f2c0-th-CORS-and-caching-headers-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 59
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-1fa533f3ce271bd3f9a7",
              "file": "tests/ui/serving.spec.ts",
              "line": 58,
              "column": 7
            },
            {
              "title": "district GeoJSON is application/geo+json and parses",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 553,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/al/al-01.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/al/al-01.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:69:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 69
                        },
                        "snippet": "\u001b[0m \u001b[90m 67 |\u001b[39m\n \u001b[90m 68 |\u001b[39m   test(\u001b[32m'district GeoJSON is application/geo+json and parses'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 69 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/districts/al/al-01.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 70 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 71 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 69
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/al/al-01.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  67 |\n  68 |   test('district GeoJSON is application/geo+json and parses', async ({ request }) => {\n> 69 |     const res = await request.get('/geo/districts/al/al-01.geojson');\n     |                               ^\n  70 |     expect(res.status()).toBe(200);\n  71 |     expect(res.headers()['content-type']).toContain('application/geo+json');\n  72 |     const geo = await res.json();\n    at /app/tests/ui/serving.spec.ts:69:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.571Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-dist-11051-ication-geo-json-and-parses-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 69
                      }
                    },
                    {
                      "workerIndex": 573,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 77,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/al/al-01.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/al/al-01.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:69:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 69
                        },
                        "snippet": "\u001b[0m \u001b[90m 67 |\u001b[39m\n \u001b[90m 68 |\u001b[39m   test(\u001b[32m'district GeoJSON is application/geo+json and parses'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 69 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/districts/al/al-01.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 70 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 71 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 69
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/al/al-01.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  67 |\n  68 |   test('district GeoJSON is application/geo+json and parses', async ({ request }) => {\n> 69 |     const res = await request.get('/geo/districts/al/al-01.geojson');\n     |                               ^\n  70 |     expect(res.status()).toBe(200);\n  71 |     expect(res.headers()['content-type']).toContain('application/geo+json');\n  72 |     const geo = await res.json();\n    at /app/tests/ui/serving.spec.ts:69:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.272Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-dist-11051-ication-geo-json-and-parses-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-dist-11051-ication-geo-json-and-parses-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 69
                      }
                    },
                    {
                      "workerIndex": 591,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/al/al-01.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/al/al-01.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:69:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 69
                        },
                        "snippet": "\u001b[0m \u001b[90m 67 |\u001b[39m\n \u001b[90m 68 |\u001b[39m   test(\u001b[32m'district GeoJSON is application/geo+json and parses'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 69 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/geo/districts/al/al-01.geojson'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 70 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 71 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/geo+json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 72 |\u001b[39m     \u001b[36mconst\u001b[39m geo \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 69
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/geo/districts/al/al-01.geojson\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  67 |\n  68 |   test('district GeoJSON is application/geo+json and parses', async ({ request }) => {\n> 69 |     const res = await request.get('/geo/districts/al/al-01.geojson');\n     |                               ^\n  70 |     expect(res.status()).toBe(200);\n  71 |     expect(res.headers()['content-type']).toContain('application/geo+json');\n  72 |     const geo = await res.json();\n    at /app/tests/ui/serving.spec.ts:69:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.091Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-dist-11051-ication-geo-json-and-parses-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 69
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-84da73e251953bb6b35b",
              "file": "tests/ui/serving.spec.ts",
              "line": 68,
              "column": 7
            },
            {
              "title": "a missing asset is 404",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 605,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/zz.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/zz.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:78:29",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 29,
                          "line": 78
                        },
                        "snippet": "\u001b[0m \u001b[90m 76 |\u001b[39m   test(\u001b[32m'a missing asset is 404'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 77 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/images/states/zz.svg'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/geo/districts/zz/zz-99.geojson'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 78 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m path)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 79 |\u001b[39m     }\n \u001b[90m 80 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 29,
                            "line": 78
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/zz.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  76 |   test('a missing asset is 404', async ({ request }) => {\n  77 |     for (const path of ['/images/states/zz.svg', '/geo/districts/zz/zz-99.geojson']) {\n> 78 |       expect((await request.get(path)).status(), path).toBe(404);\n     |                             ^\n  79 |     }\n  80 |   });\n  81 | });\n    at /app/tests/ui/serving.spec.ts:78:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:36.803Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-a-missing-asset-is-404-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 29,
                        "line": 78
                      }
                    },
                    {
                      "workerIndex": 623,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 57,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/zz.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/zz.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:78:29",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 29,
                          "line": 78
                        },
                        "snippet": "\u001b[0m \u001b[90m 76 |\u001b[39m   test(\u001b[32m'a missing asset is 404'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 77 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/images/states/zz.svg'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/geo/districts/zz/zz-99.geojson'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 78 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m path)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 79 |\u001b[39m     }\n \u001b[90m 80 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 29,
                            "line": 78
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/zz.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  76 |   test('a missing asset is 404', async ({ request }) => {\n  77 |     for (const path of ['/images/states/zz.svg', '/geo/districts/zz/zz-99.geojson']) {\n> 78 |       expect((await request.get(path)).status(), path).toBe(404);\n     |                             ^\n  79 |     }\n  80 |   });\n  81 | });\n    at /app/tests/ui/serving.spec.ts:78:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.503Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-a-missing-asset-is-404-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-a-missing-asset-is-404-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 29,
                        "line": 78
                      }
                    },
                    {
                      "workerIndex": 641,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/zz.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/zz.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:78:29",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 29,
                          "line": 78
                        },
                        "snippet": "\u001b[0m \u001b[90m 76 |\u001b[39m   test(\u001b[32m'a missing asset is 404'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 77 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/images/states/zz.svg'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/geo/districts/zz/zz-99.geojson'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 78 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m path)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 79 |\u001b[39m     }\n \u001b[90m 80 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 81 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 29,
                            "line": 78
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/images/states/zz.svg\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  76 |   test('a missing asset is 404', async ({ request }) => {\n  77 |     for (const path of ['/images/states/zz.svg', '/geo/districts/zz/zz-99.geojson']) {\n> 78 |       expect((await request.get(path)).status(), path).toBe(404);\n     |                             ^\n  79 |     }\n  80 |   });\n  81 | });\n    at /app/tests/ui/serving.spec.ts:78:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.233Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-static-assets-a-missing-asset-is-404-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 29,
                        "line": 78
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-ee59e849ca62b46a41f2",
              "file": "tests/ui/serving.spec.ts",
              "line": 76,
              "column": 7
            }
          ]
        },
        {
          "title": "collection roots",
          "file": "tests/ui/serving.spec.ts",
          "line": 83,
          "column": 6,
          "specs": [
            {
              "title": "a collection without its trailing slash redirects relatively to the index page",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 652,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:86:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 86
                        },
                        "snippet": "\u001b[0m \u001b[90m 84 |\u001b[39m   test(\u001b[32m'a collection without its trailing slash redirects relatively to the index page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 85 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'candidates'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'committees'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'parties'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 86 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 87 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`/${collection}`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m301\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 88 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`/${collection} Location`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[32m`/${collection}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 89 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}/`\u001b[39m))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 86
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  84 |   test('a collection without its trailing slash redirects relatively to the index page', async ({ request }) => {\n  85 |     for (const collection of ['candidates', 'committees', 'parties']) {\n> 86 |       const res = await request.get(`/${collection}`, { maxRedirects: 0 });\n     |                                 ^\n  87 |       expect(res.status(), `/${collection}`).toBe(301);\n  88 |       expect(res.headers()['location'], `/${collection} Location`).toBe(`/${collection}/`);\n  89 |       expect((await request.get(`/${collection}/`)).status(), `/${collection}/`).toBe(200);\n    at /app/tests/ui/serving.spec.ts:86:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:38.917Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-collection-roots-a-603a7-elatively-to-the-index-page-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 86
                      }
                    },
                    {
                      "workerIndex": 669,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 57,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:86:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 86
                        },
                        "snippet": "\u001b[0m \u001b[90m 84 |\u001b[39m   test(\u001b[32m'a collection without its trailing slash redirects relatively to the index page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 85 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'candidates'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'committees'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'parties'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 86 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 87 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`/${collection}`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m301\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 88 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`/${collection} Location`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[32m`/${collection}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 89 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}/`\u001b[39m))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 86
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  84 |   test('a collection without its trailing slash redirects relatively to the index page', async ({ request }) => {\n  85 |     for (const collection of ['candidates', 'committees', 'parties']) {\n> 86 |       const res = await request.get(`/${collection}`, { maxRedirects: 0 });\n     |                                 ^\n  87 |       expect(res.status(), `/${collection}`).toBe(301);\n  88 |       expect(res.headers()['location'], `/${collection} Location`).toBe(`/${collection}/`);\n  89 |       expect((await request.get(`/${collection}/`)).status(), `/${collection}/`).toBe(200);\n    at /app/tests/ui/serving.spec.ts:86:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:39.641Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-collection-roots-a-603a7-elatively-to-the-index-page-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-collection-roots-a-603a7-elatively-to-the-index-page-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 86
                      }
                    },
                    {
                      "workerIndex": 691,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:86:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 86
                        },
                        "snippet": "\u001b[0m \u001b[90m 84 |\u001b[39m   test(\u001b[32m'a collection without its trailing slash redirects relatively to the index page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 85 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m collection \u001b[36mof\u001b[39m [\u001b[32m'candidates'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'committees'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'parties'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 86 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 87 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`/${collection}`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m301\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 88 |\u001b[39m       expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`/${collection} Location`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[32m`/${collection}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 89 |\u001b[39m       expect((\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/${collection}/`\u001b[39m))\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`/${collection}/`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 86
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  84 |   test('a collection without its trailing slash redirects relatively to the index page', async ({ request }) => {\n  85 |     for (const collection of ['candidates', 'committees', 'parties']) {\n> 86 |       const res = await request.get(`/${collection}`, { maxRedirects: 0 });\n     |                                 ^\n  87 |       expect(res.status(), `/${collection}`).toBe(301);\n  88 |       expect(res.headers()['location'], `/${collection} Location`).toBe(`/${collection}/`);\n  89 |       expect((await request.get(`/${collection}/`)).status(), `/${collection}/`).toBe(200);\n    at /app/tests/ui/serving.spec.ts:86:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.422Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-collection-roots-a-603a7-elatively-to-the-index-page-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 86
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-35c0c19fdb3025d1d766",
              "file": "tests/ui/serving.spec.ts",
              "line": 84,
              "column": 7
            }
          ]
        },
        {
          "title": "rendered candidate and committee pages (us-pages)",
          "file": "tests/ui/serving.spec.ts",
          "line": 94,
          "column": 6,
          "specs": [
            {
              "title": "a candidate page is rendered for the current graph build",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 706,
                      "parallelIndex": 7,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:96:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 96
                        },
                        "snippet": "\u001b[0m \u001b[90m 94 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'rendered candidate and committee pages (us-pages)'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 95 |\u001b[39m   test(\u001b[32m'a candidate page is rendered for the current graph build'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 96 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/candidates/${BIDEN}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 97 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 98 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'the renderer stamps its build key'\u001b[39m)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\n \u001b[90m 99 |\u001b[39m     \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 96
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  94 | test.describe('rendered candidate and committee pages (us-pages)', () => {\n  95 |   test('a candidate page is rendered for the current graph build', async ({ request }) => {\n> 96 |     const res = await request.get(`/candidates/${BIDEN}/`);\n     |                               ^\n  97 |     expect(res.status()).toBe(200);\n  98 |     expect(res.headers()['x-graph-build'], 'the renderer stamps its build key').toBeTruthy();\n  99 |     const html = await res.text();\n    at /app/tests/ui/serving.spec.ts:96:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:41.132Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-dde82-for-the-current-graph-build-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 96
                      }
                    },
                    {
                      "workerIndex": 718,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 47,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:96:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 96
                        },
                        "snippet": "\u001b[0m \u001b[90m 94 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'rendered candidate and committee pages (us-pages)'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 95 |\u001b[39m   test(\u001b[32m'a candidate page is rendered for the current graph build'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 96 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/candidates/${BIDEN}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 97 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 98 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'the renderer stamps its build key'\u001b[39m)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\n \u001b[90m 99 |\u001b[39m     \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 96
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  94 | test.describe('rendered candidate and committee pages (us-pages)', () => {\n  95 |   test('a candidate page is rendered for the current graph build', async ({ request }) => {\n> 96 |     const res = await request.get(`/candidates/${BIDEN}/`);\n     |                               ^\n  97 |     expect(res.status()).toBe(200);\n  98 |     expect(res.headers()['x-graph-build'], 'the renderer stamps its build key').toBeTruthy();\n  99 |     const html = await res.text();\n    at /app/tests/ui/serving.spec.ts:96:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:41.832Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-dde82-for-the-current-graph-build-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-dde82-for-the-current-graph-build-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 96
                      }
                    },
                    {
                      "workerIndex": 738,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:96:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 96
                        },
                        "snippet": "\u001b[0m \u001b[90m 94 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'rendered candidate and committee pages (us-pages)'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 95 |\u001b[39m   test(\u001b[32m'a candidate page is rendered for the current graph build'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 96 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/candidates/${BIDEN}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 97 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 98 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'x-graph-build'\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m'the renderer stamps its build key'\u001b[39m)\u001b[33m.\u001b[39mtoBeTruthy()\u001b[33m;\u001b[39m\n \u001b[90m 99 |\u001b[39m     \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 96
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  94 | test.describe('rendered candidate and committee pages (us-pages)', () => {\n  95 |   test('a candidate page is rendered for the current graph build', async ({ request }) => {\n> 96 |     const res = await request.get(`/candidates/${BIDEN}/`);\n     |                               ^\n  97 |     expect(res.status()).toBe(200);\n  98 |     expect(res.headers()['x-graph-build'], 'the renderer stamps its build key').toBeTruthy();\n  99 |     const html = await res.text();\n    at /app/tests/ui/serving.spec.ts:96:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.598Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-dde82-for-the-current-graph-build-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 96
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-2a6fb769baeb12eacefb",
              "file": "tests/ui/serving.spec.ts",
              "line": 95,
              "column": 7
            },
            {
              "title": "/politicians/<id>/ is the candidate page",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 749,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 34,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:114:29",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 29,
                          "line": 114
                        },
                        "snippet": "\u001b[0m \u001b[90m 112 |\u001b[39m\n \u001b[90m 113 |\u001b[39m   test(\u001b[32m'/politicians/<id>/ is the candidate page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 114 |\u001b[39m     \u001b[36mconst\u001b[39m a \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/candidates/${BIDEN}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 115 |\u001b[39m     \u001b[36mconst\u001b[39m b \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/politicians/${BIDEN}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 116 |\u001b[39m     expect(b\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 117 |\u001b[39m     expect(canonicalPath(\u001b[36mawait\u001b[39m b\u001b[33m.\u001b[39mtext()))\u001b[33m.\u001b[39mtoBe(canonicalPath(\u001b[36mawait\u001b[39m a\u001b[33m.\u001b[39mtext()))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 29,
                            "line": 114
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  112 |\n  113 |   test('/politicians/<id>/ is the candidate page', async ({ request }) => {\n> 114 |     const a = await request.get(`/candidates/${BIDEN}/`);\n      |                             ^\n  115 |     const b = await request.get(`/politicians/${BIDEN}/`);\n  116 |     expect(b.status()).toBe(200);\n  117 |     expect(canonicalPath(await b.text())).toBe(canonicalPath(await a.text()));\n    at /app/tests/ui/serving.spec.ts:114:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:43.260Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-dcaf3-ns-id-is-the-candidate-page-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 29,
                        "line": 114
                      }
                    },
                    {
                      "workerIndex": 761,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 53,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:114:29",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 29,
                          "line": 114
                        },
                        "snippet": "\u001b[0m \u001b[90m 112 |\u001b[39m\n \u001b[90m 113 |\u001b[39m   test(\u001b[32m'/politicians/<id>/ is the candidate page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 114 |\u001b[39m     \u001b[36mconst\u001b[39m a \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/candidates/${BIDEN}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 115 |\u001b[39m     \u001b[36mconst\u001b[39m b \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/politicians/${BIDEN}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 116 |\u001b[39m     expect(b\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 117 |\u001b[39m     expect(canonicalPath(\u001b[36mawait\u001b[39m b\u001b[33m.\u001b[39mtext()))\u001b[33m.\u001b[39mtoBe(canonicalPath(\u001b[36mawait\u001b[39m a\u001b[33m.\u001b[39mtext()))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 29,
                            "line": 114
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  112 |\n  113 |   test('/politicians/<id>/ is the candidate page', async ({ request }) => {\n> 114 |     const a = await request.get(`/candidates/${BIDEN}/`);\n      |                             ^\n  115 |     const b = await request.get(`/politicians/${BIDEN}/`);\n  116 |     expect(b.status()).toBe(200);\n  117 |     expect(canonicalPath(await b.text())).toBe(canonicalPath(await a.text()));\n    at /app/tests/ui/serving.spec.ts:114:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:43.921Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-dcaf3-ns-id-is-the-candidate-page-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-dcaf3-ns-id-is-the-candidate-page-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 29,
                        "line": 114
                      }
                    },
                    {
                      "workerIndex": 778,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:114:29",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 29,
                          "line": 114
                        },
                        "snippet": "\u001b[0m \u001b[90m 112 |\u001b[39m\n \u001b[90m 113 |\u001b[39m   test(\u001b[32m'/politicians/<id>/ is the candidate page'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 114 |\u001b[39m     \u001b[36mconst\u001b[39m a \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/candidates/${BIDEN}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 115 |\u001b[39m     \u001b[36mconst\u001b[39m b \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/politicians/${BIDEN}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 116 |\u001b[39m     expect(b\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 117 |\u001b[39m     expect(canonicalPath(\u001b[36mawait\u001b[39m b\u001b[33m.\u001b[39mtext()))\u001b[33m.\u001b[39mtoBe(canonicalPath(\u001b[36mawait\u001b[39m a\u001b[33m.\u001b[39mtext()))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 29,
                            "line": 114
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/ffd8f1ef-a47c-ad4f-d23a-b4bbc0b92fd3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  112 |\n  113 |   test('/politicians/<id>/ is the candidate page', async ({ request }) => {\n> 114 |     const a = await request.get(`/candidates/${BIDEN}/`);\n      |                             ^\n  115 |     const b = await request.get(`/politicians/${BIDEN}/`);\n  116 |     expect(b.status()).toBe(200);\n  117 |     expect(canonicalPath(await b.text())).toBe(canonicalPath(await a.text()));\n    at /app/tests/ui/serving.spec.ts:114:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:44.712Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-dcaf3-ns-id-is-the-candidate-page-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 29,
                        "line": 114
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-780f42d8689617265d3c",
              "file": "tests/ui/serving.spec.ts",
              "line": 113,
              "column": 7
            },
            {
              "title": "a House candidate links its party, office and district",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 793,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:121:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 121
                        },
                        "snippet": "\u001b[0m \u001b[90m 119 |\u001b[39m\n \u001b[90m 120 |\u001b[39m   test(\u001b[32m'a House candidate links its party, office and district'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 121 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/candidates/${PELOSI}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 122 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m     \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 124 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m [label\u001b[33m,\u001b[39m collection] \u001b[36mof\u001b[39m [\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 121
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  119 |\n  120 |   test('a House candidate links its party, office and district', async ({ request }) => {\n> 121 |     const res = await request.get(`/candidates/${PELOSI}/`);\n      |                               ^\n  122 |     expect(res.status()).toBe(200);\n  123 |     const html = await res.text();\n  124 |     for (const [label, collection] of [\n    at /app/tests/ui/serving.spec.ts:121:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:45.401Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-8356f-s-party-office-and-district-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 121
                      }
                    },
                    {
                      "workerIndex": 801,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 45,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:121:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 121
                        },
                        "snippet": "\u001b[0m \u001b[90m 119 |\u001b[39m\n \u001b[90m 120 |\u001b[39m   test(\u001b[32m'a House candidate links its party, office and district'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 121 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/candidates/${PELOSI}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 122 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m     \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 124 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m [label\u001b[33m,\u001b[39m collection] \u001b[36mof\u001b[39m [\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 121
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  119 |\n  120 |   test('a House candidate links its party, office and district', async ({ request }) => {\n> 121 |     const res = await request.get(`/candidates/${PELOSI}/`);\n      |                               ^\n  122 |     expect(res.status()).toBe(200);\n  123 |     const html = await res.text();\n  124 |     for (const [label, collection] of [\n    at /app/tests/ui/serving.spec.ts:121:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:46.061Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-8356f-s-party-office-and-district-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-8356f-s-party-office-and-district-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 121
                      }
                    },
                    {
                      "workerIndex": 817,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 21,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:121:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 121
                        },
                        "snippet": "\u001b[0m \u001b[90m 119 |\u001b[39m\n \u001b[90m 120 |\u001b[39m   test(\u001b[32m'a House candidate links its party, office and district'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 121 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/candidates/${PELOSI}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 122 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 123 |\u001b[39m     \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 124 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m [label\u001b[33m,\u001b[39m collection] \u001b[36mof\u001b[39m [\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 121
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  119 |\n  120 |   test('a House candidate links its party, office and district', async ({ request }) => {\n> 121 |     const res = await request.get(`/candidates/${PELOSI}/`);\n      |                               ^\n  122 |     expect(res.status()).toBe(200);\n  123 |     const html = await res.text();\n  124 |     for (const [label, collection] of [\n    at /app/tests/ui/serving.spec.ts:121:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:46.783Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-8356f-s-party-office-and-district-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 121
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-b0f8bf3b14a6ada4429f",
              "file": "tests/ui/serving.spec.ts",
              "line": 120,
              "column": 7
            },
            {
              "title": "a committee page lists its money and its party affinity",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 831,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:134:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 134
                        },
                        "snippet": "\u001b[0m \u001b[90m 132 |\u001b[39m\n \u001b[90m 133 |\u001b[39m   test(\u001b[32m'a committee page lists its money and its party affinity'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 134 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/committees/${DNC}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 135 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 136 |\u001b[39m     \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 137 |\u001b[39m     expect(canonicalPath(html))\u001b[33m.\u001b[39mtoMatch(\u001b[35m/^\\/committees\\/[a-z0-9-]+-c00010603\\/$/\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 134
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  132 |\n  133 |   test('a committee page lists its money and its party affinity', async ({ request }) => {\n> 134 |     const res = await request.get(`/committees/${DNC}/`);\n      |                               ^\n  135 |     expect(res.status()).toBe(200);\n  136 |     const html = await res.text();\n  137 |     expect(canonicalPath(html)).toMatch(/^\\/committees\\/[a-z0-9-]+-c00010603\\/$/);\n    at /app/tests/ui/serving.spec.ts:134:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:47.426Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-7a078-oney-and-its-party-affinity-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 134
                      }
                    },
                    {
                      "workerIndex": 840,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 62,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:134:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 134
                        },
                        "snippet": "\u001b[0m \u001b[90m 132 |\u001b[39m\n \u001b[90m 133 |\u001b[39m   test(\u001b[32m'a committee page lists its money and its party affinity'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 134 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/committees/${DNC}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 135 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 136 |\u001b[39m     \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 137 |\u001b[39m     expect(canonicalPath(html))\u001b[33m.\u001b[39mtoMatch(\u001b[35m/^\\/committees\\/[a-z0-9-]+-c00010603\\/$/\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 134
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  132 |\n  133 |   test('a committee page lists its money and its party affinity', async ({ request }) => {\n> 134 |     const res = await request.get(`/committees/${DNC}/`);\n      |                               ^\n  135 |     expect(res.status()).toBe(200);\n  136 |     const html = await res.text();\n  137 |     expect(canonicalPath(html)).toMatch(/^\\/committees\\/[a-z0-9-]+-c00010603\\/$/);\n    at /app/tests/ui/serving.spec.ts:134:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:48.058Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-7a078-oney-and-its-party-affinity-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-7a078-oney-and-its-party-affinity-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 134
                      }
                    },
                    {
                      "workerIndex": 851,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:134:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 134
                        },
                        "snippet": "\u001b[0m \u001b[90m 132 |\u001b[39m\n \u001b[90m 133 |\u001b[39m   test(\u001b[32m'a committee page lists its money and its party affinity'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 134 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/committees/${DNC}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 135 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 136 |\u001b[39m     \u001b[36mconst\u001b[39m html \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m 137 |\u001b[39m     expect(canonicalPath(html))\u001b[33m.\u001b[39mtoMatch(\u001b[35m/^\\/committees\\/[a-z0-9-]+-c00010603\\/$/\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 134
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/committees/a75a9110-f1db-a945-39a8-7503ed3c04da/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  132 |\n  133 |   test('a committee page lists its money and its party affinity', async ({ request }) => {\n> 134 |     const res = await request.get(`/committees/${DNC}/`);\n      |                               ^\n  135 |     expect(res.status()).toBe(200);\n  136 |     const html = await res.text();\n  137 |     expect(canonicalPath(html)).toMatch(/^\\/committees\\/[a-z0-9-]+-c00010603\\/$/);\n    at /app/tests/ui/serving.spec.ts:134:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:48.764Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-7a078-oney-and-its-party-affinity-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 134
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-7f762ab6b05cacd4df49",
              "file": "tests/ui/serving.spec.ts",
              "line": 133,
              "column": 7
            },
            {
              "title": "an upper-case path renders with the lower-case canonical",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 865,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/CANDIDATES/FFD8F1EF-A47C-AD4F-D23A-B4BBC0B92FD3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/CANDIDATES/FFD8F1EF-A47C-AD4F-D23A-B4BBC0B92FD3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:150:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 150
                        },
                        "snippet": "\u001b[0m \u001b[90m 148 |\u001b[39m\n \u001b[90m 149 |\u001b[39m   test(\u001b[32m'an upper-case path renders with the lower-case canonical'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 150 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/CANDIDATES/${BIDEN.toUpperCase()}/`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 151 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 152 |\u001b[39m     expect(canonicalPath(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()))\u001b[33m.\u001b[39mtoMatch(\u001b[35m/^\\/candidates\\/[a-z0-9-]+-p80000722\\/$/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 153 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 150
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/CANDIDATES/FFD8F1EF-A47C-AD4F-D23A-B4BBC0B92FD3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  148 |\n  149 |   test('an upper-case path renders with the lower-case canonical', async ({ request }) => {\n> 150 |     const res = await request.get(`/CANDIDATES/${BIDEN.toUpperCase()}/`, { maxRedirects: 0 });\n      |                               ^\n  151 |     expect(res.status()).toBe(200);\n  152 |     expect(canonicalPath(await res.text())).toMatch(/^\\/candidates\\/[a-z0-9-]+-p80000722\\/$/);\n  153 |   });\n    at /app/tests/ui/serving.spec.ts:150:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:49.399Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-c4a4c-th-the-lower-case-canonical-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 150
                      }
                    },
                    {
                      "workerIndex": 873,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 49,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/CANDIDATES/FFD8F1EF-A47C-AD4F-D23A-B4BBC0B92FD3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/CANDIDATES/FFD8F1EF-A47C-AD4F-D23A-B4BBC0B92FD3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:150:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 150
                        },
                        "snippet": "\u001b[0m \u001b[90m 148 |\u001b[39m\n \u001b[90m 149 |\u001b[39m   test(\u001b[32m'an upper-case path renders with the lower-case canonical'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 150 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/CANDIDATES/${BIDEN.toUpperCase()}/`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 151 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 152 |\u001b[39m     expect(canonicalPath(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()))\u001b[33m.\u001b[39mtoMatch(\u001b[35m/^\\/candidates\\/[a-z0-9-]+-p80000722\\/$/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 153 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 150
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/CANDIDATES/FFD8F1EF-A47C-AD4F-D23A-B4BBC0B92FD3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  148 |\n  149 |   test('an upper-case path renders with the lower-case canonical', async ({ request }) => {\n> 150 |     const res = await request.get(`/CANDIDATES/${BIDEN.toUpperCase()}/`, { maxRedirects: 0 });\n      |                               ^\n  151 |     expect(res.status()).toBe(200);\n  152 |     expect(canonicalPath(await res.text())).toMatch(/^\\/candidates\\/[a-z0-9-]+-p80000722\\/$/);\n  153 |   });\n    at /app/tests/ui/serving.spec.ts:150:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:50.099Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-c4a4c-th-the-lower-case-canonical-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-c4a4c-th-the-lower-case-canonical-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 150
                      }
                    },
                    {
                      "workerIndex": 884,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/CANDIDATES/FFD8F1EF-A47C-AD4F-D23A-B4BBC0B92FD3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/CANDIDATES/FFD8F1EF-A47C-AD4F-D23A-B4BBC0B92FD3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:150:31",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 31,
                          "line": 150
                        },
                        "snippet": "\u001b[0m \u001b[90m 148 |\u001b[39m\n \u001b[90m 149 |\u001b[39m   test(\u001b[32m'an upper-case path renders with the lower-case canonical'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 150 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/CANDIDATES/${BIDEN.toUpperCase()}/`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 151 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 152 |\u001b[39m     expect(canonicalPath(\u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mtext()))\u001b[33m.\u001b[39mtoMatch(\u001b[35m/^\\/candidates\\/[a-z0-9-]+-p80000722\\/$/\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 153 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 31,
                            "line": 150
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/CANDIDATES/FFD8F1EF-A47C-AD4F-D23A-B4BBC0B92FD3/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  148 |\n  149 |   test('an upper-case path renders with the lower-case canonical', async ({ request }) => {\n> 150 |     const res = await request.get(`/CANDIDATES/${BIDEN.toUpperCase()}/`, { maxRedirects: 0 });\n      |                               ^\n  151 |     expect(res.status()).toBe(200);\n  152 |     expect(canonicalPath(await res.text())).toMatch(/^\\/candidates\\/[a-z0-9-]+-p80000722\\/$/);\n  153 |   });\n    at /app/tests/ui/serving.spec.ts:150:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:50.779Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-c4a4c-th-the-lower-case-canonical-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 31,
                        "line": 150
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-a1e3e44aa623c8acb1ed",
              "file": "tests/ui/serving.spec.ts",
              "line": 149,
              "column": 7
            },
            {
              "title": "unknown candidate, committee and party paths are 404 without a static fallback",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 896,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:158:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 158
                        },
                        "snippet": "\u001b[0m \u001b[90m 156 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/candidates/no-such-entity-zz/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/committees/no-such-entity-zz/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/parties/no-such-party-zz/'\u001b[39m]) {\n \u001b[90m 157 |\u001b[39m       \u001b[36mconst\u001b[39m started \u001b[33m=\u001b[39m \u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow()\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 158 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 159 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m path)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 160 |\u001b[39m       expect(\u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow() \u001b[33m-\u001b[39m started\u001b[33m,\u001b[39m \u001b[32m`${path} answers promptly`\u001b[39m)\u001b[33m.\u001b[39mtoBeLessThan(\u001b[35m5000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 161 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 158
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  156 |     for (const path of ['/candidates/no-such-entity-zz/', '/committees/no-such-entity-zz/', '/parties/no-such-party-zz/']) {\n  157 |       const started = Date.now();\n> 158 |       const res = await request.get(path, { maxRedirects: 0 });\n      |                                 ^\n  159 |       expect(res.status(), path).toBe(404);\n  160 |       expect(Date.now() - started, `${path} answers promptly`).toBeLessThan(5000);\n  161 |     }\n    at /app/tests/ui/serving.spec.ts:158:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:51.439Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-6d316-4-without-a-static-fallback-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 158
                      }
                    },
                    {
                      "workerIndex": 906,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 59,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:158:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 158
                        },
                        "snippet": "\u001b[0m \u001b[90m 156 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/candidates/no-such-entity-zz/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/committees/no-such-entity-zz/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/parties/no-such-party-zz/'\u001b[39m]) {\n \u001b[90m 157 |\u001b[39m       \u001b[36mconst\u001b[39m started \u001b[33m=\u001b[39m \u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow()\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 158 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 159 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m path)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 160 |\u001b[39m       expect(\u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow() \u001b[33m-\u001b[39m started\u001b[33m,\u001b[39m \u001b[32m`${path} answers promptly`\u001b[39m)\u001b[33m.\u001b[39mtoBeLessThan(\u001b[35m5000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 161 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 158
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  156 |     for (const path of ['/candidates/no-such-entity-zz/', '/committees/no-such-entity-zz/', '/parties/no-such-party-zz/']) {\n  157 |       const started = Date.now();\n> 158 |       const res = await request.get(path, { maxRedirects: 0 });\n      |                                 ^\n  159 |       expect(res.status(), path).toBe(404);\n  160 |       expect(Date.now() - started, `${path} answers promptly`).toBeLessThan(5000);\n  161 |     }\n    at /app/tests/ui/serving.spec.ts:158:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:52.287Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-6d316-4-without-a-static-fallback-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-6d316-4-without-a-static-fallback-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 158
                      }
                    },
                    {
                      "workerIndex": 917,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:158:33",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 33,
                          "line": 158
                        },
                        "snippet": "\u001b[0m \u001b[90m 156 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/candidates/no-such-entity-zz/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/committees/no-such-entity-zz/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/parties/no-such-party-zz/'\u001b[39m]) {\n \u001b[90m 157 |\u001b[39m       \u001b[36mconst\u001b[39m started \u001b[33m=\u001b[39m \u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow()\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 158 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 159 |\u001b[39m       expect(res\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m path)\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 160 |\u001b[39m       expect(\u001b[33mDate\u001b[39m\u001b[33m.\u001b[39mnow() \u001b[33m-\u001b[39m started\u001b[33m,\u001b[39m \u001b[32m`${path} answers promptly`\u001b[39m)\u001b[33m.\u001b[39mtoBeLessThan(\u001b[35m5000\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 161 |\u001b[39m     }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 33,
                            "line": 158
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/candidates/no-such-entity-zz/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  156 |     for (const path of ['/candidates/no-such-entity-zz/', '/committees/no-such-entity-zz/', '/parties/no-such-party-zz/']) {\n  157 |       const started = Date.now();\n> 158 |       const res = await request.get(path, { maxRedirects: 0 });\n      |                                 ^\n  159 |       expect(res.status(), path).toBe(404);\n  160 |       expect(Date.now() - started, `${path} answers promptly`).toBeLessThan(5000);\n  161 |     }\n    at /app/tests/ui/serving.spec.ts:158:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:53.002Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-6d316-4-without-a-static-fallback-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 33,
                        "line": 158
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-174b09c2fe387e2121a8",
              "file": "tests/ui/serving.spec.ts",
              "line": 155,
              "column": 7
            },
            {
              "title": "the money-flow Sankey and the Graph button work on a rendered candidate page",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 926,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 149,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:167:16",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 16,
                          "line": 167
                        },
                        "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 166 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/candidates/${PELOSI}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'PELOSI'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#funding .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m     \u001b[90m// The header button without accounts, the identity bar's Graph control with them (sites#355).\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 16,
                            "line": 167
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\", waiting until \"load\"\u001b[22m\n\n\n  165 |     const errors: string[] = [];\n  166 |     page.on('pageerror', (e) => errors.push(String(e)));\n> 167 |     await page.goto(`/candidates/${PELOSI}/`);\n      |                ^\n  168 |     await expect(page.locator('h1')).toContainText('PELOSI');\n  169 |     await expect(page.locator('#funding .money-flow-chart canvas')).toHaveCount(1, { timeout: 15000 });\n  170 |     // The header button without accounts, the identity bar's Graph control with them (sites#355).\n    at /app/tests/ui/serving.spec.ts:167:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:53.617Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-b4a46-n-a-rendered-candidate-page-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-b4a46-n-a-rendered-candidate-page-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 16,
                        "line": 167
                      }
                    },
                    {
                      "workerIndex": 938,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 225,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:167:16",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 16,
                          "line": 167
                        },
                        "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 166 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/candidates/${PELOSI}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'PELOSI'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#funding .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m     \u001b[90m// The header button without accounts, the identity bar's Graph control with them (sites#355).\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 16,
                            "line": 167
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\", waiting until \"load\"\u001b[22m\n\n\n  165 |     const errors: string[] = [];\n  166 |     page.on('pageerror', (e) => errors.push(String(e)));\n> 167 |     await page.goto(`/candidates/${PELOSI}/`);\n      |                ^\n  168 |     await expect(page.locator('h1')).toContainText('PELOSI');\n  169 |     await expect(page.locator('#funding .money-flow-chart canvas')).toHaveCount(1, { timeout: 15000 });\n  170 |     // The header button without accounts, the identity bar's Graph control with them (sites#355).\n    at /app/tests/ui/serving.spec.ts:167:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:54.456Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-b4a46-n-a-rendered-candidate-page-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-b4a46-n-a-rendered-candidate-page-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-b4a46-n-a-rendered-candidate-page-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-b4a46-n-a-rendered-candidate-page-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 16,
                        "line": 167
                      }
                    },
                    {
                      "workerIndex": 949,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/serving.spec.ts:167:16",
                        "location": {
                          "file": "/app/tests/ui/serving.spec.ts",
                          "column": 16,
                          "line": 167
                        },
                        "snippet": "\u001b[0m \u001b[90m 165 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 166 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m (e) \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(\u001b[33mString\u001b[39m(e)))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 167 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/candidates/${PELOSI}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 168 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'h1'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'PELOSI'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 169 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#funding .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 170 |\u001b[39m     \u001b[90m// The header button without accounts, the identity bar's Graph control with them (sites#355).\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/serving.spec.ts",
                            "column": 16,
                            "line": 167
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/candidates/bfcafdd4-62da-f107-22fb-ff5413c33fa4/\", waiting until \"load\"\u001b[22m\n\n\n  165 |     const errors: string[] = [];\n  166 |     page.on('pageerror', (e) => errors.push(String(e)));\n> 167 |     await page.goto(`/candidates/${PELOSI}/`);\n      |                ^\n  168 |     await expect(page.locator('h1')).toContainText('PELOSI');\n  169 |     await expect(page.locator('#funding .money-flow-chart canvas')).toHaveCount(1, { timeout: 15000 });\n  170 |     // The header button without accounts, the identity bar's Graph control with them (sites#355).\n    at /app/tests/ui/serving.spec.ts:167:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:55.353Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-b4a46-n-a-rendered-candidate-page-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/serving-rendered-candidate-b4a46-n-a-rendered-candidate-page-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/serving.spec.ts",
                        "column": 16,
                        "line": 167
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "facafd0cac1eb17ca154-bdca150ccaebfd909ea8",
              "file": "tests/ui/serving.spec.ts",
              "line": 164,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/sitemap.spec.ts",
      "file": "tests/ui/sitemap.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "sitemap URL validation",
          "file": "tests/ui/sitemap.spec.ts",
          "line": 202,
          "column": 6,
          "specs": [
            {
              "title": "sitemap index loads and contains child sitemaps",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 28,
                      "parallelIndex": 29,
                      "status": "timedOut",
                      "duration": 40030,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 33,
                            "line": 205
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/sitemap.xml\", waiting until \"load\"\u001b[22m\n\n\n  203 |\n  204 |   test('sitemap index loads and contains child sitemaps', async ({ page }) => {\n> 205 |     const response = await page.goto('/sitemap.xml');\n      |                                 ^\n  206 |     expect(response?.status()).toBe(200);\n  207 |\n  208 |     const content = await page.content();\n    at /app/tests/ui/sitemap.spec.ts:205:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.352Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-4660f-and-contains-child-sitemaps-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 54,
                      "parallelIndex": 29,
                      "status": "failed",
                      "duration": 289,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/sitemap.xml\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/sitemap.xml\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/sitemap.xml\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/sitemap.xml\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:205:33",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 33,
                          "line": 205
                        },
                        "snippet": "\u001b[0m \u001b[90m 203 |\u001b[39m\n \u001b[90m 204 |\u001b[39m   test(\u001b[32m'sitemap index loads and contains child sitemaps'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 205 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/sitemap.xml'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 206 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 207 |\u001b[39m\n \u001b[90m 208 |\u001b[39m     \u001b[36mconst\u001b[39m content \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mcontent()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 33,
                            "line": 205
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/sitemap.xml\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/sitemap.xml\", waiting until \"load\"\u001b[22m\n\n\n  203 |\n  204 |   test('sitemap index loads and contains child sitemaps', async ({ page }) => {\n> 205 |     const response = await page.goto('/sitemap.xml');\n      |                                 ^\n  206 |     expect(response?.status()).toBe(200);\n  207 |\n  208 |     const content = await page.content();\n    at /app/tests/ui/sitemap.spec.ts:205:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:04.157Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-4660f-and-contains-child-sitemaps-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-4660f-and-contains-child-sitemaps-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-4660f-and-contains-child-sitemaps-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-4660f-and-contains-child-sitemaps-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 33,
                        "line": 205
                      }
                    },
                    {
                      "workerIndex": 68,
                      "parallelIndex": 29,
                      "status": "failed",
                      "duration": 214,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/sitemap.xml\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/sitemap.xml\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/sitemap.xml\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/sitemap.xml\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:205:33",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 33,
                          "line": 205
                        },
                        "snippet": "\u001b[0m \u001b[90m 203 |\u001b[39m\n \u001b[90m 204 |\u001b[39m   test(\u001b[32m'sitemap index loads and contains child sitemaps'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 205 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/sitemap.xml'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 206 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 207 |\u001b[39m\n \u001b[90m 208 |\u001b[39m     \u001b[36mconst\u001b[39m content \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mcontent()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 33,
                            "line": 205
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/sitemap.xml\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/sitemap.xml\", waiting until \"load\"\u001b[22m\n\n\n  203 |\n  204 |   test('sitemap index loads and contains child sitemaps', async ({ page }) => {\n> 205 |     const response = await page.goto('/sitemap.xml');\n      |                                 ^\n  206 |     expect(response?.status()).toBe(200);\n  207 |\n  208 |     const content = await page.content();\n    at /app/tests/ui/sitemap.spec.ts:205:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.270Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-4660f-and-contains-child-sitemaps-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-4660f-and-contains-child-sitemaps-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 33,
                        "line": 205
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "445aeafbdc2b94cf9bb3-c60e93b9c98b61485b7c",
              "file": "tests/ui/sitemap.spec.ts",
              "line": 204,
              "column": 7
            },
            {
              "title": "sitemap index lists no nested index",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 91,
                      "parallelIndex": 29,
                      "status": "failed",
                      "duration": 49,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/sitemap.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/sitemap.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:221:40",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 40,
                          "line": 221
                        },
                        "snippet": "\u001b[0m \u001b[90m 219 |\u001b[39m\n \u001b[90m 220 |\u001b[39m   test(\u001b[32m'sitemap index lists no nested index'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 221 |\u001b[39m     \u001b[36mconst\u001b[39m index \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/sitemap.xml'\u001b[39m))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 222 |\u001b[39m     \u001b[36mconst\u001b[39m children \u001b[33m=\u001b[39m parseUrlsFromSitemap(index)\u001b[33m.\u001b[39mmap(u \u001b[33m=>\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(u)\u001b[33m.\u001b[39mpathname)\u001b[33m;\u001b[39m\n \u001b[90m 223 |\u001b[39m     expect(children\u001b[33m.\u001b[39mlength)\u001b[33m.\u001b[39mtoBeGreaterThan(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 224 |\u001b[39m     \u001b[36mconst\u001b[39m nested\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 40,
                            "line": 221
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/sitemap.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  219 |\n  220 |   test('sitemap index lists no nested index', async ({ request }) => {\n> 221 |     const index = await (await request.get('/sitemap.xml')).text();\n      |                                        ^\n  222 |     const children = parseUrlsFromSitemap(index).map(u => new URL(u).pathname);\n  223 |     expect(children.length).toBeGreaterThan(0);\n  224 |     const nested: string[] = [];\n    at /app/tests/ui/sitemap.spec.ts:221:40"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.362Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-1aae5-index-lists-no-nested-index-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 40,
                        "line": 221
                      }
                    },
                    {
                      "workerIndex": 105,
                      "parallelIndex": 29,
                      "status": "failed",
                      "duration": 61,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/sitemap.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/sitemap.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:221:40",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 40,
                          "line": 221
                        },
                        "snippet": "\u001b[0m \u001b[90m 219 |\u001b[39m\n \u001b[90m 220 |\u001b[39m   test(\u001b[32m'sitemap index lists no nested index'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 221 |\u001b[39m     \u001b[36mconst\u001b[39m index \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/sitemap.xml'\u001b[39m))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 222 |\u001b[39m     \u001b[36mconst\u001b[39m children \u001b[33m=\u001b[39m parseUrlsFromSitemap(index)\u001b[33m.\u001b[39mmap(u \u001b[33m=>\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(u)\u001b[33m.\u001b[39mpathname)\u001b[33m;\u001b[39m\n \u001b[90m 223 |\u001b[39m     expect(children\u001b[33m.\u001b[39mlength)\u001b[33m.\u001b[39mtoBeGreaterThan(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 224 |\u001b[39m     \u001b[36mconst\u001b[39m nested\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 40,
                            "line": 221
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/sitemap.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  219 |\n  220 |   test('sitemap index lists no nested index', async ({ request }) => {\n> 221 |     const index = await (await request.get('/sitemap.xml')).text();\n      |                                        ^\n  222 |     const children = parseUrlsFromSitemap(index).map(u => new URL(u).pathname);\n  223 |     expect(children.length).toBeGreaterThan(0);\n  224 |     const nested: string[] = [];\n    at /app/tests/ui/sitemap.spec.ts:221:40"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.150Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-1aae5-index-lists-no-nested-index-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-1aae5-index-lists-no-nested-index-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 40,
                        "line": 221
                      }
                    },
                    {
                      "workerIndex": 130,
                      "parallelIndex": 29,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/sitemap.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/sitemap.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:221:40",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 40,
                          "line": 221
                        },
                        "snippet": "\u001b[0m \u001b[90m 219 |\u001b[39m\n \u001b[90m 220 |\u001b[39m   test(\u001b[32m'sitemap index lists no nested index'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 221 |\u001b[39m     \u001b[36mconst\u001b[39m index \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m (\u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/sitemap.xml'\u001b[39m))\u001b[33m.\u001b[39mtext()\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                                        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 222 |\u001b[39m     \u001b[36mconst\u001b[39m children \u001b[33m=\u001b[39m parseUrlsFromSitemap(index)\u001b[33m.\u001b[39mmap(u \u001b[33m=>\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(u)\u001b[33m.\u001b[39mpathname)\u001b[33m;\u001b[39m\n \u001b[90m 223 |\u001b[39m     expect(children\u001b[33m.\u001b[39mlength)\u001b[33m.\u001b[39mtoBeGreaterThan(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 224 |\u001b[39m     \u001b[36mconst\u001b[39m nested\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 40,
                            "line": 221
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/sitemap.xml\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  219 |\n  220 |   test('sitemap index lists no nested index', async ({ request }) => {\n> 221 |     const index = await (await request.get('/sitemap.xml')).text();\n      |                                        ^\n  222 |     const children = parseUrlsFromSitemap(index).map(u => new URL(u).pathname);\n  223 |     expect(children.length).toBeGreaterThan(0);\n  224 |     const nested: string[] = [];\n    at /app/tests/ui/sitemap.spec.ts:221:40"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.033Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-1aae5-index-lists-no-nested-index-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 40,
                        "line": 221
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "445aeafbdc2b94cf9bb3-9c49175d52fd8bbb5808",
              "file": "tests/ui/sitemap.spec.ts",
              "line": 220,
              "column": 7
            },
            {
              "title": "candidates sitemap - sample URLs resolve",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 150,
                      "parallelIndex": 29,
                      "status": "failed",
                      "duration": 226,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:239:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 239
                        },
                        "snippet": "\u001b[0m \u001b[90m 237 |\u001b[39m\n \u001b[90m 238 |\u001b[39m     \u001b[90m// Navigate to a simple page first so we have a page context for fetch\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 239 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 240 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 241 |\u001b[39m\n \u001b[90m 242 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/candidates/sitemap-candidates.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 239
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  237 |\n  238 |     // Navigate to a simple page first so we have a page context for fetch\n> 239 |     await page.goto('/');\n      |                ^\n  240 |     const baseUrl = new URL(page.url()).origin;\n  241 |\n  242 |     const result = await testSitemapUrls(page, baseUrl, '/candidates/sitemap-candidates.xml');\n    at /app/tests/ui/sitemap.spec.ts:239:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:08.746Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-6d4ff-temap---sample-URLs-resolve-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-6d4ff-temap---sample-URLs-resolve-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 239
                      }
                    },
                    {
                      "workerIndex": 177,
                      "parallelIndex": 29,
                      "status": "timedOut",
                      "duration": 132355,
                      "error": {
                        "message": "\u001b[31mTest timeout of 120000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 120000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 120000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 239
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  237 |\n  238 |     // Navigate to a simple page first so we have a page context for fetch\n> 239 |     await page.goto('/');\n      |                ^\n  240 |     const baseUrl = new URL(page.url()).origin;\n  241 |\n  242 |     const result = await testSitemapUrls(page, baseUrl, '/candidates/sitemap-candidates.xml');\n    at /app/tests/ui/sitemap.spec.ts:239:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:09.842Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-6d4ff-temap---sample-URLs-resolve-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-6d4ff-temap---sample-URLs-resolve-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-6d4ff-temap---sample-URLs-resolve-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 442,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 5274,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:239:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 239
                        },
                        "snippet": "\u001b[0m \u001b[90m 237 |\u001b[39m\n \u001b[90m 238 |\u001b[39m     \u001b[90m// Navigate to a simple page first so we have a page context for fetch\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 239 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 240 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 241 |\u001b[39m\n \u001b[90m 242 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/candidates/sitemap-candidates.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 239
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  237 |\n  238 |     // Navigate to a simple page first so we have a page context for fetch\n> 239 |     await page.goto('/');\n      |                ^\n  240 |     const baseUrl = new URL(page.url()).origin;\n  241 |\n  242 |     const result = await testSitemapUrls(page, baseUrl, '/candidates/sitemap-candidates.xml');\n    at /app/tests/ui/sitemap.spec.ts:239:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:22.806Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-6d4ff-temap---sample-URLs-resolve-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-6d4ff-temap---sample-URLs-resolve-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 239
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "445aeafbdc2b94cf9bb3-a80be8d946ded7f69d5c",
              "file": "tests/ui/sitemap.spec.ts",
              "line": 235,
              "column": 7
            },
            {
              "title": "committees sitemap - sample URLs resolve",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 120000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 450,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:258:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 258
                        },
                        "snippet": "\u001b[0m \u001b[90m 256 |\u001b[39m\n \u001b[90m 257 |\u001b[39m     \u001b[90m// Navigate to a simple page first so we have a page context for fetch\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 258 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 259 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 260 |\u001b[39m\n \u001b[90m 261 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/committees/sitemap-committees.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 258
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  256 |\n  257 |     // Navigate to a simple page first so we have a page context for fetch\n> 258 |     await page.goto('/');\n      |                ^\n  259 |     const baseUrl = new URL(page.url()).origin;\n  260 |\n  261 |     const result = await testSitemapUrls(page, baseUrl, '/committees/sitemap-committees.xml');\n    at /app/tests/ui/sitemap.spec.ts:258:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:28.714Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-0da0a-temap---sample-URLs-resolve-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-0da0a-temap---sample-URLs-resolve-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 258
                      }
                    },
                    {
                      "workerIndex": 458,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 221,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:258:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 258
                        },
                        "snippet": "\u001b[0m \u001b[90m 256 |\u001b[39m\n \u001b[90m 257 |\u001b[39m     \u001b[90m// Navigate to a simple page first so we have a page context for fetch\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 258 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 259 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 260 |\u001b[39m\n \u001b[90m 261 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/committees/sitemap-committees.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 258
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  256 |\n  257 |     // Navigate to a simple page first so we have a page context for fetch\n> 258 |     await page.goto('/');\n      |                ^\n  259 |     const baseUrl = new URL(page.url()).origin;\n  260 |\n  261 |     const result = await testSitemapUrls(page, baseUrl, '/committees/sitemap-committees.xml');\n    at /app/tests/ui/sitemap.spec.ts:258:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:29.513Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-0da0a-temap---sample-URLs-resolve-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-0da0a-temap---sample-URLs-resolve-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-0da0a-temap---sample-URLs-resolve-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-0da0a-temap---sample-URLs-resolve-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 258
                      }
                    },
                    {
                      "workerIndex": 468,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 154,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:258:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 258
                        },
                        "snippet": "\u001b[0m \u001b[90m 256 |\u001b[39m\n \u001b[90m 257 |\u001b[39m     \u001b[90m// Navigate to a simple page first so we have a page context for fetch\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 258 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 259 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 260 |\u001b[39m\n \u001b[90m 261 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/committees/sitemap-committees.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 258
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  256 |\n  257 |     // Navigate to a simple page first so we have a page context for fetch\n> 258 |     await page.goto('/');\n      |                ^\n  259 |     const baseUrl = new URL(page.url()).origin;\n  260 |\n  261 |     const result = await testSitemapUrls(page, baseUrl, '/committees/sitemap-committees.xml');\n    at /app/tests/ui/sitemap.spec.ts:258:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:30.443Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-0da0a-temap---sample-URLs-resolve-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-0da0a-temap---sample-URLs-resolve-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 258
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "445aeafbdc2b94cf9bb3-87023309750eb69e70c2",
              "file": "tests/ui/sitemap.spec.ts",
              "line": 254,
              "column": 7
            },
            {
              "title": "parties sitemap - sample URLs resolve",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 481,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 150,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:274:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 274
                        },
                        "snippet": "\u001b[0m \u001b[90m 272 |\u001b[39m\n \u001b[90m 273 |\u001b[39m   test(\u001b[32m'parties sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 274 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 275 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 276 |\u001b[39m\n \u001b[90m 277 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/parties/sitemap-parties.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 274
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  272 |\n  273 |   test('parties sitemap - sample URLs resolve', async ({ page }) => {\n> 274 |     await page.goto('/');\n      |                ^\n  275 |     const baseUrl = new URL(page.url()).origin;\n  276 |\n  277 |     const result = await testSitemapUrls(page, baseUrl, '/parties/sitemap-parties.xml');\n    at /app/tests/ui/sitemap.spec.ts:274:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:31.271Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-56967-temap---sample-URLs-resolve-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-56967-temap---sample-URLs-resolve-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 274
                      }
                    },
                    {
                      "workerIndex": 497,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 287,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:274:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 274
                        },
                        "snippet": "\u001b[0m \u001b[90m 272 |\u001b[39m\n \u001b[90m 273 |\u001b[39m   test(\u001b[32m'parties sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 274 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 275 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 276 |\u001b[39m\n \u001b[90m 277 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/parties/sitemap-parties.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 274
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  272 |\n  273 |   test('parties sitemap - sample URLs resolve', async ({ page }) => {\n> 274 |     await page.goto('/');\n      |                ^\n  275 |     const baseUrl = new URL(page.url()).origin;\n  276 |\n  277 |     const result = await testSitemapUrls(page, baseUrl, '/parties/sitemap-parties.xml');\n    at /app/tests/ui/sitemap.spec.ts:274:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:32.158Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-56967-temap---sample-URLs-resolve-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-56967-temap---sample-URLs-resolve-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-56967-temap---sample-URLs-resolve-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-56967-temap---sample-URLs-resolve-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 274
                      }
                    },
                    {
                      "workerIndex": 527,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 154,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:274:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 274
                        },
                        "snippet": "\u001b[0m \u001b[90m 272 |\u001b[39m\n \u001b[90m 273 |\u001b[39m   test(\u001b[32m'parties sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 274 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 275 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 276 |\u001b[39m\n \u001b[90m 277 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/parties/sitemap-parties.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 274
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  272 |\n  273 |   test('parties sitemap - sample URLs resolve', async ({ page }) => {\n> 274 |     await page.goto('/');\n      |                ^\n  275 |     const baseUrl = new URL(page.url()).origin;\n  276 |\n  277 |     const result = await testSitemapUrls(page, baseUrl, '/parties/sitemap-parties.xml');\n    at /app/tests/ui/sitemap.spec.ts:274:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.307Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-56967-temap---sample-URLs-resolve-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-56967-temap---sample-URLs-resolve-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 274
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "445aeafbdc2b94cf9bb3-8947fc49728288b347b0",
              "file": "tests/ui/sitemap.spec.ts",
              "line": 273,
              "column": 7
            },
            {
              "title": "offices sitemap - sample URLs resolve",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 547,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 176,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:290:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 290
                        },
                        "snippet": "\u001b[0m \u001b[90m 288 |\u001b[39m\n \u001b[90m 289 |\u001b[39m   test(\u001b[32m'offices sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 290 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 291 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 292 |\u001b[39m\n \u001b[90m 293 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/offices/sitemap-offices.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 290
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  288 |\n  289 |   test('offices sitemap - sample URLs resolve', async ({ page }) => {\n> 290 |     await page.goto('/');\n      |                ^\n  291 |     const baseUrl = new URL(page.url()).origin;\n  292 |\n  293 |     const result = await testSitemapUrls(page, baseUrl, '/offices/sitemap-offices.xml');\n    at /app/tests/ui/sitemap.spec.ts:290:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.252Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-10822-temap---sample-URLs-resolve-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-10822-temap---sample-URLs-resolve-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 290
                      }
                    },
                    {
                      "workerIndex": 571,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 288,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:290:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 290
                        },
                        "snippet": "\u001b[0m \u001b[90m 288 |\u001b[39m\n \u001b[90m 289 |\u001b[39m   test(\u001b[32m'offices sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 290 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 291 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 292 |\u001b[39m\n \u001b[90m 293 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/offices/sitemap-offices.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 290
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  288 |\n  289 |   test('offices sitemap - sample URLs resolve', async ({ page }) => {\n> 290 |     await page.goto('/');\n      |                ^\n  291 |     const baseUrl = new URL(page.url()).origin;\n  292 |\n  293 |     const result = await testSitemapUrls(page, baseUrl, '/offices/sitemap-offices.xml');\n    at /app/tests/ui/sitemap.spec.ts:290:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.210Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-10822-temap---sample-URLs-resolve-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-10822-temap---sample-URLs-resolve-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-10822-temap---sample-URLs-resolve-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-10822-temap---sample-URLs-resolve-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 290
                      }
                    },
                    {
                      "workerIndex": 600,
                      "parallelIndex": 26,
                      "status": "failed",
                      "duration": 162,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:290:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 290
                        },
                        "snippet": "\u001b[0m \u001b[90m 288 |\u001b[39m\n \u001b[90m 289 |\u001b[39m   test(\u001b[32m'offices sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 290 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 291 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 292 |\u001b[39m\n \u001b[90m 293 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/offices/sitemap-offices.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 290
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  288 |\n  289 |   test('offices sitemap - sample URLs resolve', async ({ page }) => {\n> 290 |     await page.goto('/');\n      |                ^\n  291 |     const baseUrl = new URL(page.url()).origin;\n  292 |\n  293 |     const result = await testSitemapUrls(page, baseUrl, '/offices/sitemap-offices.xml');\n    at /app/tests/ui/sitemap.spec.ts:290:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.399Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-10822-temap---sample-URLs-resolve-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-10822-temap---sample-URLs-resolve-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 290
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "445aeafbdc2b94cf9bb3-8e94254e8554d3a49e2d",
              "file": "tests/ui/sitemap.spec.ts",
              "line": 289,
              "column": 7
            },
            {
              "title": "districts sitemap - sample URLs resolve",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 618,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 181,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:306:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 306
                        },
                        "snippet": "\u001b[0m \u001b[90m 304 |\u001b[39m\n \u001b[90m 305 |\u001b[39m   test(\u001b[32m'districts sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 306 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 307 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 308 |\u001b[39m\n \u001b[90m 309 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/districts/sitemap-districts.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 306
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  304 |\n  305 |   test('districts sitemap - sample URLs resolve', async ({ page }) => {\n> 306 |     await page.goto('/');\n      |                ^\n  307 |     const baseUrl = new URL(page.url()).origin;\n  308 |\n  309 |     const result = await testSitemapUrls(page, baseUrl, '/districts/sitemap-districts.xml');\n    at /app/tests/ui/sitemap.spec.ts:306:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:37.305Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-d74b1-temap---sample-URLs-resolve-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-d74b1-temap---sample-URLs-resolve-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 306
                      }
                    },
                    {
                      "workerIndex": 639,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 274,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:306:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 306
                        },
                        "snippet": "\u001b[0m \u001b[90m 304 |\u001b[39m\n \u001b[90m 305 |\u001b[39m   test(\u001b[32m'districts sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 306 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 307 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 308 |\u001b[39m\n \u001b[90m 309 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/districts/sitemap-districts.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 306
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  304 |\n  305 |   test('districts sitemap - sample URLs resolve', async ({ page }) => {\n> 306 |     await page.goto('/');\n      |                ^\n  307 |     const baseUrl = new URL(page.url()).origin;\n  308 |\n  309 |     const result = await testSitemapUrls(page, baseUrl, '/districts/sitemap-districts.xml');\n    at /app/tests/ui/sitemap.spec.ts:306:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:38.221Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-d74b1-temap---sample-URLs-resolve-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-d74b1-temap---sample-URLs-resolve-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-d74b1-temap---sample-URLs-resolve-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-d74b1-temap---sample-URLs-resolve-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 306
                      }
                    },
                    {
                      "workerIndex": 665,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 191,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:306:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 306
                        },
                        "snippet": "\u001b[0m \u001b[90m 304 |\u001b[39m\n \u001b[90m 305 |\u001b[39m   test(\u001b[32m'districts sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 306 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 307 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 308 |\u001b[39m\n \u001b[90m 309 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/districts/sitemap-districts.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 306
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  304 |\n  305 |   test('districts sitemap - sample URLs resolve', async ({ page }) => {\n> 306 |     await page.goto('/');\n      |                ^\n  307 |     const baseUrl = new URL(page.url()).origin;\n  308 |\n  309 |     const result = await testSitemapUrls(page, baseUrl, '/districts/sitemap-districts.xml');\n    at /app/tests/ui/sitemap.spec.ts:306:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:39.276Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-d74b1-temap---sample-URLs-resolve-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-d74b1-temap---sample-URLs-resolve-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 306
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "445aeafbdc2b94cf9bb3-e977450acfe43ef5ce30",
              "file": "tests/ui/sitemap.spec.ts",
              "line": 305,
              "column": 7
            },
            {
              "title": "states sitemap - sample URLs resolve",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 685,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 186,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:322:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 322
                        },
                        "snippet": "\u001b[0m \u001b[90m 320 |\u001b[39m\n \u001b[90m 321 |\u001b[39m   test(\u001b[32m'states sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 322 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 323 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 324 |\u001b[39m\n \u001b[90m 325 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/states/sitemap-states.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 322
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  320 |\n  321 |   test('states sitemap - sample URLs resolve', async ({ page }) => {\n> 322 |     await page.goto('/');\n      |                ^\n  323 |     const baseUrl = new URL(page.url()).origin;\n  324 |\n  325 |     const result = await testSitemapUrls(page, baseUrl, '/states/sitemap-states.xml');\n    at /app/tests/ui/sitemap.spec.ts:322:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:40.294Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-e7685-temap---sample-URLs-resolve-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-e7685-temap---sample-URLs-resolve-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 322
                      }
                    },
                    {
                      "workerIndex": 710,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 292,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:322:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 322
                        },
                        "snippet": "\u001b[0m \u001b[90m 320 |\u001b[39m\n \u001b[90m 321 |\u001b[39m   test(\u001b[32m'states sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 322 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 323 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 324 |\u001b[39m\n \u001b[90m 325 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/states/sitemap-states.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 322
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  320 |\n  321 |   test('states sitemap - sample URLs resolve', async ({ page }) => {\n> 322 |     await page.goto('/');\n      |                ^\n  323 |     const baseUrl = new URL(page.url()).origin;\n  324 |\n  325 |     const result = await testSitemapUrls(page, baseUrl, '/states/sitemap-states.xml');\n    at /app/tests/ui/sitemap.spec.ts:322:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:41.316Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-e7685-temap---sample-URLs-resolve-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-e7685-temap---sample-URLs-resolve-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-e7685-temap---sample-URLs-resolve-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-e7685-temap---sample-URLs-resolve-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 322
                      }
                    },
                    {
                      "workerIndex": 736,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 162,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:322:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 322
                        },
                        "snippet": "\u001b[0m \u001b[90m 320 |\u001b[39m\n \u001b[90m 321 |\u001b[39m   test(\u001b[32m'states sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 322 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 323 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 324 |\u001b[39m\n \u001b[90m 325 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/states/sitemap-states.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 322
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  320 |\n  321 |   test('states sitemap - sample URLs resolve', async ({ page }) => {\n> 322 |     await page.goto('/');\n      |                ^\n  323 |     const baseUrl = new URL(page.url()).origin;\n  324 |\n  325 |     const result = await testSitemapUrls(page, baseUrl, '/states/sitemap-states.xml');\n    at /app/tests/ui/sitemap.spec.ts:322:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.463Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-e7685-temap---sample-URLs-resolve-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-e7685-temap---sample-URLs-resolve-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 322
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "445aeafbdc2b94cf9bb3-2974a6e40c0ee82198bf",
              "file": "tests/ui/sitemap.spec.ts",
              "line": 321,
              "column": 7
            },
            {
              "title": "elections sitemap - sample URLs resolve",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 753,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 167,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:338:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 338
                        },
                        "snippet": "\u001b[0m \u001b[90m 336 |\u001b[39m\n \u001b[90m 337 |\u001b[39m   test(\u001b[32m'elections sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 338 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 339 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 340 |\u001b[39m\n \u001b[90m 341 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/elections/sitemap-elections.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 338
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  336 |\n  337 |   test('elections sitemap - sample URLs resolve', async ({ page }) => {\n> 338 |     await page.goto('/');\n      |                ^\n  339 |     const baseUrl = new URL(page.url()).origin;\n  340 |\n  341 |     const result = await testSitemapUrls(page, baseUrl, '/elections/sitemap-elections.xml');\n    at /app/tests/ui/sitemap.spec.ts:338:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:43.337Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-cf8a5-temap---sample-URLs-resolve-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-cf8a5-temap---sample-URLs-resolve-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 338
                      }
                    },
                    {
                      "workerIndex": 772,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 305,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:338:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 338
                        },
                        "snippet": "\u001b[0m \u001b[90m 336 |\u001b[39m\n \u001b[90m 337 |\u001b[39m   test(\u001b[32m'elections sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 338 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 339 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 340 |\u001b[39m\n \u001b[90m 341 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/elections/sitemap-elections.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 338
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  336 |\n  337 |   test('elections sitemap - sample URLs resolve', async ({ page }) => {\n> 338 |     await page.goto('/');\n      |                ^\n  339 |     const baseUrl = new URL(page.url()).origin;\n  340 |\n  341 |     const result = await testSitemapUrls(page, baseUrl, '/elections/sitemap-elections.xml');\n    at /app/tests/ui/sitemap.spec.ts:338:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:44.322Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-cf8a5-temap---sample-URLs-resolve-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-cf8a5-temap---sample-URLs-resolve-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-cf8a5-temap---sample-URLs-resolve-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-cf8a5-temap---sample-URLs-resolve-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 338
                      }
                    },
                    {
                      "workerIndex": 794,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/sitemap.spec.ts:338:16",
                        "location": {
                          "file": "/app/tests/ui/sitemap.spec.ts",
                          "column": 16,
                          "line": 338
                        },
                        "snippet": "\u001b[0m \u001b[90m 336 |\u001b[39m\n \u001b[90m 337 |\u001b[39m   test(\u001b[32m'elections sitemap - sample URLs resolve'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 338 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 339 |\u001b[39m     \u001b[36mconst\u001b[39m baseUrl \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mURL\u001b[39m(page\u001b[33m.\u001b[39murl())\u001b[33m.\u001b[39morigin\u001b[33m;\u001b[39m\n \u001b[90m 340 |\u001b[39m\n \u001b[90m 341 |\u001b[39m     \u001b[36mconst\u001b[39m result \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m testSitemapUrls(page\u001b[33m,\u001b[39m baseUrl\u001b[33m,\u001b[39m \u001b[32m'/elections/sitemap-elections.xml'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/sitemap.spec.ts",
                            "column": 16,
                            "line": 338
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  336 |\n  337 |   test('elections sitemap - sample URLs resolve', async ({ page }) => {\n> 338 |     await page.goto('/');\n      |                ^\n  339 |     const baseUrl = new URL(page.url()).origin;\n  340 |\n  341 |     const result = await testSitemapUrls(page, baseUrl, '/elections/sitemap-elections.xml');\n    at /app/tests/ui/sitemap.spec.ts:338:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:45.401Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-cf8a5-temap---sample-URLs-resolve-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/sitemap-sitemap-URL-valida-cf8a5-temap---sample-URLs-resolve-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/sitemap.spec.ts",
                        "column": 16,
                        "line": 338
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "445aeafbdc2b94cf9bb3-869ad0437e25b2768dea",
              "file": "tests/ui/sitemap.spec.ts",
              "line": 337,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/sld-profile.spec.ts",
      "file": "tests/ui/sld-profile.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "/districts/mn-sd-001/: area, interactive map and related districts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 29,
                  "parallelIndex": 30,
                  "status": "timedOut",
                  "duration": 90187,
                  "error": {
                    "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-sd-001/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:01:23.351Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--cf7c2-e-map-and-related-districts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--cf7c2-e-map-and-related-districts-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 210,
                  "parallelIndex": 30,
                  "status": "failed",
                  "duration": 11393,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-sd-001/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-sd-001/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-sd-001/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:02:54.184Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--cf7c2-e-map-and-related-districts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--cf7c2-e-map-and-related-districts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--cf7c2-e-map-and-related-districts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--cf7c2-e-map-and-related-districts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                },
                {
                  "workerIndex": 266,
                  "parallelIndex": 30,
                  "status": "failed",
                  "duration": 151,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-sd-001/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-sd-001/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-sd-001/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:06.304Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--cf7c2-e-map-and-related-districts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--cf7c2-e-map-and-related-districts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "dd54b48fb9d572a1ac58-0ffd90d6e2d299648e46",
          "file": "tests/ui/sld-profile.spec.ts",
          "line": 22,
          "column": 7
        },
        {
          "title": "/districts/mn-hd-01a/: area, interactive map and related districts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 282,
                  "parallelIndex": 30,
                  "status": "failed",
                  "duration": 172,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-hd-01a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-hd-01a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-hd-01a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:07.201Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--df056-e-map-and-related-districts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--df056-e-map-and-related-districts-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                },
                {
                  "workerIndex": 296,
                  "parallelIndex": 30,
                  "status": "failed",
                  "duration": 275,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-hd-01a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-hd-01a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-hd-01a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:08.169Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--df056-e-map-and-related-districts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--df056-e-map-and-related-districts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--df056-e-map-and-related-districts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--df056-e-map-and-related-districts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                },
                {
                  "workerIndex": 313,
                  "parallelIndex": 30,
                  "status": "timedOut",
                  "duration": 90192,
                  "error": {
                    "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 90000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/mn-hd-01a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:09.171Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--df056-e-map-and-related-districts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-mn--df056-e-map-and-related-districts-ui-retry2/error-context.md"
                    }
                  ]
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "dd54b48fb9d572a1ac58-90e6dfb86443964e02a4",
          "file": "tests/ui/sld-profile.spec.ts",
          "line": 22,
          "column": 7
        },
        {
          "title": "/districts/az-sd-005/: area, interactive map and related districts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 681,
                  "parallelIndex": 24,
                  "status": "failed",
                  "duration": 165,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/az-sd-005/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/az-sd-005/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/az-sd-005/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:40.065Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-az--022f9-e-map-and-related-districts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-az--022f9-e-map-and-related-districts-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                },
                {
                  "workerIndex": 704,
                  "parallelIndex": 24,
                  "status": "failed",
                  "duration": 302,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/az-sd-005/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/az-sd-005/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/az-sd-005/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:41.044Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-az--022f9-e-map-and-related-districts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-az--022f9-e-map-and-related-districts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-az--022f9-e-map-and-related-districts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-az--022f9-e-map-and-related-districts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                },
                {
                  "workerIndex": 724,
                  "parallelIndex": 19,
                  "status": "failed",
                  "duration": 168,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/az-sd-005/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/az-sd-005/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/az-sd-005/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:42.141Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-az--022f9-e-map-and-related-districts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-az--022f9-e-map-and-related-districts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "dd54b48fb9d572a1ac58-4a577e4dd42e923e7d54",
          "file": "tests/ui/sld-profile.spec.ts",
          "line": 22,
          "column": 7
        },
        {
          "title": "/districts/ak-sd-00a/: area, interactive map and related districts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 90000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 744,
                  "parallelIndex": 19,
                  "status": "failed",
                  "duration": 164,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak-sd-00a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak-sd-00a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak-sd-00a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:43.099Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-ak--052d2-e-map-and-related-districts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-ak--052d2-e-map-and-related-districts-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                },
                {
                  "workerIndex": 763,
                  "parallelIndex": 19,
                  "status": "failed",
                  "duration": 310,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak-sd-00a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak-sd-00a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak-sd-00a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:44.071Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-ak--052d2-e-map-and-related-districts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-ak--052d2-e-map-and-related-districts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-ak--052d2-e-map-and-related-districts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-ak--052d2-e-map-and-related-districts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                },
                {
                  "workerIndex": 787,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 157,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak-sd-00a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak-sd-00a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:24:32",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 32,
                      "line": 24
                    },
                    "snippet": "\u001b[0m \u001b[90m 22 |\u001b[39m   test(\u001b[32m`${c.path}: area, interactive map and related districts`\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 23 |\u001b[39m     test\u001b[33m.\u001b[39msetTimeout(\u001b[35m90000\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m     \u001b[36mconst\u001b[39m head \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(c\u001b[33m.\u001b[39mpath)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\u001b[39m     expect(head\u001b[33m.\u001b[39mstatus()\u001b[33m,\u001b[39m \u001b[32m`${c.path} should answer 200 on a graph with state legislative Districts`\u001b[39m)\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m     \u001b[36mconst\u001b[39m errors\u001b[33m:\u001b[39m string[] \u001b[33m=\u001b[39m []\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m     page\u001b[33m.\u001b[39mon(\u001b[32m'pageerror'\u001b[39m\u001b[33m,\u001b[39m e \u001b[33m=>\u001b[39m errors\u001b[33m.\u001b[39mpush(e\u001b[33m.\u001b[39mmessage))\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 32,
                        "line": 24
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ak-sd-00a/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  22 |   test(`${c.path}: area, interactive map and related districts`, async ({ page, request }) => {\n  23 |     test.setTimeout(90000);\n> 24 |     const head = await request.get(c.path);\n     |                                ^\n  25 |     expect(head.status(), `${c.path} should answer 200 on a graph with state legislative Districts`).toBe(200);\n  26 |     const errors: string[] = [];\n  27 |     page.on('pageerror', e => errors.push(e.message));\n    at /app/tests/ui/sld-profile.spec.ts:24:32"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:45.154Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-ak--052d2-e-map-and-related-districts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile--districts-ak--052d2-e-map-and-related-districts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 32,
                    "line": 24
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "dd54b48fb9d572a1ac58-44aca351524d09183264",
          "file": "tests/ui/sld-profile.spec.ts",
          "line": 22,
          "column": 7
        },
        {
          "title": "Nebraska explains its one-house legislature",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 802,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 153,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ne-sd-010/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ne-sd-010/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:45:29",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 29,
                      "line": 45
                    },
                    "snippet": "\u001b[0m \u001b[90m 43 |\u001b[39m\n \u001b[90m 44 |\u001b[39m test(\u001b[32m'Nebraska explains its one-house legislature'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 45 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/districts/ne-sd-010/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 46 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/districts/ne-sd-010/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#sld-related'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'unicameral'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m45000\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 29,
                        "line": 45
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ne-sd-010/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  43 |\n  44 | test('Nebraska explains its one-house legislature', async ({ page, request }) => {\n> 45 |   const res = await request.get('/districts/ne-sd-010/');\n     |                             ^\n  46 |   expect(res.status()).toBe(200);\n  47 |   await page.goto('/districts/ne-sd-010/');\n  48 |   await expect(page.locator('#sld-related')).toContainText('unicameral', { timeout: 45000 });\n    at /app/tests/ui/sld-profile.spec.ts:45:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:46.106Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile-Nebraska-explains-its-one-house-legislature-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile-Nebraska-explains-its-one-house-legislature-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 29,
                    "line": 45
                  }
                },
                {
                  "workerIndex": 820,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 247,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ne-sd-010/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ne-sd-010/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:45:29",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 29,
                      "line": 45
                    },
                    "snippet": "\u001b[0m \u001b[90m 43 |\u001b[39m\n \u001b[90m 44 |\u001b[39m test(\u001b[32m'Nebraska explains its one-house legislature'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 45 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/districts/ne-sd-010/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 46 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/districts/ne-sd-010/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#sld-related'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'unicameral'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m45000\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 29,
                        "line": 45
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ne-sd-010/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  43 |\n  44 | test('Nebraska explains its one-house legislature', async ({ page, request }) => {\n> 45 |   const res = await request.get('/districts/ne-sd-010/');\n     |                             ^\n  46 |   expect(res.status()).toBe(200);\n  47 |   await page.goto('/districts/ne-sd-010/');\n  48 |   await expect(page.locator('#sld-related')).toContainText('unicameral', { timeout: 45000 });\n    at /app/tests/ui/sld-profile.spec.ts:45:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:47.052Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile-Nebraska-explains-its-one-house-legislature-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile-Nebraska-explains-its-one-house-legislature-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile-Nebraska-explains-its-one-house-legislature-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile-Nebraska-explains-its-one-house-legislature-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 29,
                    "line": 45
                  }
                },
                {
                  "workerIndex": 839,
                  "parallelIndex": 3,
                  "status": "failed",
                  "duration": 148,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ne-sd-010/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ne-sd-010/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/sld-profile.spec.ts:45:29",
                    "location": {
                      "file": "/app/tests/ui/sld-profile.spec.ts",
                      "column": 29,
                      "line": 45
                    },
                    "snippet": "\u001b[0m \u001b[90m 43 |\u001b[39m\n \u001b[90m 44 |\u001b[39m test(\u001b[32m'Nebraska explains its one-house legislature'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page\u001b[33m,\u001b[39m request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 45 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/districts/ne-sd-010/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 46 |\u001b[39m   expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 47 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/districts/ne-sd-010/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 48 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#sld-related'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'unicameral'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m45000\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/sld-profile.spec.ts",
                        "column": 29,
                        "line": 45
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/districts/ne-sd-010/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  43 |\n  44 | test('Nebraska explains its one-house legislature', async ({ page, request }) => {\n> 45 |   const res = await request.get('/districts/ne-sd-010/');\n     |                             ^\n  46 |   expect(res.status()).toBe(200);\n  47 |   await page.goto('/districts/ne-sd-010/');\n  48 |   await expect(page.locator('#sld-related')).toContainText('unicameral', { timeout: 45000 });\n    at /app/tests/ui/sld-profile.spec.ts:45:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:48.060Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile-Nebraska-explains-its-one-house-legislature-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/sld-profile-Nebraska-explains-its-one-house-legislature-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/sld-profile.spec.ts",
                    "column": 29,
                    "line": 45
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "dd54b48fb9d572a1ac58-9c8487335b1915a00278",
          "file": "tests/ui/sld-profile.spec.ts",
          "line": 44,
          "column": 5
        }
      ]
    },
    {
      "title": "tests/ui/status-banner.spec.ts",
      "file": "tests/ui/status-banner.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "status banner (sites#522)",
          "file": "tests/ui/status-banner.spec.ts",
          "line": 49,
          "column": 6,
          "specs": [
            {
              "title": "nothing is rendered on a quiet day",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 31,
                      "status": "timedOut",
                      "duration": 40036,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:51:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.347Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-e2420--is-rendered-on-a-quiet-day-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 55,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 296,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:51:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:51:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:04.115Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-e2420--is-rendered-on-a-quiet-day-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-e2420--is-rendered-on-a-quiet-day-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-e2420--is-rendered-on-a-quiet-day-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-e2420--is-rendered-on-a-quiet-day-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 67,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 255,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:51:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:51:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.175Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-e2420--is-rendered-on-a-quiet-day-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-e2420--is-rendered-on-a-quiet-day-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-27cba7ab0ffe132ee969",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 50,
              "column": 7
            },
            {
              "title": "a failing feed shows nothing",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 88,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 214,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:57:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:57:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.312Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-f93ab--failing-feed-shows-nothing-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-f93ab--failing-feed-shows-nothing-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 118,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 393,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:57:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:57:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.422Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-f93ab--failing-feed-shows-nothing-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-f93ab--failing-feed-shows-nothing-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-f93ab--failing-feed-shows-nothing-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-f93ab--failing-feed-shows-nothing-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 148,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 268,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:57:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:57:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:08.725Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-f93ab--failing-feed-shows-nothing-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-f93ab--failing-feed-shows-nothing-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-959d6808d5cd0ba1b715",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 56,
              "column": 7
            },
            {
              "title": "a release maintenance notice: blue strip above the header, text and status link",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 176,
                      "parallelIndex": 31,
                      "status": "timedOut",
                      "duration": 40039,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:63:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.860Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-1a51b-header-text-and-status-link-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 200,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 11739,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:63:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:63:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.632Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-1a51b-header-text-and-status-link-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-1a51b-header-text-and-status-link-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-1a51b-header-text-and-status-link-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-1a51b-header-text-and-status-link-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 219,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:63:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:63:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:03.059Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-1a51b-header-text-and-status-link-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-1a51b-header-text-and-status-link-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-f25a63efdcccfe501393",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 62,
              "column": 7
            },
            {
              "title": "an outage shows first, as a service issue",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 232,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 149,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:80:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:80:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:03.899Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-ca4b2-ws-first-as-a-service-issue-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-ca4b2-ws-first-as-a-service-issue-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 245,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 236,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:80:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:80:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:04.792Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-ca4b2-ws-first-as-a-service-issue-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-ca4b2-ws-first-as-a-service-issue-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-ca4b2-ws-first-as-a-service-issue-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-ca4b2-ws-first-as-a-service-issue-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 258,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 161,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:80:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:80:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:05.764Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-ca4b2-ws-first-as-a-service-issue-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-ca4b2-ws-first-as-a-service-issue-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-1ba4ff177bd084caf238",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 79,
              "column": 7
            },
            {
              "title": "only incidents for this site, plus site-less components such as sign-in",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 273,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 161,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:89:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:89:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:06.683Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-86d1e--components-such-as-sign-in-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-86d1e--components-such-as-sign-in-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 288,
                      "parallelIndex": 31,
                      "status": "failed",
                      "duration": 276,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:89:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:89:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:07.596Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-86d1e--components-such-as-sign-in-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-86d1e--components-such-as-sign-in-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-86d1e--components-such-as-sign-in-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-86d1e--components-such-as-sign-in-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 305,
                      "parallelIndex": 31,
                      "status": "timedOut",
                      "duration": 40040,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:89:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:08.667Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-86d1e--components-such-as-sign-in-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-9defa414df7cb52e059e",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 88,
              "column": 7
            },
            {
              "title": "a maintenance notice older than 12 h is ignored (left open by a failed release)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 349,
                      "parallelIndex": 31,
                      "status": "timedOut",
                      "duration": 40052,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:104:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:49.339Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-45ff0-t-open-by-a-failed-release--ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 465,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 206,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:104:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:104:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:30.021Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-45ff0-t-open-by-a-failed-release--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-45ff0-t-open-by-a-failed-release--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-45ff0-t-open-by-a-failed-release--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-45ff0-t-open-by-a-failed-release--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 476,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:104:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:104:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:30.900Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-45ff0-t-open-by-a-failed-release--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-45ff0-t-open-by-a-failed-release--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-50a3076241d7eaebb74e",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 103,
              "column": 7
            },
            {
              "title": "Dismiss hides it for the session, until the incident is updated",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 493,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 171,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:110:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:110:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:31.826Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-01770-til-the-incident-is-updated-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-01770-til-the-incident-is-updated-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 513,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 304,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:110:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:110:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:32.747Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-01770-til-the-incident-is-updated-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-01770-til-the-incident-is-updated-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-01770-til-the-incident-is-updated-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-01770-til-the-incident-is-updated-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 536,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 200,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:110:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:110:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.903Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-01770-til-the-incident-is-updated-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-01770-til-the-incident-is-updated-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-eb146383210c504b0c6c",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 109,
              "column": 7
            },
            {
              "title": "feed text is shown as text, never as HTML",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 565,
                      "parallelIndex": 28,
                      "status": "failed",
                      "duration": 177,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:128:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:128:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.910Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-699a8-shown-as-text-never-as-HTML-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-699a8-shown-as-text-never-as-HTML-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 586,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 361,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:128:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:128:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.885Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-699a8-shown-as-text-never-as-HTML-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-699a8-shown-as-text-never-as-HTML-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-699a8-shown-as-text-never-as-HTML-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-699a8-shown-as-text-never-as-HTML-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 612,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 184,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:128:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:128:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.987Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-699a8-shown-as-text-never-as-HTML-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-699a8-shown-as-text-never-as-HTML-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-ada12eef967eaf1cd0d0",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 126,
              "column": 7
            },
            {
              "title": "a banner goes away when the incident resolves, without a reload",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 633,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 176,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:135:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:135:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:37.974Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-b4a6f-t-resolves-without-a-reload-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-b4a6f-t-resolves-without-a-reload-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 653,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 279,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:135:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:135:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:38.960Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-b4a6f-t-resolves-without-a-reload-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-b4a6f-t-resolves-without-a-reload-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-b4a6f-t-resolves-without-a-reload-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-b4a6f-t-resolves-without-a-reload-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 680,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 195,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:135:5",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 14,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/status/banner.json*'\u001b[39m\u001b[33m,\u001b[39m r \u001b[33m=>\u001b[39m\n \u001b[90m 42 |\u001b[39m     incidents \u001b[33m===\u001b[39m \u001b[32m'error'\u001b[39m \u001b[33m?\u001b[39m r\u001b[33m.\u001b[39mfulfill({ status\u001b[33m:\u001b[39m \u001b[35m502\u001b[39m\u001b[33m,\u001b[39m body\u001b[33m:\u001b[39m \u001b[32m'bad gateway'\u001b[39m }) \u001b[33m:\u001b[39m r\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { incidents } }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mwaitForFunction(() \u001b[33m=>\u001b[39m \u001b[32m'electinfoStatusBanner'\u001b[39m \u001b[36min\u001b[39m window)\u001b[33m;\u001b[39m\n \u001b[90m 45 |\u001b[39m }\n \u001b[90m 46 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 14,
                            "line": 43
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  41 |   await page.route('**/status/banner.json*', r =>\n  42 |     incidents === 'error' ? r.fulfill({ status: 502, body: 'bad gateway' }) : r.fulfill({ json: { incidents } }));\n> 43 |   await page.goto('/');\n     |              ^\n  44 |   await page.waitForFunction(() => 'electinfoStatusBanner' in window);\n  45 | }\n  46 |\n    at open (/app/tests/ui/status-banner.spec.ts:43:14)\n    at /app/tests/ui/status-banner.spec.ts:135:5"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.034Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-b4a6f-t-resolves-without-a-reload-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-b4a6f-t-resolves-without-a-reload-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 14,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-565bae5be9d64ff87d37",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 134,
              "column": 7
            },
            {
              "title": "nginx serves /status/banner.json as JSON",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 701,
                      "parallelIndex": 6,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/status/banner.json\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/status/banner.json\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/status-banner.spec.ts:144:31",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 31,
                          "line": 144
                        },
                        "snippet": "\u001b[0m \u001b[90m 142 |\u001b[39m\n \u001b[90m 143 |\u001b[39m   test(\u001b[32m'nginx serves /status/banner.json as JSON'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 144 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/status/banner.json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 145 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 146 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 147 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 31,
                            "line": 144
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/status/banner.json\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  142 |\n  143 |   test('nginx serves /status/banner.json as JSON', async ({ request }) => {\n> 144 |     const res = await request.get('/status/banner.json');\n      |                               ^\n  145 |     expect(res.status()).toBe(200);\n  146 |     expect(res.headers()['content-type']).toContain('application/json');\n  147 |     const body = await res.json();\n    at /app/tests/ui/status-banner.spec.ts:144:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:41.000Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-27f7e--status-banner-json-as-JSON-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 31,
                        "line": 144
                      }
                    },
                    {
                      "workerIndex": 717,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 68,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/status/banner.json\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/status/banner.json\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/status-banner.spec.ts:144:31",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 31,
                          "line": 144
                        },
                        "snippet": "\u001b[0m \u001b[90m 142 |\u001b[39m\n \u001b[90m 143 |\u001b[39m   test(\u001b[32m'nginx serves /status/banner.json as JSON'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 144 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/status/banner.json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 145 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 146 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 147 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 31,
                            "line": 144
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/status/banner.json\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  142 |\n  143 |   test('nginx serves /status/banner.json as JSON', async ({ request }) => {\n> 144 |     const res = await request.get('/status/banner.json');\n      |                               ^\n  145 |     expect(res.status()).toBe(200);\n  146 |     expect(res.headers()['content-type']).toContain('application/json');\n  147 |     const body = await res.json();\n    at /app/tests/ui/status-banner.spec.ts:144:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:41.709Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-27f7e--status-banner-json-as-JSON-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-27f7e--status-banner-json-as-JSON-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 31,
                        "line": 144
                      }
                    },
                    {
                      "workerIndex": 737,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/status/banner.json\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/status/banner.json\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/status-banner.spec.ts:144:31",
                        "location": {
                          "file": "/app/tests/ui/status-banner.spec.ts",
                          "column": 31,
                          "line": 144
                        },
                        "snippet": "\u001b[0m \u001b[90m 142 |\u001b[39m\n \u001b[90m 143 |\u001b[39m   test(\u001b[32m'nginx serves /status/banner.json as JSON'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 144 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/status/banner.json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 145 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 146 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'content-type'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'application/json'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 147 |\u001b[39m     \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/status-banner.spec.ts",
                            "column": 31,
                            "line": 144
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/status/banner.json\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  142 |\n  143 |   test('nginx serves /status/banner.json as JSON', async ({ request }) => {\n> 144 |     const res = await request.get('/status/banner.json');\n      |                               ^\n  145 |     expect(res.status()).toBe(200);\n  146 |     expect(res.headers()['content-type']).toContain('application/json');\n  147 |     const body = await res.json();\n    at /app/tests/ui/status-banner.spec.ts:144:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.481Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/status-banner-status-banne-27f7e--status-banner-json-as-JSON-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/status-banner.spec.ts",
                        "column": 31,
                        "line": 144
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ea82a25878e1c01982b1-c09c6467d9f291c5d5dc",
              "file": "tests/ui/status-banner.spec.ts",
              "line": 143,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/us.spec.ts",
      "file": "tests/ui/us.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "us.elect.info",
          "file": "tests/ui/us.spec.ts",
          "line": 3,
          "column": 6,
          "specs": [
            {
              "title": "homepage loads with title",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 31,
                      "parallelIndex": 25,
                      "status": "timedOut",
                      "duration": 40031,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 16,
                            "line": 5
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  3 | test.describe('us.elect.info', () => {\n  4 |   test('homepage loads with title', async ({ page }) => {\n> 5 |     await page.goto('/');\n    |                ^\n  6 |     await expect(page).toHaveTitle(/US Elections/i);\n  7 |     await page.screenshot({ path: '/app/test-output/us-homepage.png' });\n  8 |   });\n    at /app/tests/ui/us.spec.ts:5:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:01:23.361Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-homepage-loads-with-title-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 56,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 288,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:5:16",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 16,
                          "line": 5
                        },
                        "snippet": "\u001b[0m \u001b[90m 3 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'us.elect.info'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 4 |\u001b[39m   test(\u001b[32m'homepage loads with title'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 5 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m   |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 6 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page)\u001b[33m.\u001b[39mtoHaveTitle(\u001b[35m/US Elections/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 7 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mscreenshot({ path\u001b[33m:\u001b[39m \u001b[32m'/app/test-output/us-homepage.png'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 8 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 16,
                            "line": 5
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  3 | test.describe('us.elect.info', () => {\n  4 |   test('homepage loads with title', async ({ page }) => {\n> 5 |     await page.goto('/');\n    |                ^\n  6 |     await expect(page).toHaveTitle(/US Elections/i);\n  7 |     await page.screenshot({ path: '/app/test-output/us-homepage.png' });\n  8 |   });\n    at /app/tests/ui/us.spec.ts:5:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:04.089Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-homepage-loads-with-title-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-homepage-loads-with-title-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-homepage-loads-with-title-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-homepage-loads-with-title-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 16,
                        "line": 5
                      }
                    },
                    {
                      "workerIndex": 66,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 246,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:5:16",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 16,
                          "line": 5
                        },
                        "snippet": "\u001b[0m \u001b[90m 3 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'us.elect.info'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 4 |\u001b[39m   test(\u001b[32m'homepage loads with title'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 5 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m   |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 6 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page)\u001b[33m.\u001b[39mtoHaveTitle(\u001b[35m/US Elections/i\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 7 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mscreenshot({ path\u001b[33m:\u001b[39m \u001b[32m'/app/test-output/us-homepage.png'\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 8 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 16,
                            "line": 5
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n  3 | test.describe('us.elect.info', () => {\n  4 |   test('homepage loads with title', async ({ page }) => {\n> 5 |     await page.goto('/');\n    |                ^\n  6 |     await expect(page).toHaveTitle(/US Elections/i);\n  7 |     await page.screenshot({ path: '/app/test-output/us-homepage.png' });\n  8 |   });\n    at /app/tests/ui/us.spec.ts:5:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:05.216Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-homepage-loads-with-title-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-homepage-loads-with-title-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 16,
                        "line": 5
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "2d63ce8979ebe7723300-8afeb95d04c94adeed96",
              "file": "tests/ui/us.spec.ts",
              "line": 4,
              "column": 7
            },
            {
              "title": "entity stats display",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 92,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 215,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:11:16",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 16,
                          "line": 11
                        },
                        "snippet": "\u001b[0m \u001b[90m  9 |\u001b[39m\n \u001b[90m 10 |\u001b[39m   test(\u001b[32m'entity stats display'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 11 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 12 |\u001b[39m     \u001b[90m// Wait for stats to load from OpenSearch\u001b[39m\n \u001b[90m 13 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'-'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 16,
                            "line": 11
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n   9 |\n  10 |   test('entity stats display', async ({ page }) => {\n> 11 |     await page.goto('/');\n     |                ^\n  12 |     // Wait for stats to load from OpenSearch\n  13 |     await expect(page.locator('#count-politicians')).not.toHaveText('-');\n  14 |   });\n    at /app/tests/ui/us.spec.ts:11:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:06.366Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-entity-stats-display-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-entity-stats-display-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 16,
                        "line": 11
                      }
                    },
                    {
                      "workerIndex": 120,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 374,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:11:16",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 16,
                          "line": 11
                        },
                        "snippet": "\u001b[0m \u001b[90m  9 |\u001b[39m\n \u001b[90m 10 |\u001b[39m   test(\u001b[32m'entity stats display'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 11 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 12 |\u001b[39m     \u001b[90m// Wait for stats to load from OpenSearch\u001b[39m\n \u001b[90m 13 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'-'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 16,
                            "line": 11
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n   9 |\n  10 |   test('entity stats display', async ({ page }) => {\n> 11 |     await page.goto('/');\n     |                ^\n  12 |     // Wait for stats to load from OpenSearch\n  13 |     await expect(page.locator('#count-politicians')).not.toHaveText('-');\n  14 |   });\n    at /app/tests/ui/us.spec.ts:11:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:07.457Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-entity-stats-display-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-entity-stats-display-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-entity-stats-display-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-entity-stats-display-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 16,
                        "line": 11
                      }
                    },
                    {
                      "workerIndex": 155,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 197,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:11:16",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 16,
                          "line": 11
                        },
                        "snippet": "\u001b[0m \u001b[90m  9 |\u001b[39m\n \u001b[90m 10 |\u001b[39m   test(\u001b[32m'entity stats display'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 11 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 12 |\u001b[39m     \u001b[90m// Wait for stats to load from OpenSearch\u001b[39m\n \u001b[90m 13 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-politicians'\u001b[39m))\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'-'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 14 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 16,
                            "line": 11
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/\", waiting until \"load\"\u001b[22m\n\n\n   9 |\n  10 |   test('entity stats display', async ({ page }) => {\n> 11 |     await page.goto('/');\n     |                ^\n  12 |     // Wait for stats to load from OpenSearch\n  13 |     await expect(page.locator('#count-politicians')).not.toHaveText('-');\n  14 |   });\n    at /app/tests/ui/us.spec.ts:11:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:02:09.031Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-entity-stats-display-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-entity-stats-display-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 16,
                        "line": 11
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "2d63ce8979ebe7723300-49e351c56a50ed35776c",
              "file": "tests/ui/us.spec.ts",
              "line": 10,
              "column": 7
            },
            {
              "title": "CSS assets load",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 179,
                      "parallelIndex": 25,
                      "status": "timedOut",
                      "duration": 40037,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 33,
                            "line": 17
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/css/style.css\", waiting until \"load\"\u001b[22m\n\n\n  15 |\n  16 |   test('CSS assets load', async ({ page }) => {\n> 17 |     const response = await page.goto('/css/style.css');\n     |                                 ^\n  18 |     expect(response?.status()).toBe(200);\n  19 |   });\n  20 |\n    at /app/tests/ui/us.spec.ts:17:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:02:09.971Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-CSS-assets-load-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 204,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 12067,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/css/style.css\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/css/style.css\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/css/style.css\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/css/style.css\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:17:33",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 33,
                          "line": 17
                        },
                        "snippet": "\u001b[0m \u001b[90m 15 |\u001b[39m\n \u001b[90m 16 |\u001b[39m   test(\u001b[32m'CSS assets load'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/css/style.css'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 33,
                            "line": 17
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/css/style.css\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/css/style.css\", waiting until \"load\"\u001b[22m\n\n\n  15 |\n  16 |   test('CSS assets load', async ({ page }) => {\n> 17 |     const response = await page.goto('/css/style.css');\n     |                                 ^\n  18 |     expect(response?.status()).toBe(200);\n  19 |   });\n  20 |\n    at /app/tests/ui/us.spec.ts:17:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:02:50.705Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-CSS-assets-load-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-CSS-assets-load-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-CSS-assets-load-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-CSS-assets-load-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 33,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 222,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 156,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/css/style.css\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/css/style.css\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/css/style.css\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/css/style.css\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:17:33",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 33,
                          "line": 17
                        },
                        "snippet": "\u001b[0m \u001b[90m 15 |\u001b[39m\n \u001b[90m 16 |\u001b[39m   test(\u001b[32m'CSS assets load'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/css/style.css'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 33,
                            "line": 17
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/css/style.css\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/css/style.css\", waiting until \"load\"\u001b[22m\n\n\n  15 |\n  16 |   test('CSS assets load', async ({ page }) => {\n> 17 |     const response = await page.goto('/css/style.css');\n     |                                 ^\n  18 |     expect(response?.status()).toBe(200);\n  19 |   });\n  20 |\n    at /app/tests/ui/us.spec.ts:17:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:03.521Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-CSS-assets-load-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-CSS-assets-load-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 33,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "2d63ce8979ebe7723300-9f6402d7bf0b7a821851",
              "file": "tests/ui/us.spec.ts",
              "line": 16,
              "column": 7
            },
            {
              "title": "JS assets load",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 234,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 154,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/candidate-index.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/candidate-index.js\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/candidate-index.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/candidate-index.js\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:23:33",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 33,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m   test(\u001b[32m'JS assets load'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 22 |\u001b[39m     \u001b[90m// Check candidate-index.js which is one of the entity-specific search modules\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/js/candidate-index.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 33,
                            "line": 23
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/candidate-index.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/candidate-index.js\", waiting until \"load\"\u001b[22m\n\n\n  21 |   test('JS assets load', async ({ page }) => {\n  22 |     // Check candidate-index.js which is one of the entity-specific search modules\n> 23 |     const response = await page.goto('/js/candidate-index.js');\n     |                                 ^\n  24 |     expect(response?.status()).toBe(200);\n  25 |   });\n  26 |\n    at /app/tests/ui/us.spec.ts:23:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:04.370Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-JS-assets-load-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-JS-assets-load-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 33,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 246,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 237,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/candidate-index.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/candidate-index.js\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/candidate-index.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/candidate-index.js\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:23:33",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 33,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m   test(\u001b[32m'JS assets load'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 22 |\u001b[39m     \u001b[90m// Check candidate-index.js which is one of the entity-specific search modules\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/js/candidate-index.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 33,
                            "line": 23
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/candidate-index.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/candidate-index.js\", waiting until \"load\"\u001b[22m\n\n\n  21 |   test('JS assets load', async ({ page }) => {\n  22 |     // Check candidate-index.js which is one of the entity-specific search modules\n> 23 |     const response = await page.goto('/js/candidate-index.js');\n     |                                 ^\n  24 |     expect(response?.status()).toBe(200);\n  25 |   });\n  26 |\n    at /app/tests/ui/us.spec.ts:23:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:05.207Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-JS-assets-load-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-JS-assets-load-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-JS-assets-load-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-JS-assets-load-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 33,
                        "line": 23
                      }
                    },
                    {
                      "workerIndex": 260,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 180,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/candidate-index.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/candidate-index.js\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/candidate-index.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/candidate-index.js\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:23:33",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 33,
                          "line": 23
                        },
                        "snippet": "\u001b[0m \u001b[90m 21 |\u001b[39m   test(\u001b[32m'JS assets load'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 22 |\u001b[39m     \u001b[90m// Check candidate-index.js which is one of the entity-specific search modules\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 23 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/js/candidate-index.js'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 24 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 25 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 33,
                            "line": 23
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/js/candidate-index.js\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/js/candidate-index.js\", waiting until \"load\"\u001b[22m\n\n\n  21 |   test('JS assets load', async ({ page }) => {\n  22 |     // Check candidate-index.js which is one of the entity-specific search modules\n> 23 |     const response = await page.goto('/js/candidate-index.js');\n     |                                 ^\n  24 |     expect(response?.status()).toBe(200);\n  25 |   });\n  26 |\n    at /app/tests/ui/us.spec.ts:23:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:06.168Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-JS-assets-load-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-JS-assets-load-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 33,
                        "line": 23
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "2d63ce8979ebe7723300-6e13cf9f04841582af4e",
              "file": "tests/ui/us.spec.ts",
              "line": 21,
              "column": 7
            },
            {
              "title": "404 page works",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 276,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 181,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/nonexistent-page\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/nonexistent-page\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/nonexistent-page\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/nonexistent-page\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:28:33",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 33,
                          "line": 28
                        },
                        "snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m\n \u001b[90m 27 |\u001b[39m   test(\u001b[32m'404 page works'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/nonexistent-page'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 29 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 33,
                            "line": 28
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/nonexistent-page\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/nonexistent-page\", waiting until \"load\"\u001b[22m\n\n\n  26 |\n  27 |   test('404 page works', async ({ page }) => {\n> 28 |     const response = await page.goto('/nonexistent-page');\n     |                                 ^\n  29 |     expect(response?.status()).toBe(404);\n  30 |   });\n  31 | });\n    at /app/tests/ui/us.spec.ts:28:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:07.099Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-404-page-works-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-404-page-works-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 33,
                        "line": 28
                      }
                    },
                    {
                      "workerIndex": 292,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 312,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/nonexistent-page\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/nonexistent-page\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/nonexistent-page\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/nonexistent-page\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/us.spec.ts:28:33",
                        "location": {
                          "file": "/app/tests/ui/us.spec.ts",
                          "column": 33,
                          "line": 28
                        },
                        "snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m\n \u001b[90m 27 |\u001b[39m   test(\u001b[32m'404 page works'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 28 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/nonexistent-page'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 29 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m404\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 33,
                            "line": 28
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/nonexistent-page\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/nonexistent-page\", waiting until \"load\"\u001b[22m\n\n\n  26 |\n  27 |   test('404 page works', async ({ page }) => {\n> 28 |     const response = await page.goto('/nonexistent-page');\n     |                                 ^\n  29 |     expect(response?.status()).toBe(404);\n  30 |   });\n  31 | });\n    at /app/tests/ui/us.spec.ts:28:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:08.027Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-404-page-works-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-404-page-works-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-404-page-works-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-404-page-works-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/us.spec.ts",
                        "column": 33,
                        "line": 28
                      }
                    },
                    {
                      "workerIndex": 309,
                      "parallelIndex": 25,
                      "status": "timedOut",
                      "duration": 40045,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/us.spec.ts",
                            "column": 33,
                            "line": 28
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/nonexistent-page\", waiting until \"load\"\u001b[22m\n\n\n  26 |\n  27 |   test('404 page works', async ({ page }) => {\n> 28 |     const response = await page.goto('/nonexistent-page');\n     |                                 ^\n  29 |     expect(response?.status()).toBe(404);\n  30 |   });\n  31 | });\n    at /app/tests/ui/us.spec.ts:28:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:09.041Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/us-us-elect-info-404-page-works-ui-retry2/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "2d63ce8979ebe7723300-f161db786bfcba883987",
              "file": "tests/ui/us.spec.ts",
              "line": 27,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/vendor-purpose-lifecycle.spec.ts",
      "file": "tests/ui/vendor-purpose-lifecycle.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "unavailable cycle empty groups retains raw disclosure",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 145,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 227,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 16,
                      "line": 31
                    },
                    "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m       \u001b[36mawait\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { data\u001b[33m:\u001b[39m { vendorPurposeFlow\u001b[33m:\u001b[39m { taxonomyVersion\u001b[33m:\u001b[39m \u001b[32m'kw-1'\u001b[39m\u001b[33m,\u001b[39m totalAmount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m groups\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m links\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m otherLinks\u001b[33m:\u001b[39m [] } } } })\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByLabel(\u001b[32m'Purpose cycle'\u001b[39m)\u001b[33m.\u001b[39mselectOption(\u001b[32m'2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Cycle breakdown unavailable.'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 16,
                        "line": 31
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  29 |       await route.fulfill({ json: { data: { vendorPurposeFlow: { taxonomyVersion: 'kw-1', totalAmount: 0, groups: [], links: [], otherLinks: [] } } } });\n  30 |     });\n> 31 |     await page.goto('/vendors/purpose-lifecycle/');\n     |                ^\n  32 |     await expect(page.locator('#purposes canvas')).toBeVisible();\n  33 |     await page.getByLabel('Purpose cycle').selectOption('2024');\n  34 |     await expect(page.locator('#purposes')).toContainText('Cycle breakdown unavailable.');\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:02:08.721Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-ddd71-oups-retains-raw-disclosure-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-ddd71-oups-retains-raw-disclosure-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 16,
                    "line": 31
                  }
                },
                {
                  "workerIndex": 172,
                  "parallelIndex": 0,
                  "status": "timedOut",
                  "duration": 40995,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 16,
                        "line": 31
                      },
                      "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  29 |       await route.fulfill({ json: { data: { vendorPurposeFlow: { taxonomyVersion: 'kw-1', totalAmount: 0, groups: [], links: [], otherLinks: [] } } } });\n  30 |     });\n> 31 |     await page.goto('/vendors/purpose-lifecycle/');\n     |                ^\n  32 |     await expect(page.locator('#purposes canvas')).toBeVisible();\n  33 |     await page.getByLabel('Purpose cycle').selectOption('2024');\n  34 |     await expect(page.locator('#purposes')).toContainText('Cycle breakdown unavailable.');\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:02:09.822Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-ddd71-oups-retains-raw-disclosure-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-ddd71-oups-retains-raw-disclosure-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-ddd71-oups-retains-raw-disclosure-ui-retry1/trace.zip"
                    }
                  ]
                },
                {
                  "workerIndex": 207,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 11350,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 16,
                      "line": 31
                    },
                    "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m       \u001b[36mawait\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { data\u001b[33m:\u001b[39m { vendorPurposeFlow\u001b[33m:\u001b[39m { taxonomyVersion\u001b[33m:\u001b[39m \u001b[32m'kw-1'\u001b[39m\u001b[33m,\u001b[39m totalAmount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m groups\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m links\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m otherLinks\u001b[33m:\u001b[39m [] } } } })\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByLabel(\u001b[32m'Purpose cycle'\u001b[39m)\u001b[33m.\u001b[39mselectOption(\u001b[32m'2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Cycle breakdown unavailable.'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 16,
                        "line": 31
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  29 |       await route.fulfill({ json: { data: { vendorPurposeFlow: { taxonomyVersion: 'kw-1', totalAmount: 0, groups: [], links: [], otherLinks: [] } } } });\n  30 |     });\n> 31 |     await page.goto('/vendors/purpose-lifecycle/');\n     |                ^\n  32 |     await expect(page.locator('#purposes canvas')).toBeVisible();\n  33 |     await page.getByLabel('Purpose cycle').selectOption('2024');\n  34 |     await expect(page.locator('#purposes')).toContainText('Cycle breakdown unavailable.');\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:02:51.473Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-ddd71-oups-retains-raw-disclosure-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-ddd71-oups-retains-raw-disclosure-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 16,
                    "line": 31
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "fe31ae87325961aac612-8330dde0efbedb1a3667",
          "file": "tests/ui/vendor-purpose-lifecycle.spec.ts",
          "line": 25,
          "column": 7
        },
        {
          "title": "unavailable cycle request error retains raw disclosure",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 220,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 154,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 16,
                      "line": 31
                    },
                    "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m       \u001b[36mawait\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { data\u001b[33m:\u001b[39m { vendorPurposeFlow\u001b[33m:\u001b[39m { taxonomyVersion\u001b[33m:\u001b[39m \u001b[32m'kw-1'\u001b[39m\u001b[33m,\u001b[39m totalAmount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m groups\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m links\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m otherLinks\u001b[33m:\u001b[39m [] } } } })\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByLabel(\u001b[32m'Purpose cycle'\u001b[39m)\u001b[33m.\u001b[39mselectOption(\u001b[32m'2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Cycle breakdown unavailable.'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 16,
                        "line": 31
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  29 |       await route.fulfill({ json: { data: { vendorPurposeFlow: { taxonomyVersion: 'kw-1', totalAmount: 0, groups: [], links: [], otherLinks: [] } } } });\n  30 |     });\n> 31 |     await page.goto('/vendors/purpose-lifecycle/');\n     |                ^\n  32 |     await expect(page.locator('#purposes canvas')).toBeVisible();\n  33 |     await page.getByLabel('Purpose cycle').selectOption('2024');\n  34 |     await expect(page.locator('#purposes')).toContainText('Cycle breakdown unavailable.');\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:03.476Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-93fce-rror-retains-raw-disclosure-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-93fce-rror-retains-raw-disclosure-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 16,
                    "line": 31
                  }
                },
                {
                  "workerIndex": 233,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 244,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 16,
                      "line": 31
                    },
                    "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m       \u001b[36mawait\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { data\u001b[33m:\u001b[39m { vendorPurposeFlow\u001b[33m:\u001b[39m { taxonomyVersion\u001b[33m:\u001b[39m \u001b[32m'kw-1'\u001b[39m\u001b[33m,\u001b[39m totalAmount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m groups\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m links\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m otherLinks\u001b[33m:\u001b[39m [] } } } })\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByLabel(\u001b[32m'Purpose cycle'\u001b[39m)\u001b[33m.\u001b[39mselectOption(\u001b[32m'2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Cycle breakdown unavailable.'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 16,
                        "line": 31
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  29 |       await route.fulfill({ json: { data: { vendorPurposeFlow: { taxonomyVersion: 'kw-1', totalAmount: 0, groups: [], links: [], otherLinks: [] } } } });\n  30 |     });\n> 31 |     await page.goto('/vendors/purpose-lifecycle/');\n     |                ^\n  32 |     await expect(page.locator('#purposes canvas')).toBeVisible();\n  33 |     await page.getByLabel('Purpose cycle').selectOption('2024');\n  34 |     await expect(page.locator('#purposes')).toContainText('Cycle breakdown unavailable.');\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:04.326Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-93fce-rror-retains-raw-disclosure-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-93fce-rror-retains-raw-disclosure-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-93fce-rror-retains-raw-disclosure-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-93fce-rror-retains-raw-disclosure-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 16,
                    "line": 31
                  }
                },
                {
                  "workerIndex": 248,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 166,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 16,
                      "line": 31
                    },
                    "snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m       \u001b[36mawait\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { data\u001b[33m:\u001b[39m { vendorPurposeFlow\u001b[33m:\u001b[39m { taxonomyVersion\u001b[33m:\u001b[39m \u001b[32m'kw-1'\u001b[39m\u001b[33m,\u001b[39m totalAmount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m groups\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m links\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m otherLinks\u001b[33m:\u001b[39m [] } } } })\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m     })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByLabel(\u001b[32m'Purpose cycle'\u001b[39m)\u001b[33m.\u001b[39mselectOption(\u001b[32m'2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 34 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Cycle breakdown unavailable.'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 16,
                        "line": 31
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  29 |       await route.fulfill({ json: { data: { vendorPurposeFlow: { taxonomyVersion: 'kw-1', totalAmount: 0, groups: [], links: [], otherLinks: [] } } } });\n  30 |     });\n> 31 |     await page.goto('/vendors/purpose-lifecycle/');\n     |                ^\n  32 |     await expect(page.locator('#purposes canvas')).toBeVisible();\n  33 |     await page.getByLabel('Purpose cycle').selectOption('2024');\n  34 |     await expect(page.locator('#purposes')).toContainText('Cycle breakdown unavailable.');\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:31:16"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:05.297Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-93fce-rror-retains-raw-disclosure-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-u-93fce-rror-retains-raw-disclosure-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 16,
                    "line": 31
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "fe31ae87325961aac612-16fd070860d17139476d",
          "file": "tests/ui/vendor-purpose-lifecycle.spec.ts",
          "line": 25,
          "column": 7
        },
        {
          "title": "latest cycle wins over a slow previous request, without duplicate charts",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 261,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 181,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:52:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 52
                    },
                    "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m     \u001b[36mreturn\u001b[39m respond(route\u001b[33m,\u001b[39m flow(cycle \u001b[33m===\u001b[39m \u001b[35m2024\u001b[39m \u001b[33m?\u001b[39m \u001b[32m'Latest group'\u001b[39m \u001b[33m:\u001b[39m \u001b[32m'All cycles group'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByLabel(\u001b[32m'Purpose cycle'\u001b[39m)\u001b[33m.\u001b[39mselectOption(\u001b[32m'2022'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m   \u001b[36mawait\u001b[39m started\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 52
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  50 |     return respond(route, flow(cycle === 2024 ? 'Latest group' : 'All cycles group'));\n  51 |   });\n> 52 |   await page.goto('/vendors/purpose-lifecycle/');\n     |              ^\n  53 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  54 |   await page.getByLabel('Purpose cycle').selectOption('2022');\n  55 |   await started;\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:52:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:06.197Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-l-22cdc-st-without-duplicate-charts-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-l-22cdc-st-without-duplicate-charts-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 52
                  }
                },
                {
                  "workerIndex": 277,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 274,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:52:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 52
                    },
                    "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m     \u001b[36mreturn\u001b[39m respond(route\u001b[33m,\u001b[39m flow(cycle \u001b[33m===\u001b[39m \u001b[35m2024\u001b[39m \u001b[33m?\u001b[39m \u001b[32m'Latest group'\u001b[39m \u001b[33m:\u001b[39m \u001b[32m'All cycles group'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByLabel(\u001b[32m'Purpose cycle'\u001b[39m)\u001b[33m.\u001b[39mselectOption(\u001b[32m'2022'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m   \u001b[36mawait\u001b[39m started\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 52
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  50 |     return respond(route, flow(cycle === 2024 ? 'Latest group' : 'All cycles group'));\n  51 |   });\n> 52 |   await page.goto('/vendors/purpose-lifecycle/');\n     |              ^\n  53 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  54 |   await page.getByLabel('Purpose cycle').selectOption('2022');\n  55 |   await started;\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:52:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:07.068Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-l-22cdc-st-without-duplicate-charts-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-l-22cdc-st-without-duplicate-charts-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-l-22cdc-st-without-duplicate-charts-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-l-22cdc-st-without-duplicate-charts-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 52
                  }
                },
                {
                  "workerIndex": 293,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 198,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:52:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 52
                    },
                    "snippet": "\u001b[0m \u001b[90m 50 |\u001b[39m     \u001b[36mreturn\u001b[39m respond(route\u001b[33m,\u001b[39m flow(cycle \u001b[33m===\u001b[39m \u001b[35m2024\u001b[39m \u001b[33m?\u001b[39m \u001b[32m'Latest group'\u001b[39m \u001b[33m:\u001b[39m \u001b[32m'All cycles group'\u001b[39m))\u001b[33m;\u001b[39m\n \u001b[90m 51 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 52 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 53 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 54 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByLabel(\u001b[32m'Purpose cycle'\u001b[39m)\u001b[33m.\u001b[39mselectOption(\u001b[32m'2022'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 55 |\u001b[39m   \u001b[36mawait\u001b[39m started\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 52
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  50 |     return respond(route, flow(cycle === 2024 ? 'Latest group' : 'All cycles group'));\n  51 |   });\n> 52 |   await page.goto('/vendors/purpose-lifecycle/');\n     |              ^\n  53 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  54 |   await page.getByLabel('Purpose cycle').selectOption('2022');\n  55 |   await started;\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:52:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:03:08.106Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-l-22cdc-st-without-duplicate-charts-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-l-22cdc-st-without-duplicate-charts-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 52
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "fe31ae87325961aac612-24b76132a8b01c12dfcb",
          "file": "tests/ui/vendor-purpose-lifecycle.spec.ts",
          "line": 43,
          "column": 5
        },
        {
          "title": "top-purpose text is escaped in the expandable table",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 308,
                  "parallelIndex": 0,
                  "status": "timedOut",
                  "duration": 40047,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 73
                      },
                      "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  71 | test('top-purpose text is escaped in the expandable table', async ({ page }) => {\n  72 |   await mock(page, async route => respond(route, flow()));\n> 73 |   await page.goto('/vendors/purpose-lifecycle/');\n     |              ^\n  74 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  75 |   await page.locator('#purposes .mf-view-btn[data-view=\"table\"]').click();\n  76 |   await page.locator('#purposes tbody summary').click();\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:73:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:09.022Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-t-d5080-ped-in-the-expandable-table-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 351,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 11447,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:73:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 73
                    },
                    "snippet": "\u001b[0m \u001b[90m 71 |\u001b[39m test(\u001b[32m'top-purpose text is escaped in the expandable table'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 72 |\u001b[39m   \u001b[36mawait\u001b[39m mock(page\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m route \u001b[33m=>\u001b[39m respond(route\u001b[33m,\u001b[39m flow()))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 73 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 74 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 75 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 76 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody summary'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 73
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  71 | test('top-purpose text is escaped in the expandable table', async ({ page }) => {\n  72 |   await mock(page, async route => respond(route, flow()));\n> 73 |   await page.goto('/vendors/purpose-lifecycle/');\n     |              ^\n  74 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  75 |   await page.locator('#purposes .mf-view-btn[data-view=\"table\"]').click();\n  76 |   await page.locator('#purposes tbody summary').click();\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:73:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:49.683Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-t-d5080-ped-in-the-expandable-table-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-t-d5080-ped-in-the-expandable-table-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-t-d5080-ped-in-the-expandable-table-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-t-d5080-ped-in-the-expandable-table-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 73
                  }
                },
                {
                  "workerIndex": 361,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 170,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:73:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 73
                    },
                    "snippet": "\u001b[0m \u001b[90m 71 |\u001b[39m test(\u001b[32m'top-purpose text is escaped in the expandable table'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 72 |\u001b[39m   \u001b[36mawait\u001b[39m mock(page\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m route \u001b[33m=>\u001b[39m respond(route\u001b[33m,\u001b[39m flow()))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 73 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 74 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 75 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 76 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody summary'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 73
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  71 | test('top-purpose text is escaped in the expandable table', async ({ page }) => {\n  72 |   await mock(page, async route => respond(route, flow()));\n> 73 |   await page.goto('/vendors/purpose-lifecycle/');\n     |              ^\n  74 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  75 |   await page.locator('#purposes .mf-view-btn[data-view=\"table\"]').click();\n  76 |   await page.locator('#purposes tbody summary').click();\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:73:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:01.884Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-t-d5080-ped-in-the-expandable-table-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-t-d5080-ped-in-the-expandable-table-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 73
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "fe31ae87325961aac612-274c346af4b1f907ee13",
          "file": "tests/ui/vendor-purpose-lifecycle.spec.ts",
          "line": 71,
          "column": 5
        },
        {
          "title": "signed group amounts use positive shares and stable IDs without negative ribbons",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 370,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 176,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:96:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 96
                    },
                    "snippet": "\u001b[0m \u001b[90m 94 |\u001b[39m     } } } })\u001b[33m;\u001b[39m\n \u001b[90m 95 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 96 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 97 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 98 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#overview dt'\u001b[39m))\u001b[33m.\u001b[39mtoContainText([\u001b[32m'Name'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Normalized name'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Location'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Top purposes'\u001b[39m])\u001b[33m;\u001b[39m\n \u001b[90m 99 |\u001b[39m   \u001b[36mconst\u001b[39m chart \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart'\u001b[39m)\u001b[33m.\u001b[39mevaluate(el \u001b[33m=>\u001b[39m window\u001b[33m.\u001b[39melectinfoMoneyFlow\u001b[33m!\u001b[39m\u001b[33m.\u001b[39minspect\u001b[33m!\u001b[39m(el\u001b[33m.\u001b[39mparentElement\u001b[33m!\u001b[39m)\u001b[33m!\u001b[39m\u001b[33m.\u001b[39moption \u001b[36mas\u001b[39m any)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 96
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  94 |     } } } });\n  95 |   });\n> 96 |   await page.goto('/vendors/purpose-lifecycle/');\n     |              ^\n  97 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  98 |   await expect(page.locator('#overview dt')).toContainText(['Name', 'Normalized name', 'Location', 'Top purposes']);\n  99 |   const chart = await page.locator('#purposes .money-flow-chart').evaluate(el => window.electinfoMoneyFlow!.inspect!(el.parentElement!)!.option as any);\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:96:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:02.796Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-s-4147f-Ds-without-negative-ribbons-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-s-4147f-Ds-without-negative-ribbons-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 96
                  }
                },
                {
                  "workerIndex": 380,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 268,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:96:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 96
                    },
                    "snippet": "\u001b[0m \u001b[90m 94 |\u001b[39m     } } } })\u001b[33m;\u001b[39m\n \u001b[90m 95 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 96 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 97 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 98 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#overview dt'\u001b[39m))\u001b[33m.\u001b[39mtoContainText([\u001b[32m'Name'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Normalized name'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Location'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Top purposes'\u001b[39m])\u001b[33m;\u001b[39m\n \u001b[90m 99 |\u001b[39m   \u001b[36mconst\u001b[39m chart \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart'\u001b[39m)\u001b[33m.\u001b[39mevaluate(el \u001b[33m=>\u001b[39m window\u001b[33m.\u001b[39melectinfoMoneyFlow\u001b[33m!\u001b[39m\u001b[33m.\u001b[39minspect\u001b[33m!\u001b[39m(el\u001b[33m.\u001b[39mparentElement\u001b[33m!\u001b[39m)\u001b[33m!\u001b[39m\u001b[33m.\u001b[39moption \u001b[36mas\u001b[39m any)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 96
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  94 |     } } } });\n  95 |   });\n> 96 |   await page.goto('/vendors/purpose-lifecycle/');\n     |              ^\n  97 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  98 |   await expect(page.locator('#overview dt')).toContainText(['Name', 'Normalized name', 'Location', 'Top purposes']);\n  99 |   const chart = await page.locator('#purposes .money-flow-chart').evaluate(el => window.electinfoMoneyFlow!.inspect!(el.parentElement!)!.option as any);\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:96:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:03.705Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-s-4147f-Ds-without-negative-ribbons-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-s-4147f-Ds-without-negative-ribbons-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-s-4147f-Ds-without-negative-ribbons-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-s-4147f-Ds-without-negative-ribbons-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 96
                  }
                },
                {
                  "workerIndex": 390,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 151,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:96:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 96
                    },
                    "snippet": "\u001b[0m \u001b[90m 94 |\u001b[39m     } } } })\u001b[33m;\u001b[39m\n \u001b[90m 95 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 96 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 97 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 98 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#overview dt'\u001b[39m))\u001b[33m.\u001b[39mtoContainText([\u001b[32m'Name'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Normalized name'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Location'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Top purposes'\u001b[39m])\u001b[33m;\u001b[39m\n \u001b[90m 99 |\u001b[39m   \u001b[36mconst\u001b[39m chart \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart'\u001b[39m)\u001b[33m.\u001b[39mevaluate(el \u001b[33m=>\u001b[39m window\u001b[33m.\u001b[39melectinfoMoneyFlow\u001b[33m!\u001b[39m\u001b[33m.\u001b[39minspect\u001b[33m!\u001b[39m(el\u001b[33m.\u001b[39mparentElement\u001b[33m!\u001b[39m)\u001b[33m!\u001b[39m\u001b[33m.\u001b[39moption \u001b[36mas\u001b[39m any)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 96
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  94 |     } } } });\n  95 |   });\n> 96 |   await page.goto('/vendors/purpose-lifecycle/');\n     |              ^\n  97 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  98 |   await expect(page.locator('#overview dt')).toContainText(['Name', 'Normalized name', 'Location', 'Top purposes']);\n  99 |   const chart = await page.locator('#purposes .money-flow-chart').evaluate(el => window.electinfoMoneyFlow!.inspect!(el.parentElement!)!.option as any);\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:96:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:04.712Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-s-4147f-Ds-without-negative-ribbons-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-s-4147f-Ds-without-negative-ribbons-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 96
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "fe31ae87325961aac612-0682bfcec137b189cf58",
          "file": "tests/ui/vendor-purpose-lifecycle.spec.ts",
          "line": 81,
          "column": 5
        },
        {
          "title": "refund-only groups keep the signed table without a misleading share or empty Sankey",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 400,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 156,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:118:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 118
                    },
                    "snippet": "\u001b[0m \u001b[90m 116 |\u001b[39m     \u001b[36mawait\u001b[39m respond(route\u001b[33m,\u001b[39m data)\u001b[33m;\u001b[39m\n \u001b[90m 117 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 118 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 119 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 120 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody td'\u001b[39m)\u001b[33m.\u001b[39mnth(\u001b[35m1\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'-$20.00'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 121 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody td'\u001b[39m)\u001b[33m.\u001b[39mnth(\u001b[35m2\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'—'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 118
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  116 |     await respond(route, data);\n  117 |   });\n> 118 |   await page.goto('/vendors/purpose-lifecycle/');\n      |              ^\n  119 |   await expect(page.locator('#purposes tbody tr')).toHaveCount(1);\n  120 |   await expect(page.locator('#purposes tbody td').nth(1)).toHaveText('-$20.00');\n  121 |   await expect(page.locator('#purposes tbody td').nth(2)).toHaveText('—');\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:118:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:04:05.575Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-r-6695c-ading-share-or-empty-Sankey-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-r-6695c-ading-share-or-empty-Sankey-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 118
                  }
                },
                {
                  "workerIndex": 410,
                  "parallelIndex": 0,
                  "status": "failed",
                  "duration": 223,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:118:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                      "column": 14,
                      "line": 118
                    },
                    "snippet": "\u001b[0m \u001b[90m 116 |\u001b[39m     \u001b[36mawait\u001b[39m respond(route\u001b[33m,\u001b[39m data)\u001b[33m;\u001b[39m\n \u001b[90m 117 |\u001b[39m   })\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 118 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/vendors/purpose-lifecycle/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 119 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m1\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 120 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody td'\u001b[39m)\u001b[33m.\u001b[39mnth(\u001b[35m1\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'-$20.00'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 121 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody td'\u001b[39m)\u001b[33m.\u001b[39mnth(\u001b[35m2\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'—'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 118
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  116 |     await respond(route, data);\n  117 |   });\n> 118 |   await page.goto('/vendors/purpose-lifecycle/');\n      |              ^\n  119 |   await expect(page.locator('#purposes tbody tr')).toHaveCount(1);\n  120 |   await expect(page.locator('#purposes tbody td').nth(1)).toHaveText('-$20.00');\n  121 |   await expect(page.locator('#purposes tbody td').nth(2)).toHaveText('—');\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:118:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:04:06.403Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-r-6695c-ading-share-or-empty-Sankey-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-r-6695c-ading-share-or-empty-Sankey-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-r-6695c-ading-share-or-empty-Sankey-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-r-6695c-ading-share-or-empty-Sankey-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                    "column": 14,
                    "line": 118
                  }
                },
                {
                  "workerIndex": 424,
                  "parallelIndex": 0,
                  "status": "timedOut",
                  "duration": 36991,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    },
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purpose-lifecycle.spec.ts",
                        "column": 14,
                        "line": 118
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/purpose-lifecycle/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/purpose-lifecycle/\", waiting until \"load\"\u001b[22m\n\n\n  116 |     await respond(route, data);\n  117 |   });\n> 118 |   await page.goto('/vendors/purpose-lifecycle/');\n      |              ^\n  119 |   await expect(page.locator('#purposes tbody tr')).toHaveCount(1);\n  120 |   await expect(page.locator('#purposes tbody td').nth(1)).toHaveText('-$20.00');\n  121 |   await expect(page.locator('#purposes tbody td').nth(2)).toHaveText('—');\n    at /app/tests/ui/vendor-purpose-lifecycle.spec.ts:118:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:07.329Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purpose-lifecycle-r-6695c-ading-share-or-empty-Sankey-ui-retry2/error-context.md"
                    }
                  ]
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "fe31ae87325961aac612-ef072c682574434209c9",
          "file": "tests/ui/vendor-purpose-lifecycle.spec.ts",
          "line": 110,
          "column": 5
        }
      ]
    },
    {
      "title": "tests/ui/vendor-purposes.spec.ts",
      "file": "tests/ui/vendor-purposes.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "three-column Sankey fills the card and contains both link stages after mount and resize",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 1118,
                  "parallelIndex": 1,
                  "status": "failed",
                  "duration": 146,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:431:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purposes.spec.ts",
                      "column": 14,
                      "line": 431
                    },
                    "snippet": "\u001b[0m \u001b[90m 429 |\u001b[39m test(\u001b[32m'three-column Sankey fills the card and contains both link stages after mount and resize'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 430 |\u001b[39m   \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 431 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 432 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 433 |\u001b[39m   \u001b[36mconst\u001b[39m inspect \u001b[33m=\u001b[39m () \u001b[33m=>\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart'\u001b[39m)\u001b[33m.\u001b[39mevaluate(el \u001b[33m=>\u001b[39m {\n \u001b[90m 434 |\u001b[39m     \u001b[36mconst\u001b[39m diagnostics \u001b[33m=\u001b[39m window\u001b[33m.\u001b[39melectinfoMoneyFlow\u001b[33m!\u001b[39m\u001b[33m.\u001b[39minspect\u001b[33m!\u001b[39m(el\u001b[33m.\u001b[39mparentElement\u001b[33m!\u001b[39m)\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 14,
                        "line": 431
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  429 | test('three-column Sankey fills the card and contains both link stages after mount and resize', async ({ page }) => {\n  430 |   await installMocks(page);\n> 431 |   await page.goto(`/vendors/${VENDOR_ID}/`);\n      |              ^\n  432 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  433 |   const inspect = () => page.locator('#purposes .money-flow-chart').evaluate(el => {\n  434 |     const diagnostics = window.electinfoMoneyFlow!.inspect!(el.parentElement!)!;\n    at /app/tests/ui/vendor-purposes.spec.ts:431:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:05:25.414Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-three-colu-97f70-ages-after-mount-and-resize-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-three-colu-97f70-ages-after-mount-and-resize-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purposes.spec.ts",
                    "column": 14,
                    "line": 431
                  }
                },
                {
                  "workerIndex": 1120,
                  "parallelIndex": 1,
                  "status": "failed",
                  "duration": 232,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:431:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purposes.spec.ts",
                      "column": 14,
                      "line": 431
                    },
                    "snippet": "\u001b[0m \u001b[90m 429 |\u001b[39m test(\u001b[32m'three-column Sankey fills the card and contains both link stages after mount and resize'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 430 |\u001b[39m   \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 431 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 432 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 433 |\u001b[39m   \u001b[36mconst\u001b[39m inspect \u001b[33m=\u001b[39m () \u001b[33m=>\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart'\u001b[39m)\u001b[33m.\u001b[39mevaluate(el \u001b[33m=>\u001b[39m {\n \u001b[90m 434 |\u001b[39m     \u001b[36mconst\u001b[39m diagnostics \u001b[33m=\u001b[39m window\u001b[33m.\u001b[39melectinfoMoneyFlow\u001b[33m!\u001b[39m\u001b[33m.\u001b[39minspect\u001b[33m!\u001b[39m(el\u001b[33m.\u001b[39mparentElement\u001b[33m!\u001b[39m)\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 14,
                        "line": 431
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  429 | test('three-column Sankey fills the card and contains both link stages after mount and resize', async ({ page }) => {\n  430 |   await installMocks(page);\n> 431 |   await page.goto(`/vendors/${VENDOR_ID}/`);\n      |              ^\n  432 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  433 |   const inspect = () => page.locator('#purposes .money-flow-chart').evaluate(el => {\n  434 |     const diagnostics = window.electinfoMoneyFlow!.inspect!(el.parentElement!)!;\n    at /app/tests/ui/vendor-purposes.spec.ts:431:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:05:26.143Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-three-colu-97f70-ages-after-mount-and-resize-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-three-colu-97f70-ages-after-mount-and-resize-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-three-colu-97f70-ages-after-mount-and-resize-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-three-colu-97f70-ages-after-mount-and-resize-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purposes.spec.ts",
                    "column": 14,
                    "line": 431
                  }
                },
                {
                  "workerIndex": 1122,
                  "parallelIndex": 1,
                  "status": "failed",
                  "duration": 143,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:431:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purposes.spec.ts",
                      "column": 14,
                      "line": 431
                    },
                    "snippet": "\u001b[0m \u001b[90m 429 |\u001b[39m test(\u001b[32m'three-column Sankey fills the card and contains both link stages after mount and resize'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ page }) \u001b[33m=>\u001b[39m {\n \u001b[90m 430 |\u001b[39m   \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 431 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 432 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 433 |\u001b[39m   \u001b[36mconst\u001b[39m inspect \u001b[33m=\u001b[39m () \u001b[33m=>\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart'\u001b[39m)\u001b[33m.\u001b[39mevaluate(el \u001b[33m=>\u001b[39m {\n \u001b[90m 434 |\u001b[39m     \u001b[36mconst\u001b[39m diagnostics \u001b[33m=\u001b[39m window\u001b[33m.\u001b[39melectinfoMoneyFlow\u001b[33m!\u001b[39m\u001b[33m.\u001b[39minspect\u001b[33m!\u001b[39m(el\u001b[33m.\u001b[39mparentElement\u001b[33m!\u001b[39m)\u001b[33m!\u001b[39m\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 14,
                        "line": 431
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  429 | test('three-column Sankey fills the card and contains both link stages after mount and resize', async ({ page }) => {\n  430 |   await installMocks(page);\n> 431 |   await page.goto(`/vendors/${VENDOR_ID}/`);\n      |              ^\n  432 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  433 |   const inspect = () => page.locator('#purposes .money-flow-chart').evaluate(el => {\n  434 |     const diagnostics = window.electinfoMoneyFlow!.inspect!(el.parentElement!)!;\n    at /app/tests/ui/vendor-purposes.spec.ts:431:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:05:27.010Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-three-colu-97f70-ages-after-mount-and-resize-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-three-colu-97f70-ages-after-mount-and-resize-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purposes.spec.ts",
                    "column": 14,
                    "line": 431
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "77632b1a04bb4d3528ee-446a5f1868754a5eda1b",
          "file": "tests/ui/vendor-purposes.spec.ts",
          "line": 429,
          "column": 5
        },
        {
          "title": "mobile table scrolls all numeric columns and expands raw purposes at full width",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 1124,
                  "parallelIndex": 1,
                  "status": "failed",
                  "duration": 143,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:464:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purposes.spec.ts",
                      "column": 14,
                      "line": 464
                    },
                    "snippet": "\u001b[0m \u001b[90m 462 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39msetViewportSize({ width\u001b[33m:\u001b[39m \u001b[35m390\u001b[39m\u001b[33m,\u001b[39m height\u001b[33m:\u001b[39m \u001b[35m844\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 463 |\u001b[39m   \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 464 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 465 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 466 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes [data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 467 |\u001b[39m   \u001b[36mconst\u001b[39m region \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'region'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Purpose breakdown table'\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 14,
                        "line": 464
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  462 |   await page.setViewportSize({ width: 390, height: 844 });\n  463 |   await installMocks(page);\n> 464 |   await page.goto(`/vendors/${VENDOR_ID}/`);\n      |              ^\n  465 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  466 |   await page.locator('#purposes [data-view=\"table\"]').click();\n  467 |   const region = page.getByRole('region', { name: 'Purpose breakdown table' });\n    at /app/tests/ui/vendor-purposes.spec.ts:464:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:05:27.743Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-mobile-tab-69ed3--raw-purposes-at-full-width-ui/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-mobile-tab-69ed3--raw-purposes-at-full-width-ui/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purposes.spec.ts",
                    "column": 14,
                    "line": 464
                  }
                },
                {
                  "workerIndex": 1126,
                  "parallelIndex": 1,
                  "status": "failed",
                  "duration": 210,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:464:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purposes.spec.ts",
                      "column": 14,
                      "line": 464
                    },
                    "snippet": "\u001b[0m \u001b[90m 462 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39msetViewportSize({ width\u001b[33m:\u001b[39m \u001b[35m390\u001b[39m\u001b[33m,\u001b[39m height\u001b[33m:\u001b[39m \u001b[35m844\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 463 |\u001b[39m   \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 464 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 465 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 466 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes [data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 467 |\u001b[39m   \u001b[36mconst\u001b[39m region \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'region'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Purpose breakdown table'\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 14,
                        "line": 464
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  462 |   await page.setViewportSize({ width: 390, height: 844 });\n  463 |   await installMocks(page);\n> 464 |   await page.goto(`/vendors/${VENDOR_ID}/`);\n      |              ^\n  465 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  466 |   await page.locator('#purposes [data-view=\"table\"]').click();\n  467 |   const region = page.getByRole('region', { name: 'Purpose breakdown table' });\n    at /app/tests/ui/vendor-purposes.spec.ts:464:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:05:28.533Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-mobile-tab-69ed3--raw-purposes-at-full-width-ui-retry1/test-failed-1.png"
                    },
                    {
                      "name": "video",
                      "contentType": "video/webm",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-mobile-tab-69ed3--raw-purposes-at-full-width-ui-retry1/video.webm"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-mobile-tab-69ed3--raw-purposes-at-full-width-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-mobile-tab-69ed3--raw-purposes-at-full-width-ui-retry1/trace.zip"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purposes.spec.ts",
                    "column": 14,
                    "line": 464
                  }
                },
                {
                  "workerIndex": 1128,
                  "parallelIndex": 1,
                  "status": "failed",
                  "duration": 111,
                  "error": {
                    "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                    "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:464:14",
                    "location": {
                      "file": "/app/tests/ui/vendor-purposes.spec.ts",
                      "column": 14,
                      "line": 464
                    },
                    "snippet": "\u001b[0m \u001b[90m 462 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39msetViewportSize({ width\u001b[33m:\u001b[39m \u001b[35m390\u001b[39m\u001b[33m,\u001b[39m height\u001b[33m:\u001b[39m \u001b[35m844\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 463 |\u001b[39m   \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 464 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m              \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 465 |\u001b[39m   \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 466 |\u001b[39m   \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes [data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 467 |\u001b[39m   \u001b[36mconst\u001b[39m region \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'region'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Purpose breakdown table'\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 14,
                        "line": 464
                      },
                      "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  462 |   await page.setViewportSize({ width: 390, height: 844 });\n  463 |   await installMocks(page);\n> 464 |   await page.goto(`/vendors/${VENDOR_ID}/`);\n      |              ^\n  465 |   await expect(page.locator('#purposes canvas')).toBeVisible();\n  466 |   await page.locator('#purposes [data-view=\"table\"]').click();\n  467 |   const region = page.getByRole('region', { name: 'Purpose breakdown table' });\n    at /app/tests/ui/vendor-purposes.spec.ts:464:14"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:05:29.359Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "screenshot",
                      "contentType": "image/png",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-mobile-tab-69ed3--raw-purposes-at-full-width-ui-retry2/test-failed-1.png"
                    },
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-mobile-tab-69ed3--raw-purposes-at-full-width-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/vendor-purposes.spec.ts",
                    "column": 14,
                    "line": 464
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "77632b1a04bb4d3528ee-aa725f965345886a8917",
          "file": "tests/ui/vendor-purposes.spec.ts",
          "line": 461,
          "column": 5
        }
      ],
      "suites": [
        {
          "title": "vendor purpose card — section and query",
          "file": "tests/ui/vendor-purposes.spec.ts",
          "line": 88,
          "column": 6,
          "specs": [
            {
              "title": "#purposes section is rendered on a vendor detail page",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 262,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 188,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:94:33",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 33,
                          "line": 94
                        },
                        "snippet": "\u001b[0m \u001b[90m 92 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 93 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 94 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 95 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 96 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[33mVENDOR_NAME\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 97 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 33,
                            "line": 94
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  92 |     await installMocks(page);\n  93 |\n> 94 |     const response = await page.goto(`/vendors/${VENDOR_ID}/`);\n     |                                 ^\n  95 |     expect(response?.status()).toBe(200);\n  96 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText(VENDOR_NAME, { timeout: DATA_LOAD_TIMEOUT });\n  97 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/vendor-purposes.spec.ts:94:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:06.246Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-11765-red-on-a-vendor-detail-page-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-11765-red-on-a-vendor-detail-page-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 33,
                        "line": 94
                      }
                    },
                    {
                      "workerIndex": 279,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 254,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:94:33",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 33,
                          "line": 94
                        },
                        "snippet": "\u001b[0m \u001b[90m 92 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 93 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 94 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 95 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 96 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[33mVENDOR_NAME\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 97 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 33,
                            "line": 94
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  92 |     await installMocks(page);\n  93 |\n> 94 |     const response = await page.goto(`/vendors/${VENDOR_ID}/`);\n     |                                 ^\n  95 |     expect(response?.status()).toBe(200);\n  96 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText(VENDOR_NAME, { timeout: DATA_LOAD_TIMEOUT });\n  97 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/vendor-purposes.spec.ts:94:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:07.219Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-11765-red-on-a-vendor-detail-page-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-11765-red-on-a-vendor-detail-page-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-11765-red-on-a-vendor-detail-page-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-11765-red-on-a-vendor-detail-page-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 33,
                        "line": 94
                      }
                    },
                    {
                      "workerIndex": 298,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 170,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:94:33",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 33,
                          "line": 94
                        },
                        "snippet": "\u001b[0m \u001b[90m 92 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 93 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 94 |\u001b[39m     \u001b[36mconst\u001b[39m response \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 95 |\u001b[39m     expect(response\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m200\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 96 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'.leaf-detail-page h1'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[33mVENDOR_NAME\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 97 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 33,
                            "line": 94
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  92 |     await installMocks(page);\n  93 |\n> 94 |     const response = await page.goto(`/vendors/${VENDOR_ID}/`);\n     |                                 ^\n  95 |     expect(response?.status()).toBe(200);\n  96 |     await expect(page.locator('.leaf-detail-page h1')).toHaveText(VENDOR_NAME, { timeout: DATA_LOAD_TIMEOUT });\n  97 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n    at /app/tests/ui/vendor-purposes.spec.ts:94:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:03:08.258Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-11765-red-on-a-vendor-detail-page-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-11765-red-on-a-vendor-detail-page-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 33,
                        "line": 94
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-e051af057221aef61daf",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 89,
              "column": 7
            },
            {
              "title": "VendorPurposeFlow query is issued with id and null cycle on initial load",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 311,
                      "parallelIndex": 17,
                      "status": "timedOut",
                      "duration": 40061,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 104
                          },
                          "message": "Error: page.goto: net::ERR_ABORTED; maybe frame was detached?\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  102 |     const graphqlBodies = await installMocks(page);\n  103 |\n> 104 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  105 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  106 |\n  107 |     const purposeBody = graphqlBodies.find(b => b.includes('VendorPurposeFlow'));\n    at /app/tests/ui/vendor-purposes.spec.ts:104:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:09.185Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-4bd93--null-cycle-on-initial-load-ui/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 356,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 11405,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:104:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 104
                        },
                        "snippet": "\u001b[0m \u001b[90m 102 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 103 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 104 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 105 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 106 |\u001b[39m\n \u001b[90m 107 |\u001b[39m     \u001b[36mconst\u001b[39m purposeBody \u001b[33m=\u001b[39m graphqlBodies\u001b[33m.\u001b[39mfind(b \u001b[33m=>\u001b[39m b\u001b[33m.\u001b[39mincludes(\u001b[32m'VendorPurposeFlow'\u001b[39m))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 104
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  102 |     const graphqlBodies = await installMocks(page);\n  103 |\n> 104 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  105 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  106 |\n  107 |     const purposeBody = graphqlBodies.find(b => b.includes('VendorPurposeFlow'));\n    at /app/tests/ui/vendor-purposes.spec.ts:104:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:03:49.918Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-4bd93--null-cycle-on-initial-load-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-4bd93--null-cycle-on-initial-load-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-4bd93--null-cycle-on-initial-load-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-4bd93--null-cycle-on-initial-load-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 104
                      }
                    },
                    {
                      "workerIndex": 364,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 161,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:104:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 104
                        },
                        "snippet": "\u001b[0m \u001b[90m 102 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 103 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 104 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 105 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 106 |\u001b[39m\n \u001b[90m 107 |\u001b[39m     \u001b[36mconst\u001b[39m purposeBody \u001b[33m=\u001b[39m graphqlBodies\u001b[33m.\u001b[39mfind(b \u001b[33m=>\u001b[39m b\u001b[33m.\u001b[39mincludes(\u001b[32m'VendorPurposeFlow'\u001b[39m))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 104
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  102 |     const graphqlBodies = await installMocks(page);\n  103 |\n> 104 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  105 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  106 |\n  107 |     const purposeBody = graphqlBodies.find(b => b.includes('VendorPurposeFlow'));\n    at /app/tests/ui/vendor-purposes.spec.ts:104:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:02.114Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-4bd93--null-cycle-on-initial-load-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-4bd93--null-cycle-on-initial-load-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 104
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-ad4fc7ef3fa5b3608ee2",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 101,
              "column": 7
            },
            {
              "title": "query operation name is VendorPurposeFlow",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 373,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 163,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:118:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 118
                        },
                        "snippet": "\u001b[0m \u001b[90m 116 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 117 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 118 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 119 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 120 |\u001b[39m\n \u001b[90m 121 |\u001b[39m     \u001b[36mconst\u001b[39m purposeBody \u001b[33m=\u001b[39m graphqlBodies\u001b[33m.\u001b[39mfind(b \u001b[33m=>\u001b[39m b\u001b[33m.\u001b[39mincludes(\u001b[32m'VendorPurposeFlow'\u001b[39m))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 118
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  116 |     const graphqlBodies = await installMocks(page);\n  117 |\n> 118 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  119 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  120 |\n  121 |     const purposeBody = graphqlBodies.find(b => b.includes('VendorPurposeFlow'));\n    at /app/tests/ui/vendor-purposes.spec.ts:118:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:03.062Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9e3c5-n-name-is-VendorPurposeFlow-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9e3c5-n-name-is-VendorPurposeFlow-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 118
                      }
                    },
                    {
                      "workerIndex": 383,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 272,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:118:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 118
                        },
                        "snippet": "\u001b[0m \u001b[90m 116 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 117 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 118 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 119 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 120 |\u001b[39m\n \u001b[90m 121 |\u001b[39m     \u001b[36mconst\u001b[39m purposeBody \u001b[33m=\u001b[39m graphqlBodies\u001b[33m.\u001b[39mfind(b \u001b[33m=>\u001b[39m b\u001b[33m.\u001b[39mincludes(\u001b[32m'VendorPurposeFlow'\u001b[39m))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 118
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  116 |     const graphqlBodies = await installMocks(page);\n  117 |\n> 118 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  119 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  120 |\n  121 |     const purposeBody = graphqlBodies.find(b => b.includes('VendorPurposeFlow'));\n    at /app/tests/ui/vendor-purposes.spec.ts:118:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:03.951Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9e3c5-n-name-is-VendorPurposeFlow-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9e3c5-n-name-is-VendorPurposeFlow-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9e3c5-n-name-is-VendorPurposeFlow-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9e3c5-n-name-is-VendorPurposeFlow-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 118
                      }
                    },
                    {
                      "workerIndex": 394,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 166,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:118:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 118
                        },
                        "snippet": "\u001b[0m \u001b[90m 116 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 117 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 118 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 119 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 120 |\u001b[39m\n \u001b[90m 121 |\u001b[39m     \u001b[36mconst\u001b[39m purposeBody \u001b[33m=\u001b[39m graphqlBodies\u001b[33m.\u001b[39mfind(b \u001b[33m=>\u001b[39m b\u001b[33m.\u001b[39mincludes(\u001b[32m'VendorPurposeFlow'\u001b[39m))\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 118
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  116 |     const graphqlBodies = await installMocks(page);\n  117 |\n> 118 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  119 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  120 |\n  121 |     const purposeBody = graphqlBodies.find(b => b.includes('VendorPurposeFlow'));\n    at /app/tests/ui/vendor-purposes.spec.ts:118:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:04.946Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9e3c5-n-name-is-VendorPurposeFlow-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9e3c5-n-name-is-VendorPurposeFlow-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 118
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-f95588600897b5c7f7b3",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 115,
              "column": 7
            }
          ]
        },
        {
          "title": "vendor purpose card — cycle selector",
          "file": "tests/ui/vendor-purposes.spec.ts",
          "line": 126,
          "column": 6,
          "specs": [
            {
              "title": "cycle selector is present with aria-label \"Purpose cycle\"",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 404,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 180,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:130:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 130
                        },
                        "snippet": "\u001b[0m \u001b[90m 128 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 129 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 130 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 131 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 132 |\u001b[39m\n \u001b[90m 133 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 130
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  128 |     await installMocks(page);\n  129 |\n> 130 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  131 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  132 |\n  133 |     await expect(page.locator('#purposes select[aria-label=\"Purpose cycle\"]')).toBeVisible();\n    at /app/tests/ui/vendor-purposes.spec.ts:130:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:05.820Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7e5d3-h-aria-label-Purpose-cycle--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7e5d3-h-aria-label-Purpose-cycle--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 130
                      }
                    },
                    {
                      "workerIndex": 415,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 260,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:130:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 130
                        },
                        "snippet": "\u001b[0m \u001b[90m 128 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 129 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 130 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 131 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 132 |\u001b[39m\n \u001b[90m 133 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 130
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  128 |     await installMocks(page);\n  129 |\n> 130 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  131 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  132 |\n  133 |     await expect(page.locator('#purposes select[aria-label=\"Purpose cycle\"]')).toBeVisible();\n    at /app/tests/ui/vendor-purposes.spec.ts:130:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:06.674Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7e5d3-h-aria-label-Purpose-cycle--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7e5d3-h-aria-label-Purpose-cycle--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7e5d3-h-aria-label-Purpose-cycle--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7e5d3-h-aria-label-Purpose-cycle--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 130
                      }
                    },
                    {
                      "workerIndex": 426,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 19873,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:130:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 130
                        },
                        "snippet": "\u001b[0m \u001b[90m 128 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 129 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 130 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 131 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 132 |\u001b[39m\n \u001b[90m 133 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 130
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  128 |     await installMocks(page);\n  129 |\n> 130 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  131 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  132 |\n  133 |     await expect(page.locator('#purposes select[aria-label=\"Purpose cycle\"]')).toBeVisible();\n    at /app/tests/ui/vendor-purposes.spec.ts:130:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:07.613Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7e5d3-h-aria-label-Purpose-cycle--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7e5d3-h-aria-label-Purpose-cycle--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 130
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-eaf613e13663e4046779",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 127,
              "column": 7
            },
            {
              "title": "cycle selector has an \"All cycles\" option as the first entry",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 447,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 167,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:139:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 139
                        },
                        "snippet": "\u001b[0m \u001b[90m 137 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 139 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 140 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m\n \u001b[90m 142 |\u001b[39m     \u001b[36mconst\u001b[39m options \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"] option'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 139
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  137 |     await installMocks(page);\n  138 |\n> 139 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  140 |     await expect(page.locator('#purposes select[aria-label=\"Purpose cycle\"]')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  141 |\n  142 |     const options = page.locator('#purposes select[aria-label=\"Purpose cycle\"] option');\n    at /app/tests/ui/vendor-purposes.spec.ts:139:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:28.105Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-361e5-s-option-as-the-first-entry-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-361e5-s-option-as-the-first-entry-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 139
                      }
                    },
                    {
                      "workerIndex": 454,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 235,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:139:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 139
                        },
                        "snippet": "\u001b[0m \u001b[90m 137 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 139 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 140 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m\n \u001b[90m 142 |\u001b[39m     \u001b[36mconst\u001b[39m options \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"] option'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 139
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  137 |     await installMocks(page);\n  138 |\n> 139 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  140 |     await expect(page.locator('#purposes select[aria-label=\"Purpose cycle\"]')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  141 |\n  142 |     const options = page.locator('#purposes select[aria-label=\"Purpose cycle\"] option');\n    at /app/tests/ui/vendor-purposes.spec.ts:139:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:28.993Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-361e5-s-option-as-the-first-entry-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-361e5-s-option-as-the-first-entry-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-361e5-s-option-as-the-first-entry-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-361e5-s-option-as-the-first-entry-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 139
                      }
                    },
                    {
                      "workerIndex": 464,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 159,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:139:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 139
                        },
                        "snippet": "\u001b[0m \u001b[90m 137 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 138 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 139 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 140 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 141 |\u001b[39m\n \u001b[90m 142 |\u001b[39m     \u001b[36mconst\u001b[39m options \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"] option'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 139
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  137 |     await installMocks(page);\n  138 |\n> 139 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  140 |     await expect(page.locator('#purposes select[aria-label=\"Purpose cycle\"]')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  141 |\n  142 |     const options = page.locator('#purposes select[aria-label=\"Purpose cycle\"] option');\n    at /app/tests/ui/vendor-purposes.spec.ts:139:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:29.892Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-361e5-s-option-as-the-first-entry-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-361e5-s-option-as-the-first-entry-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 139
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-7d6b1fc2644e17d7a6be",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 136,
              "column": 7
            },
            {
              "title": "cycle options are populated from the vendor cycles field",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 474,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 164,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:150:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 150
                        },
                        "snippet": "\u001b[0m \u001b[90m 148 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 149 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 150 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 151 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 152 |\u001b[39m\n \u001b[90m 153 |\u001b[39m     \u001b[90m// VENDOR_ROW.cycles = '2020,2022,2024,2026'\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 150
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  148 |     await installMocks(page);\n  149 |\n> 150 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  151 |     await expect(page.locator('#purposes select[aria-label=\"Purpose cycle\"]')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  152 |\n  153 |     // VENDOR_ROW.cycles = '2020,2022,2024,2026'\n    at /app/tests/ui/vendor-purposes.spec.ts:150:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:30.746Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-8a1fb-rom-the-vendor-cycles-field-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-8a1fb-rom-the-vendor-cycles-field-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 150
                      }
                    },
                    {
                      "workerIndex": 485,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 264,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:150:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 150
                        },
                        "snippet": "\u001b[0m \u001b[90m 148 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 149 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 150 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 151 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 152 |\u001b[39m\n \u001b[90m 153 |\u001b[39m     \u001b[90m// VENDOR_ROW.cycles = '2020,2022,2024,2026'\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 150
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  148 |     await installMocks(page);\n  149 |\n> 150 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  151 |     await expect(page.locator('#purposes select[aria-label=\"Purpose cycle\"]')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  152 |\n  153 |     // VENDOR_ROW.cycles = '2020,2022,2024,2026'\n    at /app/tests/ui/vendor-purposes.spec.ts:150:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:31.681Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-8a1fb-rom-the-vendor-cycles-field-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-8a1fb-rom-the-vendor-cycles-field-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-8a1fb-rom-the-vendor-cycles-field-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-8a1fb-rom-the-vendor-cycles-field-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 150
                      }
                    },
                    {
                      "workerIndex": 514,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 211,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:150:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 150
                        },
                        "snippet": "\u001b[0m \u001b[90m 148 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 149 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 150 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 151 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 152 |\u001b[39m\n \u001b[90m 153 |\u001b[39m     \u001b[90m// VENDOR_ROW.cycles = '2020,2022,2024,2026'\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 150
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  148 |     await installMocks(page);\n  149 |\n> 150 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  151 |     await expect(page.locator('#purposes select[aria-label=\"Purpose cycle\"]')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  152 |\n  153 |     // VENDOR_ROW.cycles = '2020,2022,2024,2026'\n    at /app/tests/ui/vendor-purposes.spec.ts:150:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:32.792Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-8a1fb-rom-the-vendor-cycles-field-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-8a1fb-rom-the-vendor-cycles-field-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 150
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-28b4f3dcccf27ac21ab6",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 147,
              "column": 7
            },
            {
              "title": "selecting a cycle issues a new VendorPurposeFlow query with that cycle",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 534,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 192,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:162:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 162
                        },
                        "snippet": "\u001b[0m \u001b[90m 160 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 161 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 162 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 163 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 164 |\u001b[39m\n \u001b[90m 165 |\u001b[39m     \u001b[36mconst\u001b[39m select \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 162
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  160 |     const graphqlBodies = await installMocks(page);\n  161 |\n> 162 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  163 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  164 |\n  165 |     const select = page.locator('#purposes select[aria-label=\"Purpose cycle\"]');\n    at /app/tests/ui/vendor-purposes.spec.ts:162:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:33.791Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-876f1-eFlow-query-with-that-cycle-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-876f1-eFlow-query-with-that-cycle-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 162
                      }
                    },
                    {
                      "workerIndex": 560,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 283,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:162:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 162
                        },
                        "snippet": "\u001b[0m \u001b[90m 160 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 161 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 162 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 163 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 164 |\u001b[39m\n \u001b[90m 165 |\u001b[39m     \u001b[36mconst\u001b[39m select \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 162
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  160 |     const graphqlBodies = await installMocks(page);\n  161 |\n> 162 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  163 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  164 |\n  165 |     const select = page.locator('#purposes select[aria-label=\"Purpose cycle\"]');\n    at /app/tests/ui/vendor-purposes.spec.ts:162:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:34.774Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-876f1-eFlow-query-with-that-cycle-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-876f1-eFlow-query-with-that-cycle-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-876f1-eFlow-query-with-that-cycle-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-876f1-eFlow-query-with-that-cycle-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 162
                      }
                    },
                    {
                      "workerIndex": 584,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 208,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:162:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 162
                        },
                        "snippet": "\u001b[0m \u001b[90m 160 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 161 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 162 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 163 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 164 |\u001b[39m\n \u001b[90m 165 |\u001b[39m     \u001b[36mconst\u001b[39m select \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 162
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  160 |     const graphqlBodies = await installMocks(page);\n  161 |\n> 162 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  163 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  164 |\n  165 |     const select = page.locator('#purposes select[aria-label=\"Purpose cycle\"]');\n    at /app/tests/ui/vendor-purposes.spec.ts:162:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:35.834Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-876f1-eFlow-query-with-that-cycle-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-876f1-eFlow-query-with-that-cycle-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 162
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-f9b4e907cf9ab0f5d176",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 159,
              "column": 7
            },
            {
              "title": "switching back to All cycles sends cycle: null",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 606,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 193,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:182:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 182
                        },
                        "snippet": "\u001b[0m \u001b[90m 180 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 181 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 182 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 183 |\u001b[39m     \u001b[36mconst\u001b[39m select \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 184 |\u001b[39m     \u001b[36mawait\u001b[39m expect(select)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 185 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 182
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  180 |     const graphqlBodies = await installMocks(page);\n  181 |\n> 182 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  183 |     const select = page.locator('#purposes select[aria-label=\"Purpose cycle\"]');\n  184 |     await expect(select).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  185 |\n    at /app/tests/ui/vendor-purposes.spec.ts:182:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:36.887Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-aecf0-All-cycles-sends-cycle-null-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-aecf0-All-cycles-sends-cycle-null-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 182
                      }
                    },
                    {
                      "workerIndex": 630,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 276,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:182:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 182
                        },
                        "snippet": "\u001b[0m \u001b[90m 180 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 181 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 182 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 183 |\u001b[39m     \u001b[36mconst\u001b[39m select \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 184 |\u001b[39m     \u001b[36mawait\u001b[39m expect(select)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 185 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 182
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  180 |     const graphqlBodies = await installMocks(page);\n  181 |\n> 182 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  183 |     const select = page.locator('#purposes select[aria-label=\"Purpose cycle\"]');\n  184 |     await expect(select).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  185 |\n    at /app/tests/ui/vendor-purposes.spec.ts:182:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.867Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-aecf0-All-cycles-sends-cycle-null-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-aecf0-All-cycles-sends-cycle-null-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-aecf0-All-cycles-sends-cycle-null-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-aecf0-All-cycles-sends-cycle-null-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 182
                      }
                    },
                    {
                      "workerIndex": 655,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 187,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:182:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 182
                        },
                        "snippet": "\u001b[0m \u001b[90m 180 |\u001b[39m     \u001b[36mconst\u001b[39m graphqlBodies \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 181 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 182 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 183 |\u001b[39m     \u001b[36mconst\u001b[39m select \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 184 |\u001b[39m     \u001b[36mawait\u001b[39m expect(select)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 185 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 182
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  180 |     const graphqlBodies = await installMocks(page);\n  181 |\n> 182 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  183 |     const select = page.locator('#purposes select[aria-label=\"Purpose cycle\"]');\n  184 |     await expect(select).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  185 |\n    at /app/tests/ui/vendor-purposes.spec.ts:182:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.983Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-aecf0-All-cycles-sends-cycle-null-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-aecf0-All-cycles-sends-cycle-null-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 182
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-991420bd044423ba273e",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 179,
              "column": 7
            }
          ]
        },
        {
          "title": "vendor purpose card — filter input",
          "file": "tests/ui/vendor-purposes.spec.ts",
          "line": 197,
          "column": 6,
          "specs": [
            {
              "title": "filter input has aria-label \"Filter purpose groups\"",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 676,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 217,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:204:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 204
                        },
                        "snippet": "\u001b[0m \u001b[90m 202 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 203 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 204 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 205 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 206 |\u001b[39m\n \u001b[90m 207 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 204
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  202 |     await installMocks(page);\n  203 |\n> 204 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  205 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  206 |\n  207 |     await expect(page.locator('#purposes input[aria-label=\"Filter purpose groups\"]')).toBeVisible();\n    at /app/tests/ui/vendor-purposes.spec.ts:204:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:39.984Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-3173c-abel-Filter-purpose-groups--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-3173c-abel-Filter-purpose-groups--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 204
                      }
                    },
                    {
                      "workerIndex": 700,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 328,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:204:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 204
                        },
                        "snippet": "\u001b[0m \u001b[90m 202 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 203 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 204 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 205 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 206 |\u001b[39m\n \u001b[90m 207 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 204
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  202 |     await installMocks(page);\n  203 |\n> 204 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  205 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  206 |\n  207 |     await expect(page.locator('#purposes input[aria-label=\"Filter purpose groups\"]')).toBeVisible();\n    at /app/tests/ui/vendor-purposes.spec.ts:204:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:41.047Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-3173c-abel-Filter-purpose-groups--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-3173c-abel-Filter-purpose-groups--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-3173c-abel-Filter-purpose-groups--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-3173c-abel-Filter-purpose-groups--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 204
                      }
                    },
                    {
                      "workerIndex": 728,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 194,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:204:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 204
                        },
                        "snippet": "\u001b[0m \u001b[90m 202 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 203 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 204 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 205 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 206 |\u001b[39m\n \u001b[90m 207 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 204
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  202 |     await installMocks(page);\n  203 |\n> 204 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  205 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  206 |\n  207 |     await expect(page.locator('#purposes input[aria-label=\"Filter purpose groups\"]')).toBeVisible();\n    at /app/tests/ui/vendor-purposes.spec.ts:204:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.269Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-3173c-abel-Filter-purpose-groups--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-3173c-abel-Filter-purpose-groups--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 204
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-7ee276eeb86ebedd6b54",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 201,
              "column": 7
            },
            {
              "title": "typing in the filter narrows visible rows by group name",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 750,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 183,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:213:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 213
                        },
                        "snippet": "\u001b[0m \u001b[90m 211 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 212 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 213 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 214 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 215 |\u001b[39m\n \u001b[90m 216 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'Media'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 213
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  211 |     await installMocks(page);\n  212 |\n> 213 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  214 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  215 |\n  216 |     await page.locator('#purposes input[aria-label=\"Filter purpose groups\"]').fill('Media');\n    at /app/tests/ui/vendor-purposes.spec.ts:213:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:43.256Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f3055--visible-rows-by-group-name-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f3055--visible-rows-by-group-name-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 213
                      }
                    },
                    {
                      "workerIndex": 770,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 342,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:213:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 213
                        },
                        "snippet": "\u001b[0m \u001b[90m 211 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 212 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 213 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 214 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 215 |\u001b[39m\n \u001b[90m 216 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'Media'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 213
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  211 |     await installMocks(page);\n  212 |\n> 213 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  214 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  215 |\n  216 |     await page.locator('#purposes input[aria-label=\"Filter purpose groups\"]').fill('Media');\n    at /app/tests/ui/vendor-purposes.spec.ts:213:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:44.267Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f3055--visible-rows-by-group-name-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f3055--visible-rows-by-group-name-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f3055--visible-rows-by-group-name-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f3055--visible-rows-by-group-name-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 213
                      }
                    },
                    {
                      "workerIndex": 795,
                      "parallelIndex": 16,
                      "status": "failed",
                      "duration": 177,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:213:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 213
                        },
                        "snippet": "\u001b[0m \u001b[90m 211 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 212 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 213 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 214 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 215 |\u001b[39m\n \u001b[90m 216 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'Media'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 213
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  211 |     await installMocks(page);\n  212 |\n> 213 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  214 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  215 |\n  216 |     await page.locator('#purposes input[aria-label=\"Filter purpose groups\"]').fill('Media');\n    at /app/tests/ui/vendor-purposes.spec.ts:213:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:45.463Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f3055--visible-rows-by-group-name-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f3055--visible-rows-by-group-name-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 213
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-6b70488c25c6b61eeec0",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 210,
              "column": 7
            },
            {
              "title": "filter matches topPurpose text as well as the group name",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 810,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 169,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:224:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 224
                        },
                        "snippet": "\u001b[0m \u001b[90m 222 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 223 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 224 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 225 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 226 |\u001b[39m\n \u001b[90m 227 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'DIGITAL ADS'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 224
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  222 |     await installMocks(page);\n  223 |\n> 224 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  225 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  226 |\n  227 |     await page.locator('#purposes input[aria-label=\"Filter purpose groups\"]').fill('DIGITAL ADS');\n    at /app/tests/ui/vendor-purposes.spec.ts:224:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:46.386Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6779-t-as-well-as-the-group-name-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6779-t-as-well-as-the-group-name-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 224
                      }
                    },
                    {
                      "workerIndex": 829,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 251,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:224:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 224
                        },
                        "snippet": "\u001b[0m \u001b[90m 222 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 223 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 224 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 225 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 226 |\u001b[39m\n \u001b[90m 227 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'DIGITAL ADS'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 224
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  222 |     await installMocks(page);\n  223 |\n> 224 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  225 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  226 |\n  227 |     await page.locator('#purposes input[aria-label=\"Filter purpose groups\"]').fill('DIGITAL ADS');\n    at /app/tests/ui/vendor-purposes.spec.ts:224:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:47.407Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6779-t-as-well-as-the-group-name-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6779-t-as-well-as-the-group-name-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6779-t-as-well-as-the-group-name-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6779-t-as-well-as-the-group-name-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 224
                      }
                    },
                    {
                      "workerIndex": 847,
                      "parallelIndex": 15,
                      "status": "failed",
                      "duration": 170,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:224:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 224
                        },
                        "snippet": "\u001b[0m \u001b[90m 222 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 223 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 224 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 225 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 226 |\u001b[39m\n \u001b[90m 227 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'DIGITAL ADS'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 224
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  222 |     await installMocks(page);\n  223 |\n> 224 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  225 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  226 |\n  227 |     await page.locator('#purposes input[aria-label=\"Filter purpose groups\"]').fill('DIGITAL ADS');\n    at /app/tests/ui/vendor-purposes.spec.ts:224:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:48.387Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6779-t-as-well-as-the-group-name-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6779-t-as-well-as-the-group-name-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 224
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-d44b01d8826479b74bd2",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 221,
              "column": 7
            },
            {
              "title": "no match shows the empty message and zero rows",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 860,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 182,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:235:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 235
                        },
                        "snippet": "\u001b[0m \u001b[90m 233 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 234 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 235 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 236 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 237 |\u001b[39m\n \u001b[90m 238 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'xyzzy'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 235
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  233 |     await installMocks(page);\n  234 |\n> 235 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  236 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  237 |\n  238 |     await page.locator('#purposes input[aria-label=\"Filter purpose groups\"]').fill('xyzzy');\n    at /app/tests/ui/vendor-purposes.spec.ts:235:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:49.314Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-b8c47-empty-message-and-zero-rows-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-b8c47-empty-message-and-zero-rows-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 235
                      }
                    },
                    {
                      "workerIndex": 875,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 242,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:235:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 235
                        },
                        "snippet": "\u001b[0m \u001b[90m 233 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 234 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 235 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 236 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 237 |\u001b[39m\n \u001b[90m 238 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'xyzzy'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 235
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  233 |     await installMocks(page);\n  234 |\n> 235 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  236 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  237 |\n  238 |     await page.locator('#purposes input[aria-label=\"Filter purpose groups\"]').fill('xyzzy');\n    at /app/tests/ui/vendor-purposes.spec.ts:235:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:50.190Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-b8c47-empty-message-and-zero-rows-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-b8c47-empty-message-and-zero-rows-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-b8c47-empty-message-and-zero-rows-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-b8c47-empty-message-and-zero-rows-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 235
                      }
                    },
                    {
                      "workerIndex": 891,
                      "parallelIndex": 10,
                      "status": "failed",
                      "duration": 167,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:235:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 235
                        },
                        "snippet": "\u001b[0m \u001b[90m 233 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 234 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 235 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 236 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 237 |\u001b[39m\n \u001b[90m 238 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes input[aria-label=\"Filter purpose groups\"]'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'xyzzy'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 235
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  233 |     await installMocks(page);\n  234 |\n> 235 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  236 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  237 |\n  238 |     await page.locator('#purposes input[aria-label=\"Filter purpose groups\"]').fill('xyzzy');\n    at /app/tests/ui/vendor-purposes.spec.ts:235:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:51.137Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-b8c47-empty-message-and-zero-rows-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-b8c47-empty-message-and-zero-rows-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 235
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-ab32474acc004d74f6ba",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 232,
              "column": 7
            }
          ]
        },
        {
          "title": "vendor purpose card — sortable headers",
          "file": "tests/ui/vendor-purposes.spec.ts",
          "line": 244,
          "column": 6,
          "specs": [
            {
              "title": "sortable headers Group, Amount, %, Payments, Clients are present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 903,
                      "parallelIndex": 9,
                      "status": "failed",
                      "duration": 156,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:251:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 251
                        },
                        "snippet": "\u001b[0m \u001b[90m 249 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 250 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 251 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 252 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes thead'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 253 |\u001b[39m\n \u001b[90m 254 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m label \u001b[36mof\u001b[39m [\u001b[32m'Group'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Amount'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'%'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Payments'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Clients'\u001b[39m]) {\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 251
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  249 |     await installMocks(page);\n  250 |\n> 251 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  252 |     await expect(page.locator('#purposes thead')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  253 |\n  254 |     for (const label of ['Group', 'Amount', '%', 'Payments', 'Clients']) {\n    at /app/tests/ui/vendor-purposes.spec.ts:251:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:51.993Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6167a-ayments-Clients-are-present-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6167a-ayments-Clients-are-present-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 251
                      }
                    },
                    {
                      "workerIndex": 916,
                      "parallelIndex": 9,
                      "status": "failed",
                      "duration": 239,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:251:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 251
                        },
                        "snippet": "\u001b[0m \u001b[90m 249 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 250 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 251 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 252 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes thead'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 253 |\u001b[39m\n \u001b[90m 254 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m label \u001b[36mof\u001b[39m [\u001b[32m'Group'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Amount'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'%'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Payments'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Clients'\u001b[39m]) {\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 251
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  249 |     await installMocks(page);\n  250 |\n> 251 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  252 |     await expect(page.locator('#purposes thead')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  253 |\n  254 |     for (const label of ['Group', 'Amount', '%', 'Payments', 'Clients']) {\n    at /app/tests/ui/vendor-purposes.spec.ts:251:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:52.834Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6167a-ayments-Clients-are-present-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6167a-ayments-Clients-are-present-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6167a-ayments-Clients-are-present-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6167a-ayments-Clients-are-present-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 251
                      }
                    },
                    {
                      "workerIndex": 930,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 153,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:251:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 251
                        },
                        "snippet": "\u001b[0m \u001b[90m 249 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 250 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 251 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 252 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes thead'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 253 |\u001b[39m\n \u001b[90m 254 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m label \u001b[36mof\u001b[39m [\u001b[32m'Group'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Amount'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'%'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Payments'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'Clients'\u001b[39m]) {\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 251
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  249 |     await installMocks(page);\n  250 |\n> 251 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  252 |     await expect(page.locator('#purposes thead')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  253 |\n  254 |     for (const label of ['Group', 'Amount', '%', 'Payments', 'Clients']) {\n    at /app/tests/ui/vendor-purposes.spec.ts:251:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:53.750Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6167a-ayments-Clients-are-present-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6167a-ayments-Clients-are-present-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 251
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-365b20a02a1208c75e4c",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 248,
              "column": 7
            },
            {
              "title": "default sort is Amount descending — Media Buying first",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 941,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 151,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:265:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 265
                        },
                        "snippet": "\u001b[0m \u001b[90m 263 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 264 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 265 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 266 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 267 |\u001b[39m\n \u001b[90m 268 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Media Buying'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 265
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  263 |     await installMocks(page);\n  264 |\n> 265 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  266 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  267 |\n  268 |     await expect(page.locator('#purposes tbody tr').first()).toContainText('Media Buying');\n    at /app/tests/ui/vendor-purposes.spec.ts:265:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:54.582Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6547-ending-—-Media-Buying-first-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6547-ending-—-Media-Buying-first-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 265
                      }
                    },
                    {
                      "workerIndex": 952,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 264,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:265:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 265
                        },
                        "snippet": "\u001b[0m \u001b[90m 263 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 264 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 265 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 266 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 267 |\u001b[39m\n \u001b[90m 268 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Media Buying'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 265
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  263 |     await installMocks(page);\n  264 |\n> 265 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  266 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  267 |\n  268 |     await expect(page.locator('#purposes tbody tr').first()).toContainText('Media Buying');\n    at /app/tests/ui/vendor-purposes.spec.ts:265:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:55.418Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6547-ending-—-Media-Buying-first-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6547-ending-—-Media-Buying-first-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6547-ending-—-Media-Buying-first-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6547-ending-—-Media-Buying-first-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 265
                      }
                    },
                    {
                      "workerIndex": 963,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 141,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:265:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 265
                        },
                        "snippet": "\u001b[0m \u001b[90m 263 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 264 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 265 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 266 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 267 |\u001b[39m\n \u001b[90m 268 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoContainText(\u001b[32m'Media Buying'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 265
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  263 |     await installMocks(page);\n  264 |\n> 265 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  266 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  267 |\n  268 |     await expect(page.locator('#purposes tbody tr').first()).toContainText('Media Buying');\n    at /app/tests/ui/vendor-purposes.spec.ts:265:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:56.360Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6547-ending-—-Media-Buying-first-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f6547-ending-—-Media-Buying-first-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 265
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-39040b7c2d6ab8ee710b",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 262,
              "column": 7
            },
            {
              "title": "clicking Group sorts alphabetically ascending, then descending",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 971,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 145,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:275:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 275
                        },
                        "snippet": "\u001b[0m \u001b[90m 273 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 274 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 275 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 276 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 277 |\u001b[39m\n \u001b[90m 278 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes thead th[data-sort=\"group\"] button'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 275
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  273 |     await installMocks(page);\n  274 |\n> 275 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  276 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  277 |\n  278 |     await page.locator('#purposes thead th[data-sort=\"group\"] button').click();\n    at /app/tests/ui/vendor-purposes.spec.ts:275:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:57.134Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f26bf-y-ascending-then-descending-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f26bf-y-ascending-then-descending-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 275
                      }
                    },
                    {
                      "workerIndex": 982,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 221,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:275:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 275
                        },
                        "snippet": "\u001b[0m \u001b[90m 273 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 274 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 275 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 276 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 277 |\u001b[39m\n \u001b[90m 278 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes thead th[data-sort=\"group\"] button'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 275
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  273 |     await installMocks(page);\n  274 |\n> 275 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  276 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  277 |\n  278 |     await page.locator('#purposes thead th[data-sort=\"group\"] button').click();\n    at /app/tests/ui/vendor-purposes.spec.ts:275:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:57.971Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f26bf-y-ascending-then-descending-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f26bf-y-ascending-then-descending-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f26bf-y-ascending-then-descending-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f26bf-y-ascending-then-descending-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 275
                      }
                    },
                    {
                      "workerIndex": 989,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 144,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:275:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 275
                        },
                        "snippet": "\u001b[0m \u001b[90m 273 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 274 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 275 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 276 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 277 |\u001b[39m\n \u001b[90m 278 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes thead th[data-sort=\"group\"] button'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 275
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  273 |     await installMocks(page);\n  274 |\n> 275 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  276 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  277 |\n  278 |     await page.locator('#purposes thead th[data-sort=\"group\"] button').click();\n    at /app/tests/ui/vendor-purposes.spec.ts:275:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:58.849Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f26bf-y-ascending-then-descending-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f26bf-y-ascending-then-descending-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 275
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-088449e62c586454d490",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 272,
              "column": 7
            },
            {
              "title": "clicking the active Amount header flips from desc to asc and back",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 995,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 135,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:291:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 291
                        },
                        "snippet": "\u001b[0m \u001b[90m 289 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 290 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 291 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 292 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 293 |\u001b[39m\n \u001b[90m 294 |\u001b[39m     \u001b[90m// amount is active desc; clicking it (same key, desc → asc)\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 291
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  289 |     await installMocks(page);\n  290 |\n> 291 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  292 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  293 |\n  294 |     // amount is active desc; clicking it (same key, desc → asc)\n    at /app/tests/ui/vendor-purposes.spec.ts:291:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:59.589Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-99469-s-from-desc-to-asc-and-back-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-99469-s-from-desc-to-asc-and-back-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 291
                      }
                    },
                    {
                      "workerIndex": 1001,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 217,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:291:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 291
                        },
                        "snippet": "\u001b[0m \u001b[90m 289 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 290 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 291 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 292 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 293 |\u001b[39m\n \u001b[90m 294 |\u001b[39m     \u001b[90m// amount is active desc; clicking it (same key, desc → asc)\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 291
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  289 |     await installMocks(page);\n  290 |\n> 291 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  292 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  293 |\n  294 |     // amount is active desc; clicking it (same key, desc → asc)\n    at /app/tests/ui/vendor-purposes.spec.ts:291:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:00.375Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-99469-s-from-desc-to-asc-and-back-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-99469-s-from-desc-to-asc-and-back-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-99469-s-from-desc-to-asc-and-back-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-99469-s-from-desc-to-asc-and-back-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 291
                      }
                    },
                    {
                      "workerIndex": 1007,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 146,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:291:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 291
                        },
                        "snippet": "\u001b[0m \u001b[90m 289 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 290 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 291 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 292 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 293 |\u001b[39m\n \u001b[90m 294 |\u001b[39m     \u001b[90m// amount is active desc; clicking it (same key, desc → asc)\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 291
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  289 |     await installMocks(page);\n  290 |\n> 291 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  292 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  293 |\n  294 |     // amount is active desc; clicking it (same key, desc → asc)\n    at /app/tests/ui/vendor-purposes.spec.ts:291:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:01.251Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-99469-s-from-desc-to-asc-and-back-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-99469-s-from-desc-to-asc-and-back-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 291
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-67e14db3fba142c57711",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 288,
              "column": 7
            },
            {
              "title": "non-active headers show aria-sort=\"none\"",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1013,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:309:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 309
                        },
                        "snippet": "\u001b[0m \u001b[90m 307 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 308 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 309 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 310 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes thead'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 311 |\u001b[39m\n \u001b[90m 312 |\u001b[39m     \u001b[90m// amount is the active sort; group, share, count, clients are none\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 309
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  307 |     await installMocks(page);\n  308 |\n> 309 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  310 |     await expect(page.locator('#purposes thead')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  311 |\n  312 |     // amount is the active sort; group, share, count, clients are none\n    at /app/tests/ui/vendor-purposes.spec.ts:309:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:02.023Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-215dc-eaders-show-aria-sort-none--ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-215dc-eaders-show-aria-sort-none--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 309
                      }
                    },
                    {
                      "workerIndex": 1018,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 205,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:309:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 309
                        },
                        "snippet": "\u001b[0m \u001b[90m 307 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 308 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 309 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 310 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes thead'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 311 |\u001b[39m\n \u001b[90m 312 |\u001b[39m     \u001b[90m// amount is the active sort; group, share, count, clients are none\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 309
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  307 |     await installMocks(page);\n  308 |\n> 309 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  310 |     await expect(page.locator('#purposes thead')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  311 |\n  312 |     // amount is the active sort; group, share, count, clients are none\n    at /app/tests/ui/vendor-purposes.spec.ts:309:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:02.794Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-215dc-eaders-show-aria-sort-none--ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-215dc-eaders-show-aria-sort-none--ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-215dc-eaders-show-aria-sort-none--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-215dc-eaders-show-aria-sort-none--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 309
                      }
                    },
                    {
                      "workerIndex": 1025,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:309:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 309
                        },
                        "snippet": "\u001b[0m \u001b[90m 307 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 308 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 309 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 310 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes thead'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 311 |\u001b[39m\n \u001b[90m 312 |\u001b[39m     \u001b[90m// amount is the active sort; group, share, count, clients are none\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 309
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  307 |     await installMocks(page);\n  308 |\n> 309 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  310 |     await expect(page.locator('#purposes thead')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  311 |\n  312 |     // amount is the active sort; group, share, count, clients are none\n    at /app/tests/ui/vendor-purposes.spec.ts:309:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:03.661Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-215dc-eaders-show-aria-sort-none--ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-215dc-eaders-show-aria-sort-none--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 309
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-d77070761e614b03420c",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 306,
              "column": 7
            }
          ]
        },
        {
          "title": "vendor purpose card — expandable group detail",
          "file": "tests/ui/vendor-purposes.spec.ts",
          "line": 318,
          "column": 6,
          "specs": [
            {
              "title": "each row has a details/summary element with the group name",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1030,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 155,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:325:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 325
                        },
                        "snippet": "\u001b[0m \u001b[90m 323 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 324 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 325 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 326 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 327 |\u001b[39m\n \u001b[90m 328 |\u001b[39m     \u001b[36mconst\u001b[39m rows \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 325
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  323 |     await installMocks(page);\n  324 |\n> 325 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  326 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  327 |\n  328 |     const rows = page.locator('#purposes tbody tr');\n    at /app/tests/ui/vendor-purposes.spec.ts:325:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:04.407Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-84aa0-element-with-the-group-name-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-84aa0-element-with-the-group-name-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 325
                      }
                    },
                    {
                      "workerIndex": 1035,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 218,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:325:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 325
                        },
                        "snippet": "\u001b[0m \u001b[90m 323 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 324 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 325 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 326 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 327 |\u001b[39m\n \u001b[90m 328 |\u001b[39m     \u001b[36mconst\u001b[39m rows \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 325
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  323 |     await installMocks(page);\n  324 |\n> 325 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  326 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  327 |\n  328 |     const rows = page.locator('#purposes tbody tr');\n    at /app/tests/ui/vendor-purposes.spec.ts:325:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:05.196Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-84aa0-element-with-the-group-name-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-84aa0-element-with-the-group-name-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-84aa0-element-with-the-group-name-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-84aa0-element-with-the-group-name-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 325
                      }
                    },
                    {
                      "workerIndex": 1042,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 139,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:325:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 325
                        },
                        "snippet": "\u001b[0m \u001b[90m 323 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 324 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 325 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 326 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 327 |\u001b[39m\n \u001b[90m 328 |\u001b[39m     \u001b[36mconst\u001b[39m rows \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 325
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  323 |     await installMocks(page);\n  324 |\n> 325 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  326 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  327 |\n  328 |     const rows = page.locator('#purposes tbody tr');\n    at /app/tests/ui/vendor-purposes.spec.ts:325:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:06.089Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-84aa0-element-with-the-group-name-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-84aa0-element-with-the-group-name-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 325
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-aee3634fc70c27c6e676",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 322,
              "column": 7
            },
            {
              "title": "expanding details reveals topPurposes for that group",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1047,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 141,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:339:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 339
                        },
                        "snippet": "\u001b[0m \u001b[90m 337 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 338 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 339 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 340 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 341 |\u001b[39m\n \u001b[90m 342 |\u001b[39m     \u001b[36mconst\u001b[39m firstDetails \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m.\u001b[39mlocator(\u001b[32m'details'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 339
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  337 |     await installMocks(page);\n  338 |\n> 339 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  340 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  341 |\n  342 |     const firstDetails = page.locator('#purposes tbody tr').first().locator('details');\n    at /app/tests/ui/vendor-purposes.spec.ts:339:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:06.842Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9dcd6--topPurposes-for-that-group-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9dcd6--topPurposes-for-that-group-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 339
                      }
                    },
                    {
                      "workerIndex": 1051,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 222,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:339:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 339
                        },
                        "snippet": "\u001b[0m \u001b[90m 337 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 338 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 339 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 340 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 341 |\u001b[39m\n \u001b[90m 342 |\u001b[39m     \u001b[36mconst\u001b[39m firstDetails \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m.\u001b[39mlocator(\u001b[32m'details'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 339
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  337 |     await installMocks(page);\n  338 |\n> 339 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  340 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  341 |\n  342 |     const firstDetails = page.locator('#purposes tbody tr').first().locator('details');\n    at /app/tests/ui/vendor-purposes.spec.ts:339:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:07.596Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9dcd6--topPurposes-for-that-group-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9dcd6--topPurposes-for-that-group-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9dcd6--topPurposes-for-that-group-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9dcd6--topPurposes-for-that-group-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 339
                      }
                    },
                    {
                      "workerIndex": 1055,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:339:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 339
                        },
                        "snippet": "\u001b[0m \u001b[90m 337 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 338 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 339 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 340 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 341 |\u001b[39m\n \u001b[90m 342 |\u001b[39m     \u001b[36mconst\u001b[39m firstDetails \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m)\u001b[33m.\u001b[39mfirst()\u001b[33m.\u001b[39mlocator(\u001b[32m'details'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 339
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  337 |     await installMocks(page);\n  338 |\n> 339 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  340 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  341 |\n  342 |     const firstDetails = page.locator('#purposes tbody tr').first().locator('details');\n    at /app/tests/ui/vendor-purposes.spec.ts:339:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:08.478Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9dcd6--topPurposes-for-that-group-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-9dcd6--topPurposes-for-that-group-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 339
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-834a1301aa31030c82e5",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 336,
              "column": 7
            }
          ]
        },
        {
          "title": "vendor purpose card — Sankey / Table toggle",
          "file": "tests/ui/vendor-purposes.spec.ts",
          "line": 350,
          "column": 6,
          "specs": [
            {
              "title": "Sankey is the default view with a canvas visible",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1059,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 145,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:356:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 356
                        },
                        "snippet": "\u001b[0m \u001b[90m 354 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 355 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 356 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 357 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 358 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"sankey\"]'\u001b[39m))\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-pressed'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 359 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .purpose-table-view'\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 356
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  354 |     await installMocks(page);\n  355 |\n> 356 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  357 |     await expect(page.locator('#purposes .money-flow-chart canvas')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  358 |     await expect(page.locator('#purposes .mf-view-btn[data-view=\"sankey\"]')).toHaveAttribute('aria-pressed', 'true');\n  359 |     await expect(page.locator('#purposes .purpose-table-view')).toBeHidden();\n    at /app/tests/ui/vendor-purposes.spec.ts:356:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:09.231Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f797c--view-with-a-canvas-visible-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f797c--view-with-a-canvas-visible-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 356
                      }
                    },
                    {
                      "workerIndex": 1062,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 220,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:356:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 356
                        },
                        "snippet": "\u001b[0m \u001b[90m 354 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 355 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 356 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 357 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 358 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"sankey\"]'\u001b[39m))\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-pressed'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 359 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .purpose-table-view'\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 356
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  354 |     await installMocks(page);\n  355 |\n> 356 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  357 |     await expect(page.locator('#purposes .money-flow-chart canvas')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  358 |     await expect(page.locator('#purposes .mf-view-btn[data-view=\"sankey\"]')).toHaveAttribute('aria-pressed', 'true');\n  359 |     await expect(page.locator('#purposes .purpose-table-view')).toBeHidden();\n    at /app/tests/ui/vendor-purposes.spec.ts:356:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:09.978Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f797c--view-with-a-canvas-visible-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f797c--view-with-a-canvas-visible-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f797c--view-with-a-canvas-visible-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f797c--view-with-a-canvas-visible-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 356
                      }
                    },
                    {
                      "workerIndex": 1065,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 139,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:356:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 356
                        },
                        "snippet": "\u001b[0m \u001b[90m 354 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 355 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 356 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 357 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 358 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"sankey\"]'\u001b[39m))\u001b[33m.\u001b[39mtoHaveAttribute(\u001b[32m'aria-pressed'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'true'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 359 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .purpose-table-view'\u001b[39m))\u001b[33m.\u001b[39mtoBeHidden()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 356
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  354 |     await installMocks(page);\n  355 |\n> 356 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  357 |     await expect(page.locator('#purposes .money-flow-chart canvas')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  358 |     await expect(page.locator('#purposes .mf-view-btn[data-view=\"sankey\"]')).toHaveAttribute('aria-pressed', 'true');\n  359 |     await expect(page.locator('#purposes .purpose-table-view')).toBeHidden();\n    at /app/tests/ui/vendor-purposes.spec.ts:356:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:10.811Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f797c--view-with-a-canvas-visible-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-f797c--view-with-a-canvas-visible-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 356
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-f60df3b0e1a2bc247fd1",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 351,
              "column": 7
            },
            {
              "title": "Table button shows the table and hides the chart",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1068,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 143,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:366:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m\n \u001b[90m 369 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     await installMocks(page);\n  365 |\n> 366 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  367 |     await expect(page.locator('#purposes .money-flow-chart canvas')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  368 |\n  369 |     await page.locator('#purposes .mf-view-btn[data-view=\"table\"]').click();\n    at /app/tests/ui/vendor-purposes.spec.ts:366:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:11.552Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-54b56-e-table-and-hides-the-chart-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-54b56-e-table-and-hides-the-chart-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 1071,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 188,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:366:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m\n \u001b[90m 369 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     await installMocks(page);\n  365 |\n> 366 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  367 |     await expect(page.locator('#purposes .money-flow-chart canvas')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  368 |\n  369 |     await page.locator('#purposes .mf-view-btn[data-view=\"table\"]').click();\n    at /app/tests/ui/vendor-purposes.spec.ts:366:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:12.303Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-54b56-e-table-and-hides-the-chart-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-54b56-e-table-and-hides-the-chart-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-54b56-e-table-and-hides-the-chart-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-54b56-e-table-and-hides-the-chart-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 366
                      }
                    },
                    {
                      "workerIndex": 1074,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 131,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:366:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 366
                        },
                        "snippet": "\u001b[0m \u001b[90m 364 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 365 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 366 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 367 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 368 |\u001b[39m\n \u001b[90m 369 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 366
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  364 |     await installMocks(page);\n  365 |\n> 366 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  367 |     await expect(page.locator('#purposes .money-flow-chart canvas')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  368 |\n  369 |     await page.locator('#purposes .mf-view-btn[data-view=\"table\"]').click();\n    at /app/tests/ui/vendor-purposes.spec.ts:366:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:13.133Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-54b56-e-table-and-hides-the-chart-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-54b56-e-table-and-hides-the-chart-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 366
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-d87e42dc7f697dfcfd2b",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 363,
              "column": 7
            },
            {
              "title": "switching back to Sankey restores the canvas",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1077,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 132,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:378:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 378
                        },
                        "snippet": "\u001b[0m \u001b[90m 376 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 377 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 378 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 379 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 380 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 381 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"sankey\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 378
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  376 |     await installMocks(page);\n  377 |\n> 378 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  379 |     await expect(page.locator('#purposes .money-flow-chart canvas')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  380 |     await page.locator('#purposes .mf-view-btn[data-view=\"table\"]').click();\n  381 |     await page.locator('#purposes .mf-view-btn[data-view=\"sankey\"]').click();\n    at /app/tests/ui/vendor-purposes.spec.ts:378:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:13.866Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-eb032--Sankey-restores-the-canvas-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-eb032--Sankey-restores-the-canvas-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 378
                      }
                    },
                    {
                      "workerIndex": 1080,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 195,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:378:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 378
                        },
                        "snippet": "\u001b[0m \u001b[90m 376 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 377 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 378 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 379 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 380 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 381 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"sankey\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 378
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  376 |     await installMocks(page);\n  377 |\n> 378 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  379 |     await expect(page.locator('#purposes .money-flow-chart canvas')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  380 |     await page.locator('#purposes .mf-view-btn[data-view=\"table\"]').click();\n  381 |     await page.locator('#purposes .mf-view-btn[data-view=\"sankey\"]').click();\n    at /app/tests/ui/vendor-purposes.spec.ts:378:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:14.588Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-eb032--Sankey-restores-the-canvas-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-eb032--Sankey-restores-the-canvas-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-eb032--Sankey-restores-the-canvas-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-eb032--Sankey-restores-the-canvas-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 378
                      }
                    },
                    {
                      "workerIndex": 1083,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:378:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 378
                        },
                        "snippet": "\u001b[0m \u001b[90m 376 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 377 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 378 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 379 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .money-flow-chart canvas'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 380 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"table\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 381 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes .mf-view-btn[data-view=\"sankey\"]'\u001b[39m)\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 378
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  376 |     await installMocks(page);\n  377 |\n> 378 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  379 |     await expect(page.locator('#purposes .money-flow-chart canvas')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  380 |     await page.locator('#purposes .mf-view-btn[data-view=\"table\"]').click();\n  381 |     await page.locator('#purposes .mf-view-btn[data-view=\"sankey\"]').click();\n    at /app/tests/ui/vendor-purposes.spec.ts:378:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:15.436Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-eb032--Sankey-restores-the-canvas-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-eb032--Sankey-restores-the-canvas-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 378
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-08c094850d3797551c61",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 375,
              "column": 7
            }
          ]
        },
        {
          "title": "vendor purpose card — fallback / empty states",
          "file": "tests/ui/vendor-purposes.spec.ts",
          "line": 388,
          "column": 6,
          "specs": [
            {
              "title": "\"Raw purposes\" disclosure appears when vendorPurposeFlow returns null",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1086,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 135,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:392:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 392
                        },
                        "snippet": "\u001b[0m \u001b[90m 390 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page\u001b[33m,\u001b[39m \u001b[36mnull\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 391 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 392 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 393 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 394 |\u001b[39m\n \u001b[90m 395 |\u001b[39m     \u001b[36mconst\u001b[39m disclosure \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes details.purpose-raw'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 392
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  390 |     await installMocks(page, null);\n  391 |\n> 392 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  393 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  394 |\n  395 |     const disclosure = page.locator('#purposes details.purpose-raw');\n    at /app/tests/ui/vendor-purposes.spec.ts:392:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:16.169Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7b254-dorPurposeFlow-returns-null-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7b254-dorPurposeFlow-returns-null-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 392
                      }
                    },
                    {
                      "workerIndex": 1089,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 228,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:392:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 392
                        },
                        "snippet": "\u001b[0m \u001b[90m 390 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page\u001b[33m,\u001b[39m \u001b[36mnull\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 391 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 392 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 393 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 394 |\u001b[39m\n \u001b[90m 395 |\u001b[39m     \u001b[36mconst\u001b[39m disclosure \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes details.purpose-raw'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 392
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  390 |     await installMocks(page, null);\n  391 |\n> 392 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  393 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  394 |\n  395 |     const disclosure = page.locator('#purposes details.purpose-raw');\n    at /app/tests/ui/vendor-purposes.spec.ts:392:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:16.901Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7b254-dorPurposeFlow-returns-null-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7b254-dorPurposeFlow-returns-null-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7b254-dorPurposeFlow-returns-null-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7b254-dorPurposeFlow-returns-null-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 392
                      }
                    },
                    {
                      "workerIndex": 1092,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 131,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:392:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 392
                        },
                        "snippet": "\u001b[0m \u001b[90m 390 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page\u001b[33m,\u001b[39m \u001b[36mnull\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 391 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 392 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 393 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 394 |\u001b[39m\n \u001b[90m 395 |\u001b[39m     \u001b[36mconst\u001b[39m disclosure \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes details.purpose-raw'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 392
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  390 |     await installMocks(page, null);\n  391 |\n> 392 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  393 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  394 |\n  395 |     const disclosure = page.locator('#purposes details.purpose-raw');\n    at /app/tests/ui/vendor-purposes.spec.ts:392:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:17.766Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7b254-dorPurposeFlow-returns-null-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-7b254-dorPurposeFlow-returns-null-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 392
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-6590a658907075686038",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 389,
              "column": 7
            },
            {
              "title": "\"Raw purposes\" disclosure appears when groups array is empty",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1095,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 143,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:403:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 403
                        },
                        "snippet": "\u001b[0m \u001b[90m 401 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page\u001b[33m,\u001b[39m { taxonomyVersion\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m totalAmount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m groups\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m links\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m otherLinks\u001b[33m:\u001b[39m [] })\u001b[33m;\u001b[39m\n \u001b[90m 402 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 403 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 404 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 405 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes details.purpose-raw'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 406 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 403
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  401 |     await installMocks(page, { taxonomyVersion: null, totalAmount: 0, groups: [], links: [], otherLinks: [] });\n  402 |\n> 403 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  404 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  405 |     await expect(page.locator('#purposes details.purpose-raw')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  406 |   });\n    at /app/tests/ui/vendor-purposes.spec.ts:403:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:18.504Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6114c--when-groups-array-is-empty-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6114c--when-groups-array-is-empty-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 403
                      }
                    },
                    {
                      "workerIndex": 1098,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 203,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:403:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 403
                        },
                        "snippet": "\u001b[0m \u001b[90m 401 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page\u001b[33m,\u001b[39m { taxonomyVersion\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m totalAmount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m groups\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m links\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m otherLinks\u001b[33m:\u001b[39m [] })\u001b[33m;\u001b[39m\n \u001b[90m 402 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 403 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 404 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 405 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes details.purpose-raw'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 406 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 403
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  401 |     await installMocks(page, { taxonomyVersion: null, totalAmount: 0, groups: [], links: [], otherLinks: [] });\n  402 |\n> 403 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  404 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  405 |     await expect(page.locator('#purposes details.purpose-raw')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  406 |   });\n    at /app/tests/ui/vendor-purposes.spec.ts:403:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:19.260Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6114c--when-groups-array-is-empty-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6114c--when-groups-array-is-empty-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6114c--when-groups-array-is-empty-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6114c--when-groups-array-is-empty-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 403
                      }
                    },
                    {
                      "workerIndex": 1101,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 138,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:403:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 403
                        },
                        "snippet": "\u001b[0m \u001b[90m 401 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page\u001b[33m,\u001b[39m { taxonomyVersion\u001b[33m:\u001b[39m \u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m totalAmount\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m\u001b[33m,\u001b[39m groups\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m links\u001b[33m:\u001b[39m []\u001b[33m,\u001b[39m otherLinks\u001b[33m:\u001b[39m [] })\u001b[33m;\u001b[39m\n \u001b[90m 402 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 403 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 404 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 405 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes details.purpose-raw'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 406 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 403
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  401 |     await installMocks(page, { taxonomyVersion: null, totalAmount: 0, groups: [], links: [], otherLinks: [] });\n  402 |\n> 403 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  404 |     await expect(page.locator('#purposes')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  405 |     await expect(page.locator('#purposes details.purpose-raw')).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  406 |   });\n    at /app/tests/ui/vendor-purposes.spec.ts:403:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:20.112Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6114c--when-groups-array-is-empty-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-6114c--when-groups-array-is-empty-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 403
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-01f46cd24f7650b234a4",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 400,
              "column": 7
            },
            {
              "title": "no \"Raw purposes\" disclosure when valid groups are present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1104,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 157,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:411:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 411
                        },
                        "snippet": "\u001b[0m \u001b[90m 409 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 410 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 411 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 412 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 413 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes details.purpose-raw'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 414 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 411
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  409 |     await installMocks(page);\n  410 |\n> 411 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  412 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  413 |     await expect(page.locator('#purposes details.purpose-raw')).toHaveCount(0);\n  414 |   });\n    at /app/tests/ui/vendor-purposes.spec.ts:411:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:20.842Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-72d06-en-valid-groups-are-present-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-72d06-en-valid-groups-are-present-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 411
                      }
                    },
                    {
                      "workerIndex": 1107,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 222,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:411:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 411
                        },
                        "snippet": "\u001b[0m \u001b[90m 409 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 410 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 411 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 412 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 413 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes details.purpose-raw'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 414 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 411
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  409 |     await installMocks(page);\n  410 |\n> 411 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  412 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  413 |     await expect(page.locator('#purposes details.purpose-raw')).toHaveCount(0);\n  414 |   });\n    at /app/tests/ui/vendor-purposes.spec.ts:411:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:21.607Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-72d06-en-valid-groups-are-present-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-72d06-en-valid-groups-are-present-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-72d06-en-valid-groups-are-present-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-72d06-en-valid-groups-are-present-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 411
                      }
                    },
                    {
                      "workerIndex": 1110,
                      "parallelIndex": 2,
                      "status": "failed",
                      "duration": 134,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:411:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 411
                        },
                        "snippet": "\u001b[0m \u001b[90m 409 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 410 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 411 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 412 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes tbody tr'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m3\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 413 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes details.purpose-raw'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 414 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 411
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  409 |     await installMocks(page);\n  410 |\n> 411 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  412 |     await expect(page.locator('#purposes tbody tr')).toHaveCount(3, { timeout: DATA_LOAD_TIMEOUT });\n  413 |     await expect(page.locator('#purposes details.purpose-raw')).toHaveCount(0);\n  414 |   });\n    at /app/tests/ui/vendor-purposes.spec.ts:411:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:22.440Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-72d06-en-valid-groups-are-present-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-72d06-en-valid-groups-are-present-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 411
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-cedf79b9e30f52c9bde6",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 408,
              "column": 7
            },
            {
              "title": "status element shows a message while loading and clears on success",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 1112,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 140,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:419:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 419
                        },
                        "snippet": "\u001b[0m \u001b[90m 417 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 418 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 419 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 420 |\u001b[39m     \u001b[36mconst\u001b[39m select \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 421 |\u001b[39m     \u001b[36mawait\u001b[39m expect(select)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 422 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 419
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  417 |     await installMocks(page);\n  418 |\n> 419 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  420 |     const select = page.locator('#purposes select[aria-label=\"Purpose cycle\"]');\n  421 |     await expect(select).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  422 |\n    at /app/tests/ui/vendor-purposes.spec.ts:419:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:05:23.138Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-92a35-ading-and-clears-on-success-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-92a35-ading-and-clears-on-success-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 419
                      }
                    },
                    {
                      "workerIndex": 1114,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 211,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:419:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 419
                        },
                        "snippet": "\u001b[0m \u001b[90m 417 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 418 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 419 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 420 |\u001b[39m     \u001b[36mconst\u001b[39m select \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 421 |\u001b[39m     \u001b[36mawait\u001b[39m expect(select)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 422 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 419
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  417 |     await installMocks(page);\n  418 |\n> 419 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  420 |     const select = page.locator('#purposes select[aria-label=\"Purpose cycle\"]');\n  421 |     await expect(select).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  422 |\n    at /app/tests/ui/vendor-purposes.spec.ts:419:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:05:23.869Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-92a35-ading-and-clears-on-success-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-92a35-ading-and-clears-on-success-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-92a35-ading-and-clears-on-success-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-92a35-ading-and-clears-on-success-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 419
                      }
                    },
                    {
                      "workerIndex": 1116,
                      "parallelIndex": 1,
                      "status": "failed",
                      "duration": 131,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/vendor-purposes.spec.ts:419:16",
                        "location": {
                          "file": "/app/tests/ui/vendor-purposes.spec.ts",
                          "column": 16,
                          "line": 419
                        },
                        "snippet": "\u001b[0m \u001b[90m 417 |\u001b[39m     \u001b[36mawait\u001b[39m installMocks(page)\u001b[33m;\u001b[39m\n \u001b[90m 418 |\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 419 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m`/vendors/${VENDOR_ID}/`\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 420 |\u001b[39m     \u001b[36mconst\u001b[39m select \u001b[33m=\u001b[39m page\u001b[33m.\u001b[39mlocator(\u001b[32m'#purposes select[aria-label=\"Purpose cycle\"]'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 421 |\u001b[39m     \u001b[36mawait\u001b[39m expect(select)\u001b[33m.\u001b[39mtoBeVisible({ timeout\u001b[33m:\u001b[39m \u001b[33mDATA_LOAD_TIMEOUT\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 422 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/vendor-purposes.spec.ts",
                            "column": 16,
                            "line": 419
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/vendors/vendor-purpose-test/\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/vendors/vendor-purpose-test/\", waiting until \"load\"\u001b[22m\n\n\n  417 |     await installMocks(page);\n  418 |\n> 419 |     await page.goto(`/vendors/${VENDOR_ID}/`);\n      |                ^\n  420 |     const select = page.locator('#purposes select[aria-label=\"Purpose cycle\"]');\n  421 |     await expect(select).toBeVisible({ timeout: DATA_LOAD_TIMEOUT });\n  422 |\n    at /app/tests/ui/vendor-purposes.spec.ts:419:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:05:24.702Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-92a35-ading-and-clears-on-success-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/vendor-purposes-vendor-pur-92a35-ading-and-clears-on-success-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/vendor-purposes.spec.ts",
                        "column": 16,
                        "line": 419
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "77632b1a04bb4d3528ee-ef48471b651b0a19c4d4",
              "file": "tests/ui/vendor-purposes.spec.ts",
              "line": 416,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/visitor-token.spec.ts",
      "file": "tests/ui/visitor-token.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "GET /api/token is never an error, with or without the gate",
          "ok": false,
          "tags": [],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "ui",
              "projectName": "ui",
              "results": [
                {
                  "workerIndex": 316,
                  "parallelIndex": 4,
                  "status": "timedOut",
                  "duration": 30016,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-25T21:03:09.374Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-GET-api-toke-d77d5-or-with-or-without-the-gate-ui/error-context.md"
                    }
                  ]
                },
                {
                  "workerIndex": 334,
                  "parallelIndex": 4,
                  "status": "timedOut",
                  "duration": 30016,
                  "error": {
                    "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                    "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                  },
                  "errors": [
                    {
                      "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 1,
                  "startTime": "2026-10-25T21:03:39.907Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-GET-api-toke-d77d5-or-with-or-without-the-gate-ui-retry1/error-context.md"
                    },
                    {
                      "name": "trace",
                      "contentType": "application/zip",
                      "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-GET-api-toke-d77d5-or-with-or-without-the-gate-ui-retry1/trace.zip"
                    }
                  ]
                },
                {
                  "workerIndex": 431,
                  "parallelIndex": 4,
                  "status": "failed",
                  "duration": 19287,
                  "error": {
                    "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                    "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/visitor-token.spec.ts:33:29",
                    "location": {
                      "file": "/app/tests/ui/visitor-token.spec.ts",
                      "column": 29,
                      "line": 33
                    },
                    "snippet": "\u001b[0m \u001b[90m 31 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 32 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 33 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 34 |\u001b[39m     expect([\u001b[35m200\u001b[39m\u001b[33m,\u001b[39m \u001b[35m204\u001b[39m])\u001b[33m.\u001b[39mtoContain(res\u001b[33m.\u001b[39mstatus())\u001b[33m;\u001b[39m\n \u001b[90m 35 |\u001b[39m     expect(res\u001b[33m.\u001b[39mheaders()[\u001b[32m'cache-control'\u001b[39m])\u001b[33m.\u001b[39mtoContain(\u001b[32m'no-store'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 36 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\u001b[0m"
                  },
                  "errors": [
                    {
                      "location": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 29,
                        "line": 33
                      },
                      "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  31 |   const probe = await freshContext(baseURL);\n  32 |   try {\n> 33 |     const res = await probe.get('/api/token');\n     |                             ^\n  34 |     expect([200, 204]).toContain(res.status());\n  35 |     expect(res.headers()['cache-control']).toContain('no-store');\n  36 |   } finally {\n    at /app/tests/ui/visitor-token.spec.ts:33:29"
                    }
                  ],
                  "stdout": [],
                  "stderr": [],
                  "retry": 2,
                  "startTime": "2026-10-25T21:04:10.729Z",
                  "annotations": [],
                  "attachments": [
                    {
                      "name": "error-context",
                      "contentType": "text/markdown",
                      "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-GET-api-toke-d77d5-or-with-or-without-the-gate-ui-retry2/error-context.md"
                    }
                  ],
                  "errorLocation": {
                    "file": "/app/tests/ui/visitor-token.spec.ts",
                    "column": 29,
                    "line": 33
                  }
                }
              ],
              "status": "unexpected"
            }
          ],
          "id": "66d11097bc5ff2c625f4-ba2e689c22ca1eb58a86",
          "file": "tests/ui/visitor-token.spec.ts",
          "line": 30,
          "column": 5
        }
      ],
      "suites": [
        {
          "title": "visitor-token gate",
          "file": "tests/ui/visitor-token.spec.ts",
          "line": 41,
          "column": 6,
          "specs": [
            {
              "title": "GET /api/token sets an HttpOnly token and a readable expiry",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 470,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 20,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/visitor-token.spec.ts:43:31",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 31,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'visitor-token gate'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 42 |\u001b[39m   test(\u001b[32m'GET /api/token sets an HttpOnly token and a readable expiry'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m     \u001b[90m// Without the gate the path falls through to the site (404 or a page); a 5xx is a broken gate, not a skip.\u001b[39m\n \u001b[90m 45 |\u001b[39m     test\u001b[33m.\u001b[39mskip(res\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m204\u001b[39m \u001b[33m&&\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m<\u001b[39m \u001b[35m500\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'this target has no visitor-token gate'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 46 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m204\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 31,
                            "line": 43
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  41 | test.describe('visitor-token gate', () => {\n  42 |   test('GET /api/token sets an HttpOnly token and a readable expiry', async ({ request }) => {\n> 43 |     const res = await request.get('/api/token');\n     |                               ^\n  44 |     // Without the gate the path falls through to the site (404 or a page); a 5xx is a broken gate, not a skip.\n  45 |     test.skip(res.status() !== 204 && res.status() < 500, 'this target has no visitor-token gate');\n  46 |     expect(res.status()).toBe(204);\n    at /app/tests/ui/visitor-token.spec.ts:43:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:30.554Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-bcdcb-token-and-a-readable-expiry-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 31,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 480,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 67,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/visitor-token.spec.ts:43:31",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 31,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'visitor-token gate'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 42 |\u001b[39m   test(\u001b[32m'GET /api/token sets an HttpOnly token and a readable expiry'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m     \u001b[90m// Without the gate the path falls through to the site (404 or a page); a 5xx is a broken gate, not a skip.\u001b[39m\n \u001b[90m 45 |\u001b[39m     test\u001b[33m.\u001b[39mskip(res\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m204\u001b[39m \u001b[33m&&\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m<\u001b[39m \u001b[35m500\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'this target has no visitor-token gate'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 46 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m204\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 31,
                            "line": 43
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  41 | test.describe('visitor-token gate', () => {\n  42 |   test('GET /api/token sets an HttpOnly token and a readable expiry', async ({ request }) => {\n> 43 |     const res = await request.get('/api/token');\n     |                               ^\n  44 |     // Without the gate the path falls through to the site (404 or a page); a 5xx is a broken gate, not a skip.\n  45 |     test.skip(res.status() !== 204 && res.status() < 500, 'this target has no visitor-token gate');\n  46 |     expect(res.status()).toBe(204);\n    at /app/tests/ui/visitor-token.spec.ts:43:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:31.183Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-bcdcb-token-and-a-readable-expiry-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-bcdcb-token-and-a-readable-expiry-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 31,
                        "line": 43
                      }
                    },
                    {
                      "workerIndex": 495,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 30,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/visitor-token.spec.ts:43:31",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 31,
                          "line": 43
                        },
                        "snippet": "\u001b[0m \u001b[90m 41 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'visitor-token gate'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n \u001b[90m 42 |\u001b[39m   test(\u001b[32m'GET /api/token sets an HttpOnly token and a readable expiry'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 43 |\u001b[39m     \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                               \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 44 |\u001b[39m     \u001b[90m// Without the gate the path falls through to the site (404 or a page); a 5xx is a broken gate, not a skip.\u001b[39m\n \u001b[90m 45 |\u001b[39m     test\u001b[33m.\u001b[39mskip(res\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m204\u001b[39m \u001b[33m&&\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m<\u001b[39m \u001b[35m500\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'this target has no visitor-token gate'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 46 |\u001b[39m     expect(res\u001b[33m.\u001b[39mstatus())\u001b[33m.\u001b[39mtoBe(\u001b[35m204\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 31,
                            "line": 43
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  41 | test.describe('visitor-token gate', () => {\n  42 |   test('GET /api/token sets an HttpOnly token and a readable expiry', async ({ request }) => {\n> 43 |     const res = await request.get('/api/token');\n     |                               ^\n  44 |     // Without the gate the path falls through to the site (404 or a page); a 5xx is a broken gate, not a skip.\n  45 |     test.skip(res.status() !== 204 && res.status() < 500, 'this target has no visitor-token gate');\n  46 |     expect(res.status()).toBe(204);\n    at /app/tests/ui/visitor-token.spec.ts:43:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:31.865Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-bcdcb-token-and-a-readable-expiry-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 31,
                        "line": 43
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "66d11097bc5ff2c625f4-6a345a67524e2f99f69c",
              "file": "tests/ui/visitor-token.spec.ts",
              "line": 42,
              "column": 7
            },
            {
              "title": "without a token, /api/graphql answers 401",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 509,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:58:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:58:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.557Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-efc09-ken-api-graphql-answers-401-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 525,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 78,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:58:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:58:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:33.257Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-efc09-ken-api-graphql-answers-401-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-efc09-ken-api-graphql-answers-401-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 545,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 41,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:58:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:58:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:34.077Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-efc09-ken-api-graphql-answers-401-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "66d11097bc5ff2c625f4-f396d27256170349746e",
              "file": "tests/ui/visitor-token.spec.ts",
              "line": 57,
              "column": 7
            },
            {
              "title": "an anon token runs persisted documents and nothing else",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 564,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:70:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:70:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.802Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-272dd--documents-and-nothing-else-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 579,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 74,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:70:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:70:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.527Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-272dd--documents-and-nothing-else-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-272dd--documents-and-nothing-else-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 598,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 37,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:70:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:70:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.329Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-visitor-toke-272dd--documents-and-nothing-else-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "66d11097bc5ff2c625f4-fb37317a2cef824e3dad",
              "file": "tests/ui/visitor-token.spec.ts",
              "line": 69,
              "column": 7
            }
          ]
        },
        {
          "title": "donor records are premium",
          "file": "tests/ui/visitor-token.spec.ts",
          "line": 98,
          "column": 6,
          "specs": [
            {
              "title": "an anonymous visitor gets the premium notice on Individual Donors",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 613,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:37.013Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-donor-record-4b012-notice-on-Individual-Donors-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 626,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 55,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.719Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-donor-record-4b012-notice-on-Individual-Donors-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-donor-record-4b012-notice-on-Individual-Donors-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 645,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.480Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-donor-record-4b012-notice-on-Individual-Donors-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "66d11097bc5ff2c625f4-c8ffc6d48edd62fa84f1",
              "file": "tests/ui/visitor-token.spec.ts",
              "line": 103,
              "column": 7
            },
            {
              "title": "an anonymous visitor sees employer totals but not donor names",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 659,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:39.149Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-donor-record-c6316--totals-but-not-donor-names-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 671,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 55,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:39.878Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-donor-record-c6316--totals-but-not-donor-names-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-donor-record-c6316--totals-but-not-donor-names-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    },
                    {
                      "workerIndex": 692,
                      "parallelIndex": 4,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17",
                        "location": {
                          "file": "/app/tests/ui/visitor-token.spec.ts",
                          "column": 25,
                          "line": 21
                        },
                        "snippet": "\u001b[0m \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m probe \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m freshContext(baseURL)\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mtry\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 21 |\u001b[39m     \u001b[36mreturn\u001b[39m (\u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m'/api/token'\u001b[39m))\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m204\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                         \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 22 |\u001b[39m   } \u001b[36mfinally\u001b[39m {\n \u001b[90m 23 |\u001b[39m     \u001b[36mawait\u001b[39m probe\u001b[33m.\u001b[39mdispose()\u001b[33m;\u001b[39m\n \u001b[90m 24 |\u001b[39m   }\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/visitor-token.spec.ts",
                            "column": 25,
                            "line": 21
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/token\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  19 |   const probe = await freshContext(baseURL);\n  20 |   try {\n> 21 |     return (await probe.get('/api/token')).status() === 204;\n     |                         ^\n  22 |   } finally {\n  23 |     await probe.dispose();\n  24 |   }\n    at hasGate (/app/tests/ui/visitor-token.spec.ts:21:25)\n    at /app/tests/ui/visitor-token.spec.ts:100:17"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.649Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/visitor-token-donor-record-c6316--totals-but-not-donor-names-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/visitor-token.spec.ts",
                        "column": 25,
                        "line": 21
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "66d11097bc5ff2c625f4-70bd87774f0fc06f5206",
              "file": "tests/ui/visitor-token.spec.ts",
              "line": 109,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/voter-cycles.spec.ts",
      "file": "tests/ui/voter-cycles.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "voters and the cycle facet (sites#355)",
          "file": "tests/ui/voter-cycles.spec.ts",
          "line": 34,
          "column": 6,
          "specs": [
            {
              "title": "a cycle scopes the voter list; the page offers the cycle and voting-history filters",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 337,
                      "parallelIndex": 24,
                      "status": "timedOut",
                      "duration": 30017,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n    at /app/tests/ui/voter-cycles.spec.ts:35:8",
                        "location": {
                          "file": "/app/tests/ui/voter-cycles.spec.ts",
                          "column": 8,
                          "line": 35
                        },
                        "snippet": "\u001b[0m \u001b[90m 33 |\u001b[39m\n \u001b[90m 34 |\u001b[39m test\u001b[33m.\u001b[39mdescribe(\u001b[32m'voters and the cycle facet (sites#355)'\u001b[39m\u001b[33m,\u001b[39m () \u001b[33m=>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 35 |\u001b[39m   test\u001b[33m.\u001b[39mbeforeEach(\u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m    |\u001b[39m        \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 36 |\u001b[39m     \u001b[36mawait\u001b[39m skipIfPremiumGated(request\u001b[33m,\u001b[39m \u001b[32m'/voters/'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 37 |\u001b[39m   })\u001b[33m;\u001b[39m\n \u001b[90m 38 |\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voter-cycles.spec.ts",
                            "column": 8,
                            "line": 35
                          },
                          "message": "\u001b[31mTest timeout of 30000ms exceeded while running \"beforeEach\" hook.\u001b[39m\n\n  33 |\n  34 | test.describe('voters and the cycle facet (sites#355)', () => {\n> 35 |   test.beforeEach(async ({ request }) => {\n     |        ^\n  36 |     await skipIfPremiumGated(request, '/voters/');\n  37 |   });\n  38 |\n    at /app/tests/ui/voter-cycles.spec.ts:35:8"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:41.093Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-f07a2--and-voting-history-filters-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voter-cycles.spec.ts",
                        "column": 8,
                        "line": 35
                      }
                    },
                    {
                      "workerIndex": 433,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 19388,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:11.675Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-f07a2--and-voting-history-filters-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-f07a2--and-voting-history-filters-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 490,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:31.750Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-f07a2--and-voting-history-filters-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ec825ded4a6ea67b77e4-8dcb0d388f170a31c159",
              "file": "tests/ui/voter-cycles.spec.ts",
              "line": 39,
              "column": 7
            },
            {
              "title": "without a cycle, the primary filter means any cycle and no cycle is sent",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 505,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.511Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-b6d6a--cycle-and-no-cycle-is-sent-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 524,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 61,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:33.222Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-b6d6a--cycle-and-no-cycle-is-sent-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-b6d6a--cycle-and-no-cycle-is-sent-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 543,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 38,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:33.999Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-b6d6a--cycle-and-no-cycle-is-sent-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ec825ded4a6ea67b77e4-c01c2baeab4bd4c00ab1",
              "file": "tests/ui/voter-cycles.spec.ts",
              "line": 67,
              "column": 7
            },
            {
              "title": "an index without cycle history falls back to all cycles, saying so",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 558,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 33,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.717Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-42022-ack-to-all-cycles-saying-so-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 576,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 57,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.468Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-42022-ack-to-all-cycles-saying-so-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-42022-ack-to-all-cycles-saying-so-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 594,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.249Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-42022-ack-to-all-cycles-saying-so-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ec825ded4a6ea67b77e4-251403d4611ce926f6ff",
              "file": "tests/ui/voter-cycles.spec.ts",
              "line": 76,
              "column": 7
            },
            {
              "title": "the voter detail page lists voting by cycle when the index has it",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 610,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:36.939Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-b6f45-cycle-when-the-index-has-it-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 624,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 52,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.664Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-b6f45-cycle-when-the-index-has-it-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-b6f45-cycle-when-the-index-has-it-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 644,
                      "parallelIndex": 24,
                      "status": "failed",
                      "duration": 25,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voter-cycles.spec.ts:36:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.425Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-voters-and-th-b6f45-cycle-when-the-index-has-it-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ec825ded4a6ea67b77e4-45177bf124f1603697d9",
              "file": "tests/ui/voter-cycles.spec.ts",
              "line": 84,
              "column": 7
            }
          ]
        },
        {
          "title": "homepage voters count in a cycle (sites#355)",
          "file": "tests/ui/voter-cycles.spec.ts",
          "line": 97,
          "column": 6,
          "specs": [
            {
              "title": "shows voters who voted in the cycle",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 657,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 188,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/voter-cycles.spec.ts:108:16",
                        "location": {
                          "file": "/app/tests/ui/voter-cycles.spec.ts",
                          "column": 16,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/voters/count'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m { lifetime\u001b[33m++\u001b[39m\u001b[33m;\u001b[39m \u001b[36mreturn\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { count\u001b[33m:\u001b[39m \u001b[35m196000000\u001b[39m } })\u001b[33m;\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 107 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/graphql'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m counts(\u001b[35m4200000\u001b[39m\u001b[33m,\u001b[39m [\u001b[32m'blocks'\u001b[39m]) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'4,200,000'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters + .ei-count-scope'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m     expect(lifetime)\u001b[33m.\u001b[39mtoBe(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voter-cycles.spec.ts",
                            "column": 16,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  106 |     await page.route('**/api/voters/count', route => { lifetime++; return route.fulfill({ json: { count: 196000000 } }); });\n  107 |     await page.route('**/api/graphql', route => route.fulfill({ json: counts(4200000, ['blocks']) }));\n> 108 |     await page.goto('/?cycle=2024');\n      |                ^\n  109 |     await expect(page.locator('#count-voters')).toHaveText('4,200,000', { timeout: 15000 });\n  110 |     await expect(page.locator('#count-voters + .ei-count-scope')).toHaveCount(0);\n  111 |     expect(lifetime).toBe(0);\n    at /app/tests/ui/voter-cycles.spec.ts:108:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:39.046Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-ef75e-ters-who-voted-in-the-cycle-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-ef75e-ters-who-voted-in-the-cycle-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voter-cycles.spec.ts",
                        "column": 16,
                        "line": 108
                      }
                    },
                    {
                      "workerIndex": 678,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 310,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/voter-cycles.spec.ts:108:16",
                        "location": {
                          "file": "/app/tests/ui/voter-cycles.spec.ts",
                          "column": 16,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/voters/count'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m { lifetime\u001b[33m++\u001b[39m\u001b[33m;\u001b[39m \u001b[36mreturn\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { count\u001b[33m:\u001b[39m \u001b[35m196000000\u001b[39m } })\u001b[33m;\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 107 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/graphql'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m counts(\u001b[35m4200000\u001b[39m\u001b[33m,\u001b[39m [\u001b[32m'blocks'\u001b[39m]) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'4,200,000'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters + .ei-count-scope'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m     expect(lifetime)\u001b[33m.\u001b[39mtoBe(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voter-cycles.spec.ts",
                            "column": 16,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  106 |     await page.route('**/api/voters/count', route => { lifetime++; return route.fulfill({ json: { count: 196000000 } }); });\n  107 |     await page.route('**/api/graphql', route => route.fulfill({ json: counts(4200000, ['blocks']) }));\n> 108 |     await page.goto('/?cycle=2024');\n      |                ^\n  109 |     await expect(page.locator('#count-voters')).toHaveText('4,200,000', { timeout: 15000 });\n  110 |     await expect(page.locator('#count-voters + .ei-count-scope')).toHaveCount(0);\n  111 |     expect(lifetime).toBe(0);\n    at /app/tests/ui/voter-cycles.spec.ts:108:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:40.053Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-ef75e-ters-who-voted-in-the-cycle-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-ef75e-ters-who-voted-in-the-cycle-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-ef75e-ters-who-voted-in-the-cycle-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-ef75e-ters-who-voted-in-the-cycle-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voter-cycles.spec.ts",
                        "column": 16,
                        "line": 108
                      }
                    },
                    {
                      "workerIndex": 707,
                      "parallelIndex": 23,
                      "status": "failed",
                      "duration": 205,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/voter-cycles.spec.ts:108:16",
                        "location": {
                          "file": "/app/tests/ui/voter-cycles.spec.ts",
                          "column": 16,
                          "line": 108
                        },
                        "snippet": "\u001b[0m \u001b[90m 106 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/voters/count'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m { lifetime\u001b[33m++\u001b[39m\u001b[33m;\u001b[39m \u001b[36mreturn\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { count\u001b[33m:\u001b[39m \u001b[35m196000000\u001b[39m } })\u001b[33m;\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 107 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/graphql'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m counts(\u001b[35m4200000\u001b[39m\u001b[33m,\u001b[39m [\u001b[32m'blocks'\u001b[39m]) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 108 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 109 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'4,200,000'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 110 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters + .ei-count-scope'\u001b[39m))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 111 |\u001b[39m     expect(lifetime)\u001b[33m.\u001b[39mtoBe(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voter-cycles.spec.ts",
                            "column": 16,
                            "line": 108
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  106 |     await page.route('**/api/voters/count', route => { lifetime++; return route.fulfill({ json: { count: 196000000 } }); });\n  107 |     await page.route('**/api/graphql', route => route.fulfill({ json: counts(4200000, ['blocks']) }));\n> 108 |     await page.goto('/?cycle=2024');\n      |                ^\n  109 |     await expect(page.locator('#count-voters')).toHaveText('4,200,000', { timeout: 15000 });\n  110 |     await expect(page.locator('#count-voters + .ei-count-scope')).toHaveCount(0);\n  111 |     expect(lifetime).toBe(0);\n    at /app/tests/ui/voter-cycles.spec.ts:108:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:41.193Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-ef75e-ters-who-voted-in-the-cycle-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-ef75e-ters-who-voted-in-the-cycle-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voter-cycles.spec.ts",
                        "column": 16,
                        "line": 108
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ec825ded4a6ea67b77e4-460240d59590ab4bf6b9",
              "file": "tests/ui/voter-cycles.spec.ts",
              "line": 104,
              "column": 7
            },
            {
              "title": "before the voters index has cycles: the all-cycles total, labelled",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 726,
                      "parallelIndex": 20,
                      "status": "failed",
                      "duration": 182,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/voter-cycles.spec.ts:117:16",
                        "location": {
                          "file": "/app/tests/ui/voter-cycles.spec.ts",
                          "column": 16,
                          "line": 117
                        },
                        "snippet": "\u001b[0m \u001b[90m 115 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/voters/count'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { count\u001b[33m:\u001b[39m \u001b[35m196000000\u001b[39m } }))\u001b[33m;\u001b[39m\n \u001b[90m 116 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/graphql'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m counts(\u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m [\u001b[32m'blocks'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'voters'\u001b[39m]) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 117 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 118 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'196,000,000'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 119 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters + .ei-count-scope'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m' (all cycles)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 120 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voter-cycles.spec.ts",
                            "column": 16,
                            "line": 117
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  115 |     await page.route('**/api/voters/count', route => route.fulfill({ json: { count: 196000000 } }));\n  116 |     await page.route('**/api/graphql', route => route.fulfill({ json: counts(null, ['blocks', 'voters']) }));\n> 117 |     await page.goto('/?cycle=2024');\n      |                ^\n  118 |     await expect(page.locator('#count-voters')).toHaveText('196,000,000', { timeout: 15000 });\n  119 |     await expect(page.locator('#count-voters + .ei-count-scope')).toHaveText(' (all cycles)');\n  120 |   });\n    at /app/tests/ui/voter-cycles.spec.ts:117:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:42.190Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-d30dd-e-all-cycles-total-labelled-ui/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-d30dd-e-all-cycles-total-labelled-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voter-cycles.spec.ts",
                        "column": 16,
                        "line": 117
                      }
                    },
                    {
                      "workerIndex": 747,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 275,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/voter-cycles.spec.ts:117:16",
                        "location": {
                          "file": "/app/tests/ui/voter-cycles.spec.ts",
                          "column": 16,
                          "line": 117
                        },
                        "snippet": "\u001b[0m \u001b[90m 115 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/voters/count'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { count\u001b[33m:\u001b[39m \u001b[35m196000000\u001b[39m } }))\u001b[33m;\u001b[39m\n \u001b[90m 116 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/graphql'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m counts(\u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m [\u001b[32m'blocks'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'voters'\u001b[39m]) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 117 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 118 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'196,000,000'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 119 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters + .ei-count-scope'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m' (all cycles)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 120 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voter-cycles.spec.ts",
                            "column": 16,
                            "line": 117
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  115 |     await page.route('**/api/voters/count', route => route.fulfill({ json: { count: 196000000 } }));\n  116 |     await page.route('**/api/graphql', route => route.fulfill({ json: counts(null, ['blocks', 'voters']) }));\n> 117 |     await page.goto('/?cycle=2024');\n      |                ^\n  118 |     await expect(page.locator('#count-voters')).toHaveText('196,000,000', { timeout: 15000 });\n  119 |     await expect(page.locator('#count-voters + .ei-count-scope')).toHaveText(' (all cycles)');\n  120 |   });\n    at /app/tests/ui/voter-cycles.spec.ts:117:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:43.128Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-d30dd-e-all-cycles-total-labelled-ui-retry1/test-failed-1.png"
                        },
                        {
                          "name": "video",
                          "contentType": "video/webm",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-d30dd-e-all-cycles-total-labelled-ui-retry1/video.webm"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-d30dd-e-all-cycles-total-labelled-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-d30dd-e-all-cycles-total-labelled-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voter-cycles.spec.ts",
                        "column": 16,
                        "line": 117
                      }
                    },
                    {
                      "workerIndex": 767,
                      "parallelIndex": 3,
                      "status": "failed",
                      "duration": 205,
                      "error": {
                        "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n",
                        "stack": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n    at /app/tests/ui/voter-cycles.spec.ts:117:16",
                        "location": {
                          "file": "/app/tests/ui/voter-cycles.spec.ts",
                          "column": 16,
                          "line": 117
                        },
                        "snippet": "\u001b[0m \u001b[90m 115 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/voters/count'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m { count\u001b[33m:\u001b[39m \u001b[35m196000000\u001b[39m } }))\u001b[33m;\u001b[39m\n \u001b[90m 116 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mroute(\u001b[32m'**/api/graphql'\u001b[39m\u001b[33m,\u001b[39m route \u001b[33m=>\u001b[39m route\u001b[33m.\u001b[39mfulfill({ json\u001b[33m:\u001b[39m counts(\u001b[36mnull\u001b[39m\u001b[33m,\u001b[39m [\u001b[32m'blocks'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'voters'\u001b[39m]) }))\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 117 |\u001b[39m     \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgoto(\u001b[32m'/?cycle=2024'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m     |\u001b[39m                \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 118 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m'196,000,000'\u001b[39m\u001b[33m,\u001b[39m { timeout\u001b[33m:\u001b[39m \u001b[35m15000\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 119 |\u001b[39m     \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'#count-voters + .ei-count-scope'\u001b[39m))\u001b[33m.\u001b[39mtoHaveText(\u001b[32m' (all cycles)'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 120 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voter-cycles.spec.ts",
                            "column": 16,
                            "line": 117
                          },
                          "message": "Error: page.goto: net::ERR_CONNECTION_REFUSED at http://10.1.105.22/?cycle=2024\nCall log:\n\u001b[2m  - navigating to \"http://10.1.105.22/?cycle=2024\", waiting until \"load\"\u001b[22m\n\n\n  115 |     await page.route('**/api/voters/count', route => route.fulfill({ json: { count: 196000000 } }));\n  116 |     await page.route('**/api/graphql', route => route.fulfill({ json: counts(null, ['blocks', 'voters']) }));\n> 117 |     await page.goto('/?cycle=2024');\n      |                ^\n  118 |     await expect(page.locator('#count-voters')).toHaveText('196,000,000', { timeout: 15000 });\n  119 |     await expect(page.locator('#count-voters + .ei-count-scope')).toHaveText(' (all cycles)');\n  120 |   });\n    at /app/tests/ui/voter-cycles.spec.ts:117:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:44.178Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-d30dd-e-all-cycles-total-labelled-ui-retry2/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voter-cycles-homepage-vote-d30dd-e-all-cycles-total-labelled-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voter-cycles.spec.ts",
                        "column": 16,
                        "line": 117
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "ec825ded4a6ea67b77e4-c806f2648f3d7ab76d1b",
              "file": "tests/ui/voter-cycles.spec.ts",
              "line": 114,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/voters-count.spec.ts",
      "file": "tests/ui/voters-count.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "/api/voters/count",
          "file": "tests/ui/voters-count.spec.ts",
          "line": 25,
          "column": 6,
          "specs": [
            {
              "title": "a query string never changes the total",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 352,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 11244,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:27:24",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 29,
                          "line": 19
                        },
                        "snippet": "\u001b[0m \u001b[90m 17 |\u001b[39m\n \u001b[90m 18 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m total(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m query \u001b[33m=\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m{ status\u001b[33m:\u001b[39m number\u001b[33m;\u001b[39m count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/api/voters/count${query}`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m) \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m res\u001b[33m.\u001b[39mstatus() }\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson() \u001b[36mas\u001b[39m { count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m   \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m count\u001b[33m:\u001b[39m body\u001b[33m.\u001b[39mcount }\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 29,
                            "line": 19
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  17 |\n  18 | async function total(request: APIRequestContext, query = ''): Promise<{ status: number; count?: number }> {\n> 19 |   const res = await request.get(`/api/voters/count${query}`, { maxRedirects: 0 });\n     |                             ^\n  20 |   if (res.status() !== 200) return { status: res.status() };\n  21 |   const body = await res.json() as { count?: number };\n  22 |   return { status: 200, count: body.count };\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:27:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:03:49.715Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-50cc7-ing-never-changes-the-total-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 29,
                        "line": 19
                      }
                    },
                    {
                      "workerIndex": 359,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 63,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:27:24",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 29,
                          "line": 19
                        },
                        "snippet": "\u001b[0m \u001b[90m 17 |\u001b[39m\n \u001b[90m 18 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m total(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m query \u001b[33m=\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m{ status\u001b[33m:\u001b[39m number\u001b[33m;\u001b[39m count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/api/voters/count${query}`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m) \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m res\u001b[33m.\u001b[39mstatus() }\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson() \u001b[36mas\u001b[39m { count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m   \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m count\u001b[33m:\u001b[39m body\u001b[33m.\u001b[39mcount }\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 29,
                            "line": 19
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  17 |\n  18 | async function total(request: APIRequestContext, query = ''): Promise<{ status: number; count?: number }> {\n> 19 |   const res = await request.get(`/api/voters/count${query}`, { maxRedirects: 0 });\n     |                             ^\n  20 |   if (res.status() !== 200) return { status: res.status() };\n  21 |   const body = await res.json() as { count?: number };\n  22 |   return { status: 200, count: body.count };\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:27:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:01.518Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-50cc7-ing-never-changes-the-total-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-50cc7-ing-never-changes-the-total-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 29,
                        "line": 19
                      }
                    },
                    {
                      "workerIndex": 366,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:27:24",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 29,
                          "line": 19
                        },
                        "snippet": "\u001b[0m \u001b[90m 17 |\u001b[39m\n \u001b[90m 18 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m total(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m query \u001b[33m=\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m{ status\u001b[33m:\u001b[39m number\u001b[33m;\u001b[39m count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/api/voters/count${query}`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m) \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m res\u001b[33m.\u001b[39mstatus() }\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson() \u001b[36mas\u001b[39m { count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m   \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m count\u001b[33m:\u001b[39m body\u001b[33m.\u001b[39mcount }\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 29,
                            "line": 19
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  17 |\n  18 | async function total(request: APIRequestContext, query = ''): Promise<{ status: number; count?: number }> {\n> 19 |   const res = await request.get(`/api/voters/count${query}`, { maxRedirects: 0 });\n     |                             ^\n  20 |   if (res.status() !== 200) return { status: res.status() };\n  21 |   const body = await res.json() as { count?: number };\n  22 |   return { status: 200, count: body.count };\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:27:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:02.269Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-50cc7-ing-never-changes-the-total-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 29,
                        "line": 19
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "391bc17444920081e144-8dd507dd39f55709d815",
              "file": "tests/ui/voters-count.spec.ts",
              "line": 26,
              "column": 7
            },
            {
              "title": "a GET body never changes the total",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 371,
                      "parallelIndex": 25,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:37:24",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 29,
                          "line": 19
                        },
                        "snippet": "\u001b[0m \u001b[90m 17 |\u001b[39m\n \u001b[90m 18 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m total(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m query \u001b[33m=\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m{ status\u001b[33m:\u001b[39m number\u001b[33m;\u001b[39m count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/api/voters/count${query}`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m) \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m res\u001b[33m.\u001b[39mstatus() }\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson() \u001b[36mas\u001b[39m { count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m   \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m count\u001b[33m:\u001b[39m body\u001b[33m.\u001b[39mcount }\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 29,
                            "line": 19
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  17 |\n  18 | async function total(request: APIRequestContext, query = ''): Promise<{ status: number; count?: number }> {\n> 19 |   const res = await request.get(`/api/voters/count${query}`, { maxRedirects: 0 });\n     |                             ^\n  20 |   if (res.status() !== 200) return { status: res.status() };\n  21 |   const body = await res.json() as { count?: number };\n  22 |   return { status: 200, count: body.count };\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:37:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:02.927Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-32021-ody-never-changes-the-total-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 29,
                        "line": 19
                      }
                    },
                    {
                      "workerIndex": 378,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 50,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:37:24",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 29,
                          "line": 19
                        },
                        "snippet": "\u001b[0m \u001b[90m 17 |\u001b[39m\n \u001b[90m 18 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m total(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m query \u001b[33m=\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m{ status\u001b[33m:\u001b[39m number\u001b[33m;\u001b[39m count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/api/voters/count${query}`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m) \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m res\u001b[33m.\u001b[39mstatus() }\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson() \u001b[36mas\u001b[39m { count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m   \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m count\u001b[33m:\u001b[39m body\u001b[33m.\u001b[39mcount }\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 29,
                            "line": 19
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  17 |\n  18 | async function total(request: APIRequestContext, query = ''): Promise<{ status: number; count?: number }> {\n> 19 |   const res = await request.get(`/api/voters/count${query}`, { maxRedirects: 0 });\n     |                             ^\n  20 |   if (res.status() !== 200) return { status: res.status() };\n  21 |   const body = await res.json() as { count?: number };\n  22 |   return { status: 200, count: body.count };\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:37:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:03.541Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-32021-ody-never-changes-the-total-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-32021-ody-never-changes-the-total-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 29,
                        "line": 19
                      }
                    },
                    {
                      "workerIndex": 387,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:37:24",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 29,
                          "line": 19
                        },
                        "snippet": "\u001b[0m \u001b[90m 17 |\u001b[39m\n \u001b[90m 18 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m total(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m query \u001b[33m=\u001b[39m \u001b[32m''\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m{ status\u001b[33m:\u001b[39m number\u001b[33m;\u001b[39m count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(\u001b[32m`/api/voters/count${query}`\u001b[39m\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m!==\u001b[39m \u001b[35m200\u001b[39m) \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m res\u001b[33m.\u001b[39mstatus() }\u001b[33m;\u001b[39m\n \u001b[90m 21 |\u001b[39m   \u001b[36mconst\u001b[39m body \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m res\u001b[33m.\u001b[39mjson() \u001b[36mas\u001b[39m { count\u001b[33m?\u001b[39m\u001b[33m:\u001b[39m number }\u001b[33m;\u001b[39m\n \u001b[90m 22 |\u001b[39m   \u001b[36mreturn\u001b[39m { status\u001b[33m:\u001b[39m \u001b[35m200\u001b[39m\u001b[33m,\u001b[39m count\u001b[33m:\u001b[39m body\u001b[33m.\u001b[39mcount }\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 29,
                            "line": 19
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  17 |\n  18 | async function total(request: APIRequestContext, query = ''): Promise<{ status: number; count?: number }> {\n> 19 |   const res = await request.get(`/api/voters/count${query}`, { maxRedirects: 0 });\n     |                             ^\n  20 |   if (res.status() !== 200) return { status: res.status() };\n  21 |   const body = await res.json() as { count?: number };\n  22 |   return { status: 200, count: body.count };\n    at total (/app/tests/ui/voters-count.spec.ts:19:29)\n    at /app/tests/ui/voters-count.spec.ts:37:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:04.239Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-32021-ody-never-changes-the-total-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 29,
                        "line": 19
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "391bc17444920081e144-7901d8e534c127032411",
              "file": "tests/ui/voters-count.spec.ts",
              "line": 36,
              "column": 7
            },
            {
              "title": "only GET is allowed",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 393,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/voters/count?q=state:VT\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - Content-Type: application/json\u001b[22m\n\u001b[2m    - content-length: 33\u001b[22m\n",
                        "stack": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/voters/count?q=state:VT\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - Content-Type: application/json\u001b[22m\n\u001b[2m    - content-length: 33\u001b[22m\n\n    at /app/tests/ui/voters-count.spec.ts:50:33",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 33,
                          "line": 50
                        },
                        "snippet": "\u001b[0m \u001b[90m 48 |\u001b[39m   test(\u001b[32m'only GET is allowed'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 49 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m method \u001b[36mof\u001b[39m [\u001b[32m'POST'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'PUT'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'DELETE'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'PATCH'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 50 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mfetch(\u001b[32m'/api/voters/count?q=state:VT'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 51 |\u001b[39m         method\u001b[33m,\u001b[39m\n \u001b[90m 52 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/json'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 53 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m { term\u001b[33m:\u001b[39m { state\u001b[33m:\u001b[39m \u001b[32m'VT'\u001b[39m } } }\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 33,
                            "line": 50
                          },
                          "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/voters/count?q=state:VT\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - Content-Type: application/json\u001b[22m\n\u001b[2m    - content-length: 33\u001b[22m\n\n\n  48 |   test('only GET is allowed', async ({ request }) => {\n  49 |     for (const method of ['POST', 'PUT', 'DELETE', 'PATCH']) {\n> 50 |       const res = await request.fetch('/api/voters/count?q=state:VT', {\n     |                                 ^\n  51 |         method,\n  52 |         headers: { 'Content-Type': 'application/json' },\n  53 |         data: { query: { term: { state: 'VT' } } },\n    at /app/tests/ui/voters-count.spec.ts:50:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:04.831Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-count-only-GET-is-allowed-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 33,
                        "line": 50
                      }
                    },
                    {
                      "workerIndex": 399,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 59,
                      "error": {
                        "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/voters/count?q=state:VT\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - Content-Type: application/json\u001b[22m\n\u001b[2m    - content-length: 33\u001b[22m\n",
                        "stack": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/voters/count?q=state:VT\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - Content-Type: application/json\u001b[22m\n\u001b[2m    - content-length: 33\u001b[22m\n\n    at /app/tests/ui/voters-count.spec.ts:50:33",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 33,
                          "line": 50
                        },
                        "snippet": "\u001b[0m \u001b[90m 48 |\u001b[39m   test(\u001b[32m'only GET is allowed'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 49 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m method \u001b[36mof\u001b[39m [\u001b[32m'POST'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'PUT'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'DELETE'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'PATCH'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 50 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mfetch(\u001b[32m'/api/voters/count?q=state:VT'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 51 |\u001b[39m         method\u001b[33m,\u001b[39m\n \u001b[90m 52 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/json'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 53 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m { term\u001b[33m:\u001b[39m { state\u001b[33m:\u001b[39m \u001b[32m'VT'\u001b[39m } } }\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 33,
                            "line": 50
                          },
                          "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/voters/count?q=state:VT\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - Content-Type: application/json\u001b[22m\n\u001b[2m    - content-length: 33\u001b[22m\n\n\n  48 |   test('only GET is allowed', async ({ request }) => {\n  49 |     for (const method of ['POST', 'PUT', 'DELETE', 'PATCH']) {\n> 50 |       const res = await request.fetch('/api/voters/count?q=state:VT', {\n     |                                 ^\n  51 |         method,\n  52 |         headers: { 'Content-Type': 'application/json' },\n  53 |         data: { query: { term: { state: 'VT' } } },\n    at /app/tests/ui/voters-count.spec.ts:50:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:05.449Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-count-only-GET-is-allowed-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-count-only-GET-is-allowed-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 33,
                        "line": 50
                      }
                    },
                    {
                      "workerIndex": 409,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/voters/count?q=state:VT\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - Content-Type: application/json\u001b[22m\n\u001b[2m    - content-length: 33\u001b[22m\n",
                        "stack": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/voters/count?q=state:VT\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - Content-Type: application/json\u001b[22m\n\u001b[2m    - content-length: 33\u001b[22m\n\n    at /app/tests/ui/voters-count.spec.ts:50:33",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 33,
                          "line": 50
                        },
                        "snippet": "\u001b[0m \u001b[90m 48 |\u001b[39m   test(\u001b[32m'only GET is allowed'\u001b[39m\u001b[33m,\u001b[39m \u001b[36masync\u001b[39m ({ request }) \u001b[33m=>\u001b[39m {\n \u001b[90m 49 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m method \u001b[36mof\u001b[39m [\u001b[32m'POST'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'PUT'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'DELETE'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'PATCH'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 50 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mfetch(\u001b[32m'/api/voters/count?q=state:VT'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 51 |\u001b[39m         method\u001b[33m,\u001b[39m\n \u001b[90m 52 |\u001b[39m         headers\u001b[33m:\u001b[39m { \u001b[32m'Content-Type'\u001b[39m\u001b[33m:\u001b[39m \u001b[32m'application/json'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 53 |\u001b[39m         data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m { term\u001b[33m:\u001b[39m { state\u001b[33m:\u001b[39m \u001b[32m'VT'\u001b[39m } } }\u001b[33m,\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 33,
                            "line": 50
                          },
                          "message": "Error: apiRequestContext.fetch: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/voters/count?q=state:VT\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - Content-Type: application/json\u001b[22m\n\u001b[2m    - content-length: 33\u001b[22m\n\n\n  48 |   test('only GET is allowed', async ({ request }) => {\n  49 |     for (const method of ['POST', 'PUT', 'DELETE', 'PATCH']) {\n> 50 |       const res = await request.fetch('/api/voters/count?q=state:VT', {\n     |                                 ^\n  51 |         method,\n  52 |         headers: { 'Content-Type': 'application/json' },\n  53 |         data: { query: { term: { state: 'VT' } } },\n    at /app/tests/ui/voters-count.spec.ts:50:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:06.137Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-count-only-GET-is-allowed-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 33,
                        "line": 50
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "391bc17444920081e144-efb2e6e746d9d63f694d",
              "file": "tests/ui/voters-count.spec.ts",
              "line": 48,
              "column": 7
            },
            {
              "title": "other spellings do not reach OpenSearch",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 416,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 30,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/voters-count.spec.ts:62:33",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 33,
                          "line": 62
                        },
                        "snippet": "\u001b[0m \u001b[90m 60 |\u001b[39m     \u001b[90m// Traefik answers 400 for some encoded forms on the front door; nginx answers 404.\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/api/voters/count/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/api/voters/count/?q=state:VT'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/api/voters/count;q=state:VT'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/API/voters/count?q=state:VT'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 62 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 63 |\u001b[39m       expect([\u001b[35m400\u001b[39m\u001b[33m,\u001b[39m \u001b[35m404\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${path}: ${res.status()}`\u001b[39m)\u001b[33m.\u001b[39mtoContain(res\u001b[33m.\u001b[39mstatus())\u001b[33m;\u001b[39m\n \u001b[90m 64 |\u001b[39m     }\n \u001b[90m 65 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 33,
                            "line": 62
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  60 |     // Traefik answers 400 for some encoded forms on the front door; nginx answers 404.\n  61 |     for (const path of ['/api/voters/count/', '/api/voters/count/?q=state:VT', '/api/voters/count;q=state:VT', '/API/voters/count?q=state:VT']) {\n> 62 |       const res = await request.get(path, { maxRedirects: 0 });\n     |                                 ^\n  63 |       expect([400, 404], `${path}: ${res.status()}`).toContain(res.status());\n  64 |     }\n  65 |   });\n    at /app/tests/ui/voters-count.spec.ts:62:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:06.709Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-2fb2f-ngs-do-not-reach-OpenSearch-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 33,
                        "line": 62
                      }
                    },
                    {
                      "workerIndex": 423,
                      "parallelIndex": 19,
                      "status": "timedOut",
                      "duration": 30043,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 33,
                            "line": 62
                          },
                          "message": "Error: apiRequestContext.get: Request context disposed.\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  60 |     // Traefik answers 400 for some encoded forms on the front door; nginx answers 404.\n  61 |     for (const path of ['/api/voters/count/', '/api/voters/count/?q=state:VT', '/api/voters/count;q=state:VT', '/API/voters/count?q=state:VT']) {\n> 62 |       const res = await request.get(path, { maxRedirects: 0 });\n     |                                 ^\n  63 |       expect([400, 404], `${path}: ${res.status()}`).toContain(res.status());\n  64 |     }\n  65 |   });\n    at /app/tests/ui/voters-count.spec.ts:62:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:07.297Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-2fb2f-ngs-do-not-reach-OpenSearch-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-2fb2f-ngs-do-not-reach-OpenSearch-ui-retry1/trace.zip"
                        }
                      ]
                    },
                    {
                      "workerIndex": 634,
                      "parallelIndex": 19,
                      "status": "failed",
                      "duration": 35,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at /app/tests/ui/voters-count.spec.ts:62:33",
                        "location": {
                          "file": "/app/tests/ui/voters-count.spec.ts",
                          "column": 33,
                          "line": 62
                        },
                        "snippet": "\u001b[0m \u001b[90m 60 |\u001b[39m     \u001b[90m// Traefik answers 400 for some encoded forms on the front door; nginx answers 404.\u001b[39m\n \u001b[90m 61 |\u001b[39m     \u001b[36mfor\u001b[39m (\u001b[36mconst\u001b[39m path \u001b[36mof\u001b[39m [\u001b[32m'/api/voters/count/'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/api/voters/count/?q=state:VT'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/api/voters/count;q=state:VT'\u001b[39m\u001b[33m,\u001b[39m \u001b[32m'/API/voters/count?q=state:VT'\u001b[39m]) {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 62 |\u001b[39m       \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                                 \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 63 |\u001b[39m       expect([\u001b[35m400\u001b[39m\u001b[33m,\u001b[39m \u001b[35m404\u001b[39m]\u001b[33m,\u001b[39m \u001b[32m`${path}: ${res.status()}`\u001b[39m)\u001b[33m.\u001b[39mtoContain(res\u001b[33m.\u001b[39mstatus())\u001b[33m;\u001b[39m\n \u001b[90m 64 |\u001b[39m     }\n \u001b[90m 65 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters-count.spec.ts",
                            "column": 33,
                            "line": 62
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/api/voters/count/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n  60 |     // Traefik answers 400 for some encoded forms on the front door; nginx answers 404.\n  61 |     for (const path of ['/api/voters/count/', '/api/voters/count/?q=state:VT', '/api/voters/count;q=state:VT', '/API/voters/count?q=state:VT']) {\n> 62 |       const res = await request.get(path, { maxRedirects: 0 });\n     |                                 ^\n  63 |       expect([400, 404], `${path}: ${res.status()}`).toContain(res.status());\n  64 |     }\n  65 |   });\n    at /app/tests/ui/voters-count.spec.ts:62:33"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.024Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-count--api-voters-c-2fb2f-ngs-do-not-reach-OpenSearch-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters-count.spec.ts",
                        "column": 33,
                        "line": 62
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "391bc17444920081e144-96f2570444023efb3274",
              "file": "tests/ui/voters-count.spec.ts",
              "line": 59,
              "column": 7
            }
          ]
        }
      ]
    },
    {
      "title": "tests/ui/voters.spec.ts",
      "file": "tests/ui/voters.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "voters (premium)",
          "file": "tests/ui/voters.spec.ts",
          "line": 25,
          "column": 6,
          "specs": [
            {
              "title": "the public /api/graphql refuses voter queries",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 375,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:03.166Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-the--f398f-aphql-refuses-voter-queries-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 381,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 65,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:03.820Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-the--f398f-aphql-refuses-voter-queries-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-the--f398f-aphql-refuses-voter-queries-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 388,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:04.574Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-the--f398f-aphql-refuses-voter-queries-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-5353dc9ff6280b8b8ce8",
              "file": "tests/ui/voters.spec.ts",
              "line": 30,
              "column": 7
            },
            {
              "title": "a premium visitor token reads voters through /api/graphql",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 398,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:05.173Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-a-pr-c56cf--voters-through-api-graphql-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 405,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 59,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:05.806Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-a-pr-c56cf--voters-through-api-graphql-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-a-pr-c56cf--voters-through-api-graphql-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 413,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:06.520Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-a-pr-c56cf--voters-through-api-graphql-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-7fde10790fe436f2ce41",
              "file": "tests/ui/voters.spec.ts",
              "line": 55,
              "column": 7
            },
            {
              "title": "/voters/api/graphql answers voter queries and only POST",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 420,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:07.127Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-vote-bc862-voter-queries-and-only-POST-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 430,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 19765,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:07.724Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-vote-bc862-voter-queries-and-only-POST-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-vote-bc862-voter-queries-and-only-POST-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 443,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 21,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:28.041Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-vote-bc862-voter-queries-and-only-POST-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-804985811ed788cbb4b3",
              "file": "tests/ui/voters.spec.ts",
              "line": 63,
              "column": 7
            },
            {
              "title": "browse lists the most active voters and links to detail pages",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 449,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 20,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:28.651Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-brow-b8f67-s-and-links-to-detail-pages-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 456,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 50,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:29.233Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-brow-b8f67-s-and-links-to-detail-pages-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-brow-b8f67-s-and-links-to-detail-pages-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 463,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:29.862Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-brow-b8f67-s-and-links-to-detail-pages-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-0c1aedbfd096b779cf2a",
              "file": "tests/ui/voters.spec.ts",
              "line": 75,
              "column": 7
            },
            {
              "title": "search needs every term: name plus city",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 469,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 20,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:30.461Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-search-needs-every-term-name-plus-city-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 479,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 59,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:31.059Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-search-needs-every-term-name-plus-city-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-search-needs-every-term-name-plus-city-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 492,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:31.809Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-search-needs-every-term-name-plus-city-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-d68c8209b5444194b927",
              "file": "tests/ui/voters.spec.ts",
              "line": 93,
              "column": 7
            },
            {
              "title": "state filter narrows the list and scopes the county and district dropdowns",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 507,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:32.571Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-stat-66ee5-unty-and-district-dropdowns-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 526,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 63,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:33.319Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-stat-66ee5-unty-and-district-dropdowns-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-stat-66ee5-unty-and-district-dropdowns-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 546,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:34.071Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-stat-66ee5-unty-and-district-dropdowns-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-715d172cd99b39041bec",
              "file": "tests/ui/voters.spec.ts",
              "line": 103,
              "column": 7
            },
            {
              "title": "filters combine, count matches and survive a reload",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 563,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:34.804Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-filt-1ca12-atches-and-survive-a-reload-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 580,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 80,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:35.556Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-filt-1ca12-atches-and-survive-a-reload-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-filt-1ca12-atches-and-survive-a-reload-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 599,
                      "parallelIndex": 22,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:36.362Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-filt-1ca12-atches-and-survive-a-reload-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-135d5a7d039193b89e35",
              "file": "tests/ui/voters.spec.ts",
              "line": 115,
              "column": 7
            },
            {
              "title": "race and Civitech score filters (persuadable, high-turnout Latinx voters in Miami-Dade)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 614,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 28,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:37.061Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-race-5358f-atinx-voters-in-Miami-Dade--ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 627,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 67,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:37.789Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-race-5358f-atinx-voters-in-Miami-Dade--ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-race-5358f-atinx-voters-in-Miami-Dade--ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 647,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 23,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:38.561Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-race-5358f-atinx-voters-in-Miami-Dade--ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-8448f6ea1dd523d04da6",
              "file": "tests/ui/voters.spec.ts",
              "line": 131,
              "column": 7
            },
            {
              "title": "every Districts row links; legislative districts open the filtered voters list",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 662,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:39.219Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-ever-c7b29-en-the-filtered-voters-list-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 674,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 68,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:39.965Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-ever-c7b29-en-the-filtered-voters-list-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-ever-c7b29-en-the-filtered-voters-list-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 695,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:40.775Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-ever-c7b29-en-the-filtered-voters-list-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-73036fbfee8d2c5e0709",
              "file": "tests/ui/voters.spec.ts",
              "line": 140,
              "column": 7
            },
            {
              "title": "an unknown voter id renders Not Found",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 715,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:41.497Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-an-unknown-voter-id-renders-Not-Found-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 727,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 65,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:42.205Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-an-unknown-voter-id-renders-Not-Found-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-an-unknown-voter-id-renders-Not-Found-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    },
                    {
                      "workerIndex": 740,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n",
                        "stack": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23",
                        "location": {
                          "file": "/app/tests/ui/voters.spec.ts",
                          "column": 29,
                          "line": 16
                        },
                        "snippet": "\u001b[0m \u001b[90m 14 |\u001b[39m \u001b[90m/** The CI test pod proxies to the production API, which serves voters only after the release. */\u001b[39m\n \u001b[90m 15 |\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m apiServesVoters(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 16 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39mpost(\u001b[32m'/api/graphql'\u001b[39m\u001b[33m,\u001b[39m {\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 17 |\u001b[39m     data\u001b[33m:\u001b[39m { query\u001b[33m:\u001b[39m \u001b[32m'{ __type(name: \"EntityType\") { enumValues { name } } }'\u001b[39m }\u001b[33m,\u001b[39m\n \u001b[90m 18 |\u001b[39m     headers\u001b[33m:\u001b[39m visitorHeaders()\u001b[33m,\u001b[39m\n \u001b[90m 19 |\u001b[39m   })\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/voters.spec.ts",
                            "column": 29,
                            "line": 16
                          },
                          "message": "Error: apiRequestContext.post: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → POST http://10.1.105.22/api/graphql\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\u001b[2m    - content-type: application/json\u001b[22m\n\u001b[2m    - content-length: 68\u001b[22m\n\n\n  14 | /** The CI test pod proxies to the production API, which serves voters only after the release. */\n  15 | async function apiServesVoters(request: APIRequestContext): Promise<boolean> {\n> 16 |   const res = await request.post('/api/graphql', {\n     |                             ^\n  17 |     data: { query: '{ __type(name: \"EntityType\") { enumValues { name } } }' },\n  18 |     headers: visitorHeaders(),\n  19 |   });\n    at apiServesVoters (/app/tests/ui/voters.spec.ts:16:29)\n    at /app/tests/ui/voters.spec.ts:27:23"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:42.950Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voters-premium-an-unknown-voter-id-renders-Not-Found-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/voters.spec.ts",
                        "column": 29,
                        "line": 16
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-e0441edf222b4f45ecb0",
              "file": "tests/ui/voters.spec.ts",
              "line": 176,
              "column": 7
            }
          ]
        },
        {
          "title": "voter Location card (mocked)",
          "file": "tests/ui/voters.spec.ts",
          "line": 183,
          "column": 6,
          "specs": [
            {
              "title": "State, Place, Postal code and County link their pages plus the filtered voters list; Overview and Districts drop them",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 758,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:43.597Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voter-Location-card-bd726-iew-and-Districts-drop-them-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 771,
                      "parallelIndex": 17,
                      "status": "failed",
                      "duration": 97,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:44.346Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voter-Location-card-bd726-iew-and-Districts-drop-them-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voter-Location-card-bd726-iew-and-Districts-drop-them-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 784,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:45.120Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voter-Location-card-bd726-iew-and-Districts-drop-them-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-9ec004703b65c8d29915",
              "file": "tests/ui/voters.spec.ts",
              "line": 194,
              "column": 7
            },
            {
              "title": "without graph matches (or a failed lookup) each value opens the filtered voters list",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "ui",
                  "projectName": "ui",
                  "results": [
                    {
                      "workerIndex": 799,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 29,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-10-25T21:04:45.820Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voter-Location-card-6c347-ns-the-filtered-voters-list-ui/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 814,
                      "parallelIndex": 14,
                      "status": "failed",
                      "duration": 65,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-10-25T21:04:46.502Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voter-Location-card-6c347-ns-the-filtered-voters-list-ui-retry1/error-context.md"
                        },
                        {
                          "name": "trace",
                          "contentType": "application/zip",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voter-Location-card-6c347-ns-the-filtered-voters-list-ui-retry1/trace.zip"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    },
                    {
                      "workerIndex": 825,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 26,
                      "error": {
                        "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n",
                        "stack": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29",
                        "location": {
                          "file": "/app/tests/ui/helpers.ts",
                          "column": 29,
                          "line": 17
                        },
                        "snippet": "   at tests/ui/helpers.ts:17\n\n\u001b[0m \u001b[90m 15 |\u001b[39m \u001b[90m */\u001b[39m\n \u001b[90m 16 |\u001b[39m \u001b[36mexport\u001b[39m \u001b[36masync\u001b[39m \u001b[36mfunction\u001b[39m premiumGated(request\u001b[33m:\u001b[39m \u001b[33mAPIRequestContext\u001b[39m\u001b[33m,\u001b[39m path\u001b[33m:\u001b[39m string)\u001b[33m:\u001b[39m \u001b[33mPromise\u001b[39m\u001b[33m<\u001b[39m\u001b[33mboolean\u001b[39m\u001b[33m>\u001b[39m {\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 17 |\u001b[39m   \u001b[36mconst\u001b[39m res \u001b[33m=\u001b[39m \u001b[36mawait\u001b[39m request\u001b[33m.\u001b[39m\u001b[36mget\u001b[39m(path\u001b[33m,\u001b[39m { maxRedirects\u001b[33m:\u001b[39m \u001b[35m0\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m    |\u001b[39m                             \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 18 |\u001b[39m   \u001b[36mif\u001b[39m (res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m403\u001b[39m) \u001b[36mreturn\u001b[39m \u001b[36mtrue\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 19 |\u001b[39m   \u001b[36mconst\u001b[39m location \u001b[33m=\u001b[39m res\u001b[33m.\u001b[39mheaders()[\u001b[32m'location'\u001b[39m] \u001b[33m?\u001b[39m\u001b[33m?\u001b[39m \u001b[32m''\u001b[39m\u001b[33m;\u001b[39m\n \u001b[90m 20 |\u001b[39m   \u001b[36mreturn\u001b[39m res\u001b[33m.\u001b[39mstatus() \u001b[33m===\u001b[39m \u001b[35m302\u001b[39m \u001b[33m&&\u001b[39m \u001b[35m/\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//\u001b[39m\u001b[33m.\u001b[39mtest(location)\u001b[33m;\u001b[39m\u001b[0m"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/app/tests/ui/helpers.ts",
                            "column": 29,
                            "line": 17
                          },
                          "message": "Error: apiRequestContext.get: connect ECONNREFUSED 10.1.105.22:80\nCall log:\n\u001b[2m  - → GET http://10.1.105.22/voters/\u001b[22m\n\u001b[2m    - user-agent: Playwright/1.64.1 (x64; ubuntu 22.04) node/20.9 CI/1\u001b[22m\n\u001b[2m    - accept: */*\u001b[22m\n\u001b[2m    - accept-encoding: gzip,deflate,br\u001b[22m\n\n\n   at tests/ui/helpers.ts:17\n\n  15 |  */\n  16 | export async function premiumGated(request: APIRequestContext, path: string): Promise<boolean> {\n> 17 |   const res = await request.get(path, { maxRedirects: 0 });\n     |                             ^\n  18 |   if (res.status() === 403) return true;\n  19 |   const location = res.headers()['location'] ?? '';\n  20 |   return res.status() === 302 && /\\/application\\/o\\/authorize\\/|outpost\\.goauthentik\\.io|\\/signin\\//.test(location);\n    at premiumGated (/app/tests/ui/helpers.ts:17:29)\n    at skipIfPremiumGated (/app/tests/ui/helpers.ts:25:19)\n    at /app/tests/ui/voters.spec.ts:185:29"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 2,
                      "startTime": "2026-10-25T21:04:47.212Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/workspace/artifacts/cac5904/us/test-output/voters-voter-Location-card-6c347-ns-the-filtered-voters-list-ui-retry2/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/app/tests/ui/helpers.ts",
                        "column": 29,
                        "line": 17
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "6970ccac81a50c81e377-9e2248c87e42f3e8058a",
              "file": "tests/ui/voters.spec.ts",
              "line": 225,
              "column": 7
            }
          ]
        }
      ]
    }
  ],
  "errors": [],
  "stats": {
    "startTime": "2026-10-25T21:01:21.381Z",
    "duration": 254125.61899999998,
    "expected": 0,
    "skipped": 16,
    "unexpected": 379,
    "flaky": 0
  }
}