{
  "config": {
    "argv": [
      "/opt/hostedtoolcache/node/20.20.2/x64/bin/node",
      "/home/runner/work/dr-card-ui/dr-card-ui/node_modules/.bin/playwright",
      "test",
      "tests/e2e/test-gate.spec.ts"
    ],
    "configFile": "/home/runner/work/dr-card-ui/dr-card-ui/playwright.config.ts",
    "rootDir": "/home/runner/work/dr-card-ui/dr-card-ui/tests/e2e",
    "failOnFlakyTests": false,
    "forbidOnly": true,
    "fullyParallel": true,
    "globalSetup": null,
    "globalTeardown": null,
    "globalTimeout": 0,
    "grep": {},
    "grepInvert": null,
    "maxFailures": 0,
    "metadata": {
      "ci": {
        "commitHref": "https://github.com/dangjingtao/dr-card-ui/commit/ba81d0f98e79f09d51b497be62f729499c9841fe",
        "commitHash": "ba81d0f98e79f09d51b497be62f729499c9841fe",
        "prHref": "https://github.com/dangjingtao/dr-card-ui/pull/187",
        "prTitle": "fix(oss): #171 非生产复用已验证 OSS 凭据",
        "prBaseHash": "b4a96d6cd4b8a547c8d7f4adac945b319e4a26f3",
        "buildHref": "https://github.com/dangjingtao/dr-card-ui/actions/runs/38033665689"
      },
      "gitCommit": {
        "shortHash": "ba81d0f",
        "hash": "ba81d0f98e79f09d51b497be62f729499c9841fe",
        "subject": "Merge ac570065fedae2f788c44623a1487320eb6d59a8 into b4a96d6cd4b8a547c8d7f4adac945b319e4a26f3",
        "body": "Merge ac570065fedae2f788c44623a1487320eb6d59a8 into b4a96d6cd4b8a547c8d7f4adac945b319e4a26f3\n",
        "author": {
          "name": "Tomz Dang",
          "email": "dangjingtao@163.com",
          "time": 1791616391000
        },
        "committer": {
          "name": "GitHub",
          "email": "noreply@github.com",
          "time": 1791616391000
        },
        "branch": "HEAD"
      },
      "gitDiff": "diff --git a/.github/workflows/oss-web-nonprod.yml b/.github/workflows/oss-web-nonprod.yml\nindex 48dc077..d43f0a0 100644\n--- a/.github/workflows/oss-web-nonprod.yml\n+++ b/.github/workflows/oss-web-nonprod.yml\n@@ -79,10 +79,10 @@ jobs:\n     needs: package-check\n     runs-on: ubuntu-latest\n     timeout-minutes: 25\n-    # Repository-level OSS credentials may publish the guarded nonproduction prefixes.\n-    # Environment-level secrets can still override them later for stricter RAM isolation.\n+    # Reuse the one OSS credential set already proven by production upload/readback.\n+    # This workflow itself can only target ui/dev/test and never deletes OSS objects.\n     environment:\n-      name: oss-${{ github.ref_name == 'preview' && 'ui' || github.ref_name }}\n+      name: oss-production\n     env:\n       OSS_REGION: cn-guangzhou\n       OSS_ENDPOINT: https://oss-cn-guangzhou.aliyuncs.com\n@@ -100,8 +100,8 @@ jobs:\n         shell: bash\n         run: |\n           set -euo pipefail\n-          test -n \"$OSS_ACCESS_KEY_ID\" || { echo \"::error::oss-$OSS_WEB_TARGET missing OSS_ACCESS_KEY_ID\"; exit 1; }\n-          test -n \"$OSS_ACCESS_KEY_SECRET\" || { echo \"::error::oss-$OSS_WEB_TARGET missing OSS_ACCESS_KEY_SECRET\"; exit 1; }\n+          test -n \"$OSS_ACCESS_KEY_ID\" || { echo \"::error::shared OSS credential missing OSS_ACCESS_KEY_ID\"; exit 1; }\n+          test -n \"$OSS_ACCESS_KEY_SECRET\" || { echo \"::error::shared OSS credential missing OSS_ACCESS_KEY_SECRET\"; exit 1; }\n           case \"$GITHUB_REF_NAME:$OSS_WEB_TARGET\" in\n             preview:ui|dev:dev|test:test) ;;\n             *) echo \"::error::Wrong branch/target pair\"; exit 1 ;;\ndiff --git a/docs/deploy/oss-web-fixed-nonprod.md b/docs/deploy/oss-web-fixed-nonprod.md\nindex fa2c0a4..fd68c4c 100644\n--- a/docs/deploy/oss-web-fixed-nonprod.md\n+++ b/docs/deploy/oss-web-fixed-nonprod.md\n@@ -21,29 +21,21 @@ Bucket `kbs-sdl`（`cn-guangzhou`）：\n \n ## GitHub 环境准备（必须由仓库/云账号管理员完成）\n \n-**#171 更新**：非生产推送会实际尝试上传；取消 `OSS_WEB_NONPROD_ENABLED` 开关。缺少 OSS 凭据时部署作业明确失败，不能用 CI 打包成功代替真实发布。当前可由 Repository secrets 统一提供 OSS AK；`oss-ui/dev/test` Environment 继续承载环境边界，未来如需更强 RAM 隔离，可用同名 Environment secrets 覆盖。发布脚本不做对象删除。\n+**#171 更新**：非生产推送会实际尝试上传；取消 `OSS_WEB_NONPROD_ENABLED` 开关。OSS 只保留一套已经由生产上传/读回证明有效的 GitHub Environment 凭据，现有名称为 `oss-production`；ui/dev/test 不再复制 AK。环境名是历史命名，不代表非生产工作流可以写 `prod`：代码仍强制 `preview→ui`、`dev→dev`、`test→test`，且不执行 delete。\n \n-首次执行自动部署前，在 GitHub Settings → Environments 创建：\n-\n-- `oss-ui`：只允许 `preview` 分支；\n-- `oss-dev`：只允许 `dev` 分支；\n-- `oss-test`：只允许 `test` 分支。\n-\n-当前可以使用 Repository-level OSS 凭据完成非生产固定目录发布；代码仍强制 `preview→ui`、`dev→dev`、`test→test`，且不执行删除。若后续需要云侧最小权限隔离，再为三个 Environment 配置同名、仅限各自前缀的 RAM 凭据即可，无需改变工作流。\n-\n-| GitHub 参数 | 类型 | 要求 |\n+| GitHub Environment 参数 | 类型 | 要求 |\n | --- | --- | --- |\n-| `OSS_ACCESS_KEY_ID` | Repository 或 Environment Secret | OSS 写/读凭据；Environment 同名值可覆盖仓库级值 |\n-| `OSS_ACCESS_KEY_SECRET` | Repository 或 Environment Secret | 对应密钥，不进入源代码、`VITE_*` 或公开日志 |\n+| `OSS_ACCESS_KEY_ID` | `oss-production` Secret | 已验证可访问 `kbs-sdl` 的 OSS AK |\n+| `OSS_ACCESS_KEY_SECRET` | `oss-production` Secret | 对应密钥，不进入源代码、`VITE_*` 或公开日志 |\n \n-缺少 OSS 凭据时部署作业**明确失败**。测试 API / 邀请 Origin 不再作为静态包上传前置：固定目录可以先落 OSS 并完成人工页面验证，`build-meta.json` 会如实记录 API / Origin 是否配置；真实业务连通性继续在 #171 单独验收。项目原有 `Build` 与 CF 部署工作流继续保留。\n+缺少上述凭据时部署作业**明确失败**。测试 API / 邀请 Origin 不作为静态包上传前置：固定目录可以先落 OSS 并完成人工页面验证，`build-meta.json` 会如实记录 API / Origin 是否配置；真实业务连通性继续在 #171 单独验收。项目原有 `Build` 与 CF 部署工作流继续保留。\n \n ## CI / 发布流程\n \n 工作流 `.github/workflows/oss-web-nonprod.yml`：\n \n 1. PR 上无密钥的包测试分别生成 `ui/dev/test/prod` 四种固定路径构建，逐个校验 JS/CSS 和 Router basename、runtime 模式与 Mock Worker。\n-2. 各非生产分支 push 后，仅构建**对应**的目标，成功才进入受该 GitHub Environment 管理的部署作业。 `prod` 根本不在部署触发列表中。\n+2. 各非生产分支 push 后，仅构建**对应**的目标；上传步骤读取现有 `oss-production` Environment 的已验证 OSS 凭据。`prod` 根本不在此工作流的部署触发列表中。\n 3. 真实部署核对分支 SHA、目标前缀和密钥；如分支有新提交、旧 CI 重跑，拒绝切入口。\n 4. 上传/读回验证每一个文件（包括静态资源）；`build-meta.json` 在最后阶段写入，`index.html` **最后写入**。已有前一版的入口与元数据在更新中断时尽力恢复；无旧版对象则不假装有历史可回滚。\n 5. **不执行 OSS delete / rm**，不改其他环境，不修改 Bucket ACL。旧带哈希资源暂时保留，保护已打开旧 HTML 的用户；后续非生产无引用资源的安全清理须有缓存窗口和真实验证，不能先清空。\n@@ -56,4 +48,4 @@ Bucket `kbs-sdl`（`cn-guangzhou`）：\n - OSS 上原 `h5/releases/`、`_ci-smoke/` 等文件不动，无任何批量删除。\n - UI/Dev 的 Mock Service Worker URL 随 Router basename 解析，Cloudflare 根路径不变；Test 不允许 Mock。\n - 固定入口更新按对象顺序，不是多文件原子事务。若使用 CDN 缓存、灰度回滚、长时在用资源，需按 #171 真人验收记录范围与风险。\n-- 实际账号权限、各环境 Secret、HTTPS/反向代理映射、真实环境访问/JSBridge 属外部前置条件（#80）；缺失即保持待验收，不声称已上生产。\n+- 实际账号权限、共享 OSS Secret、HTTPS/反向代理映射、真实环境访问/JSBridge 属外部前置条件（#80）；缺失即保持待验收，不声称已上生产。\ndiff --git a/scripts/deploy-oss-web-nonprod.mjs b/scripts/deploy-oss-web-nonprod.mjs\nindex d2e2c8e..fa6e76d 100644\n--- a/scripts/deploy-oss-web-nonprod.mjs\n+++ b/scripts/deploy-oss-web-nonprod.mjs\n@@ -1,6 +1,6 @@\n #!/usr/bin/env node\n // #168: deploy only fixed *nonproduction* web prefixes. Never deletes OSS keys.\n-// Uses the existing verified ossutil binary and scoped GitHub Environment keys.\n+// Uses the existing verified ossutil binary and the repository's single verified OSS credential set.\n import { spawnSync } from 'node:child_process'\n import { mkdtempSync, readFileSync, readdirSync, rmSync, mkdirSync } from 'node:fs'\n import { tmpdir } from 'node:os'\n@@ -24,7 +24,7 @@ if (process.env.GITHUB_REF_NAME !== expectedBranch || process.env.GITHUB_EVENT_N\n   throw new Error(`Refusing non-branch or mismatched deployment to ${prefix}`)\n }\n if (!process.env.OSS_ACCESS_KEY_ID || !process.env.OSS_ACCESS_KEY_SECRET) {\n-  throw new Error(`Missing credentials for GitHub Environment oss-${target}; no production fallback is allowed.`)\n+  throw new Error('Missing verified OSS deployment credentials.')\n }\n \n // Refuse late reruns from stale commits, even if a previously queued job starts",
      "actualWorkers": 2
    },
    "preserveOutput": "always",
    "projects": [
      {
        "outputDir": "/home/runner/work/dr-card-ui/dr-card-ui/test-results/artifacts",
        "repeatEach": 1,
        "retries": 1,
        "metadata": {
          "ci": {
            "commitHref": "https://github.com/dangjingtao/dr-card-ui/commit/ba81d0f98e79f09d51b497be62f729499c9841fe",
            "commitHash": "ba81d0f98e79f09d51b497be62f729499c9841fe",
            "prHref": "https://github.com/dangjingtao/dr-card-ui/pull/187",
            "prTitle": "fix(oss): #171 非生产复用已验证 OSS 凭据",
            "prBaseHash": "b4a96d6cd4b8a547c8d7f4adac945b319e4a26f3",
            "buildHref": "https://github.com/dangjingtao/dr-card-ui/actions/runs/38033665689"
          },
          "gitCommit": {
            "shortHash": "ba81d0f",
            "hash": "ba81d0f98e79f09d51b497be62f729499c9841fe",
            "subject": "Merge ac570065fedae2f788c44623a1487320eb6d59a8 into b4a96d6cd4b8a547c8d7f4adac945b319e4a26f3",
            "body": "Merge ac570065fedae2f788c44623a1487320eb6d59a8 into b4a96d6cd4b8a547c8d7f4adac945b319e4a26f3\n",
            "author": {
              "name": "Tomz Dang",
              "email": "dangjingtao@163.com",
              "time": 1791616391000
            },
            "committer": {
              "name": "GitHub",
              "email": "noreply@github.com",
              "time": 1791616391000
            },
            "branch": "HEAD"
          },
          "gitDiff": "diff --git a/.github/workflows/oss-web-nonprod.yml b/.github/workflows/oss-web-nonprod.yml\nindex 48dc077..d43f0a0 100644\n--- a/.github/workflows/oss-web-nonprod.yml\n+++ b/.github/workflows/oss-web-nonprod.yml\n@@ -79,10 +79,10 @@ jobs:\n     needs: package-check\n     runs-on: ubuntu-latest\n     timeout-minutes: 25\n-    # Repository-level OSS credentials may publish the guarded nonproduction prefixes.\n-    # Environment-level secrets can still override them later for stricter RAM isolation.\n+    # Reuse the one OSS credential set already proven by production upload/readback.\n+    # This workflow itself can only target ui/dev/test and never deletes OSS objects.\n     environment:\n-      name: oss-${{ github.ref_name == 'preview' && 'ui' || github.ref_name }}\n+      name: oss-production\n     env:\n       OSS_REGION: cn-guangzhou\n       OSS_ENDPOINT: https://oss-cn-guangzhou.aliyuncs.com\n@@ -100,8 +100,8 @@ jobs:\n         shell: bash\n         run: |\n           set -euo pipefail\n-          test -n \"$OSS_ACCESS_KEY_ID\" || { echo \"::error::oss-$OSS_WEB_TARGET missing OSS_ACCESS_KEY_ID\"; exit 1; }\n-          test -n \"$OSS_ACCESS_KEY_SECRET\" || { echo \"::error::oss-$OSS_WEB_TARGET missing OSS_ACCESS_KEY_SECRET\"; exit 1; }\n+          test -n \"$OSS_ACCESS_KEY_ID\" || { echo \"::error::shared OSS credential missing OSS_ACCESS_KEY_ID\"; exit 1; }\n+          test -n \"$OSS_ACCESS_KEY_SECRET\" || { echo \"::error::shared OSS credential missing OSS_ACCESS_KEY_SECRET\"; exit 1; }\n           case \"$GITHUB_REF_NAME:$OSS_WEB_TARGET\" in\n             preview:ui|dev:dev|test:test) ;;\n             *) echo \"::error::Wrong branch/target pair\"; exit 1 ;;\ndiff --git a/docs/deploy/oss-web-fixed-nonprod.md b/docs/deploy/oss-web-fixed-nonprod.md\nindex fa2c0a4..fd68c4c 100644\n--- a/docs/deploy/oss-web-fixed-nonprod.md\n+++ b/docs/deploy/oss-web-fixed-nonprod.md\n@@ -21,29 +21,21 @@ Bucket `kbs-sdl`（`cn-guangzhou`）：\n \n ## GitHub 环境准备（必须由仓库/云账号管理员完成）\n \n-**#171 更新**：非生产推送会实际尝试上传；取消 `OSS_WEB_NONPROD_ENABLED` 开关。缺少 OSS 凭据时部署作业明确失败，不能用 CI 打包成功代替真实发布。当前可由 Repository secrets 统一提供 OSS AK；`oss-ui/dev/test` Environment 继续承载环境边界，未来如需更强 RAM 隔离，可用同名 Environment secrets 覆盖。发布脚本不做对象删除。\n+**#171 更新**：非生产推送会实际尝试上传；取消 `OSS_WEB_NONPROD_ENABLED` 开关。OSS 只保留一套已经由生产上传/读回证明有效的 GitHub Environment 凭据，现有名称为 `oss-production`；ui/dev/test 不再复制 AK。环境名是历史命名，不代表非生产工作流可以写 `prod`：代码仍强制 `preview→ui`、`dev→dev`、`test→test`，且不执行 delete。\n \n-首次执行自动部署前，在 GitHub Settings → Environments 创建：\n-\n-- `oss-ui`：只允许 `preview` 分支；\n-- `oss-dev`：只允许 `dev` 分支；\n-- `oss-test`：只允许 `test` 分支。\n-\n-当前可以使用 Repository-level OSS 凭据完成非生产固定目录发布；代码仍强制 `preview→ui`、`dev→dev`、`test→test`，且不执行删除。若后续需要云侧最小权限隔离，再为三个 Environment 配置同名、仅限各自前缀的 RAM 凭据即可，无需改变工作流。\n-\n-| GitHub 参数 | 类型 | 要求 |\n+| GitHub Environment 参数 | 类型 | 要求 |\n | --- | --- | --- |\n-| `OSS_ACCESS_KEY_ID` | Repository 或 Environment Secret | OSS 写/读凭据；Environment 同名值可覆盖仓库级值 |\n-| `OSS_ACCESS_KEY_SECRET` | Repository 或 Environment Secret | 对应密钥，不进入源代码、`VITE_*` 或公开日志 |\n+| `OSS_ACCESS_KEY_ID` | `oss-production` Secret | 已验证可访问 `kbs-sdl` 的 OSS AK |\n+| `OSS_ACCESS_KEY_SECRET` | `oss-production` Secret | 对应密钥，不进入源代码、`VITE_*` 或公开日志 |\n \n-缺少 OSS 凭据时部署作业**明确失败**。测试 API / 邀请 Origin 不再作为静态包上传前置：固定目录可以先落 OSS 并完成人工页面验证，`build-meta.json` 会如实记录 API / Origin 是否配置；真实业务连通性继续在 #171 单独验收。项目原有 `Build` 与 CF 部署工作流继续保留。\n+缺少上述凭据时部署作业**明确失败**。测试 API / 邀请 Origin 不作为静态包上传前置：固定目录可以先落 OSS 并完成人工页面验证，`build-meta.json` 会如实记录 API / Origin 是否配置；真实业务连通性继续在 #171 单独验收。项目原有 `Build` 与 CF 部署工作流继续保留。\n \n ## CI / 发布流程\n \n 工作流 `.github/workflows/oss-web-nonprod.yml`：\n \n 1. PR 上无密钥的包测试分别生成 `ui/dev/test/prod` 四种固定路径构建，逐个校验 JS/CSS 和 Router basename、runtime 模式与 Mock Worker。\n-2. 各非生产分支 push 后，仅构建**对应**的目标，成功才进入受该 GitHub Environment 管理的部署作业。 `prod` 根本不在部署触发列表中。\n+2. 各非生产分支 push 后，仅构建**对应**的目标；上传步骤读取现有 `oss-production` Environment 的已验证 OSS 凭据。`prod` 根本不在此工作流的部署触发列表中。\n 3. 真实部署核对分支 SHA、目标前缀和密钥；如分支有新提交、旧 CI 重跑，拒绝切入口。\n 4. 上传/读回验证每一个文件（包括静态资源）；`build-meta.json` 在最后阶段写入，`index.html` **最后写入**。已有前一版的入口与元数据在更新中断时尽力恢复；无旧版对象则不假装有历史可回滚。\n 5. **不执行 OSS delete / rm**，不改其他环境，不修改 Bucket ACL。旧带哈希资源暂时保留，保护已打开旧 HTML 的用户；后续非生产无引用资源的安全清理须有缓存窗口和真实验证，不能先清空。\n@@ -56,4 +48,4 @@ Bucket `kbs-sdl`（`cn-guangzhou`）：\n - OSS 上原 `h5/releases/`、`_ci-smoke/` 等文件不动，无任何批量删除。\n - UI/Dev 的 Mock Service Worker URL 随 Router basename 解析，Cloudflare 根路径不变；Test 不允许 Mock。\n - 固定入口更新按对象顺序，不是多文件原子事务。若使用 CDN 缓存、灰度回滚、长时在用资源，需按 #171 真人验收记录范围与风险。\n-- 实际账号权限、各环境 Secret、HTTPS/反向代理映射、真实环境访问/JSBridge 属外部前置条件（#80）；缺失即保持待验收，不声称已上生产。\n+- 实际账号权限、共享 OSS Secret、HTTPS/反向代理映射、真实环境访问/JSBridge 属外部前置条件（#80）；缺失即保持待验收，不声称已上生产。\ndiff --git a/scripts/deploy-oss-web-nonprod.mjs b/scripts/deploy-oss-web-nonprod.mjs\nindex d2e2c8e..fa6e76d 100644\n--- a/scripts/deploy-oss-web-nonprod.mjs\n+++ b/scripts/deploy-oss-web-nonprod.mjs\n@@ -1,6 +1,6 @@\n #!/usr/bin/env node\n // #168: deploy only fixed *nonproduction* web prefixes. Never deletes OSS keys.\n-// Uses the existing verified ossutil binary and scoped GitHub Environment keys.\n+// Uses the existing verified ossutil binary and the repository's single verified OSS credential set.\n import { spawnSync } from 'node:child_process'\n import { mkdtempSync, readFileSync, readdirSync, rmSync, mkdirSync } from 'node:fs'\n import { tmpdir } from 'node:os'\n@@ -24,7 +24,7 @@ if (process.env.GITHUB_REF_NAME !== expectedBranch || process.env.GITHUB_EVENT_N\n   throw new Error(`Refusing non-branch or mismatched deployment to ${prefix}`)\n }\n if (!process.env.OSS_ACCESS_KEY_ID || !process.env.OSS_ACCESS_KEY_SECRET) {\n-  throw new Error(`Missing credentials for GitHub Environment oss-${target}; no production fallback is allowed.`)\n+  throw new Error('Missing verified OSS deployment credentials.')\n }\n \n // Refuse late reruns from stale commits, even if a previously queued job starts",
          "actualWorkers": 2
        },
        "id": "chromium-mobile",
        "name": "chromium-mobile",
        "testDir": "/home/runner/work/dr-card-ui/dr-card-ui/tests/e2e",
        "testIgnore": [],
        "testMatch": [
          "**/*.@(spec|test).?(c|m)[jt]s?(x)"
        ],
        "timeout": 30000
      }
    ],
    "quiet": false,
    "reporter": [
      [
        "line",
        null
      ],
      [
        "html",
        {
          "outputFolder": "playwright-report",
          "open": "never"
        }
      ],
      [
        "json",
        {
          "outputFile": "test-results/playwright-results.json"
        }
      ]
    ],
    "reportSlowTests": {
      "max": 5,
      "threshold": 300000
    },
    "shard": null,
    "tags": [],
    "updateSnapshots": "missing",
    "updateSourceMethod": "patch",
    "version": "1.63.0",
    "workers": 2,
    "webServer": null
  },
  "suites": [
    {
      "title": "test-gate.spec.ts",
      "file": "test-gate.spec.ts",
      "column": 0,
      "line": 0,
      "specs": [
        {
          "title": "@test-gate build identity matches the production-like test policy",
          "ok": true,
          "tags": [
            "test-gate"
          ],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "chromium-mobile",
              "projectName": "chromium-mobile",
              "results": [
                {
                  "workerIndex": 0,
                  "parallelIndex": 0,
                  "status": "passed",
                  "duration": 55,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T07:14:13.164Z",
                  "annotations": [],
                  "attachments": []
                }
              ],
              "status": "expected"
            }
          ],
          "id": "37c772ca39f4c8e5dd7a-c3b6e0ce5d8c5d8734e5",
          "file": "test-gate.spec.ts",
          "line": 31,
          "column": 1
        },
        {
          "title": "@test-gate browser entry does not start the app router",
          "ok": true,
          "tags": [
            "test-gate"
          ],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "chromium-mobile",
              "projectName": "chromium-mobile",
              "results": [
                {
                  "workerIndex": 1,
                  "parallelIndex": 1,
                  "status": "passed",
                  "duration": 1024,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T07:14:13.119Z",
                  "annotations": [],
                  "attachments": []
                }
              ],
              "status": "expected"
            }
          ],
          "id": "37c772ca39f4c8e5dd7a-8ed37c8041402a2a6b34",
          "file": "test-gate.spec.ts",
          "line": 40,
          "column": 1
        },
        {
          "title": "@test-gate / shows the unsupported-host notice in a browser",
          "ok": true,
          "tags": [
            "test-gate"
          ],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "chromium-mobile",
              "projectName": "chromium-mobile",
              "results": [
                {
                  "workerIndex": 0,
                  "parallelIndex": 0,
                  "status": "passed",
                  "duration": 1036,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T07:14:13.271Z",
                  "annotations": [],
                  "attachments": []
                }
              ],
              "status": "expected"
            }
          ],
          "id": "37c772ca39f4c8e5dd7a-b030d57053896c93a550",
          "file": "test-gate.spec.ts",
          "line": 51,
          "column": 3
        },
        {
          "title": "@test-gate /profile shows the unsupported-host notice in a browser",
          "ok": true,
          "tags": [
            "test-gate"
          ],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "chromium-mobile",
              "projectName": "chromium-mobile",
              "results": [
                {
                  "workerIndex": 0,
                  "parallelIndex": 0,
                  "status": "passed",
                  "duration": 995,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T07:14:14.471Z",
                  "annotations": [],
                  "attachments": []
                }
              ],
              "status": "expected"
            }
          ],
          "id": "37c772ca39f4c8e5dd7a-8605535a2807e17fcccc",
          "file": "test-gate.spec.ts",
          "line": 51,
          "column": 3
        },
        {
          "title": "@test-gate /settings shows the unsupported-host notice in a browser",
          "ok": true,
          "tags": [
            "test-gate"
          ],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "chromium-mobile",
              "projectName": "chromium-mobile",
              "results": [
                {
                  "workerIndex": 1,
                  "parallelIndex": 1,
                  "status": "passed",
                  "duration": 978,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T07:14:14.472Z",
                  "annotations": [],
                  "attachments": []
                }
              ],
              "status": "expected"
            }
          ],
          "id": "37c772ca39f4c8e5dd7a-4a2fdc9884c1725de4f8",
          "file": "test-gate.spec.ts",
          "line": 51,
          "column": 3
        },
        {
          "title": "@test-gate gated browser entry issues no business API request",
          "ok": true,
          "tags": [
            "test-gate"
          ],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "chromium-mobile",
              "projectName": "chromium-mobile",
              "results": [
                {
                  "workerIndex": 1,
                  "parallelIndex": 1,
                  "status": "passed",
                  "duration": 995,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T07:14:15.472Z",
                  "annotations": [],
                  "attachments": []
                }
              ],
              "status": "expected"
            }
          ],
          "id": "37c772ca39f4c8e5dd7a-09f38a2b8ed735e192d8",
          "file": "test-gate.spec.ts",
          "line": 65,
          "column": 1
        },
        {
          "title": "@test-gate injected native host bypasses the notice and starts the app",
          "ok": true,
          "tags": [
            "test-gate"
          ],
          "tests": [
            {
              "timeout": 30000,
              "annotations": [],
              "expectedStatus": "passed",
              "projectId": "chromium-mobile",
              "projectName": "chromium-mobile",
              "results": [
                {
                  "workerIndex": 0,
                  "parallelIndex": 0,
                  "status": "passed",
                  "duration": 1038,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T07:14:15.485Z",
                  "annotations": [],
                  "attachments": []
                }
              ],
              "status": "expected"
            }
          ],
          "id": "37c772ca39f4c8e5dd7a-8caf237c4d42513fff2f",
          "file": "test-gate.spec.ts",
          "line": 80,
          "column": 1
        }
      ]
    }
  ],
  "errors": [],
  "stats": {
    "startTime": "2026-10-10T07:14:12.309Z",
    "duration": 4275.148,
    "expected": 7,
    "skipped": 0,
    "unexpected": 0,
    "flaky": 0
  }
}