{
  "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/8d5457295b42772bd9d619cf66d4c4e2ba460661",
        "commitHash": "8d5457295b42772bd9d619cf66d4c4e2ba460661",
        "prHref": "https://github.com/dangjingtao/dr-card-ui/pull/184",
        "prTitle": "fix(test/oss): #171 执行测试环境 OSS 固定目录上传",
        "prBaseHash": "553fb4b7a7bf615b18f653cd2b86afafaad15a9a",
        "buildHref": "https://github.com/dangjingtao/dr-card-ui/actions/runs/38031854753"
      },
      "gitCommit": {
        "shortHash": "8d54572",
        "hash": "8d5457295b42772bd9d619cf66d4c4e2ba460661",
        "subject": "Merge 889e17d5751ef82a8263696b87551635a0370926 into 553fb4b7a7bf615b18f653cd2b86afafaad15a9a",
        "body": "Merge 889e17d5751ef82a8263696b87551635a0370926 into 553fb4b7a7bf615b18f653cd2b86afafaad15a9a\n",
        "author": {
          "name": "Tomz Dang",
          "email": "dangjingtao@163.com",
          "time": 1791614535000
        },
        "committer": {
          "name": "GitHub",
          "email": "noreply@github.com",
          "time": 1791614535000
        },
        "branch": "HEAD"
      },
      "gitDiff": "diff --git a/.github/workflows/oss-web-nonprod.yml b/.github/workflows/oss-web-nonprod.yml\nindex 53a803f..9429424 100644\n--- a/.github/workflows/oss-web-nonprod.yml\n+++ b/.github/workflows/oss-web-nonprod.yml\n@@ -71,16 +71,11 @@ jobs:\n             exit 1\n           fi\n \n-  rollout-status:\n-    name: Report nonprod activation state\n-    if: github.event_name == 'push' && vars.OSS_WEB_NONPROD_ENABLED != 'true'\n-    runs-on: ubuntu-latest\n-    steps:\n-      - run: echo \"::notice::OSS nonproduction publishing is disabled. Configure oss-ui/oss-dev/oss-test and set repository variable OSS_WEB_NONPROD_ENABLED=true to activate uploads; package checks still run.\"\n-\n   deploy:\n     name: Publish fixed nonprod OSS path\n-    if: github.event_name == 'push' && vars.OSS_WEB_NONPROD_ENABLED == 'true' && (github.ref_name == 'preview' || github.ref_name == 'dev' || github.ref_name == 'test')\n+    # Publish is attempted on branch push; a missing environment credential\n+    # is a visible failure, not a silently skipped deployment.\n+    if: github.event_name == 'push' && (github.ref_name == 'preview' || github.ref_name == 'dev' || github.ref_name == 'test')\n     needs: package-check\n     runs-on: ubuntu-latest\n     timeout-minutes: 25\ndiff --git a/docs/deploy/oss-web-fixed-nonprod.md b/docs/deploy/oss-web-fixed-nonprod.md\nindex 2fd454e..7748585 100644\n--- a/docs/deploy/oss-web-fixed-nonprod.md\n+++ b/docs/deploy/oss-web-fixed-nonprod.md\n@@ -21,7 +21,7 @@ Bucket `kbs-sdl`（`cn-guangzhou`）：\n \n ## GitHub 环境准备（必须由仓库/云账号管理员完成）\n \n-默认安全状态：新非生产部署**不立即启用**，PR/branch CI 仍会做无密钥构建验证。管理员在下面三个 Environment 和测试 API/HTTPS 配置全部就绪后，在仓库 **Settings → Secrets and variables → Actions → Variables** 新建 `OSS_WEB_NONPROD_ENABLED=true` 才允许自动上传。禁用时 push 工作流明确输出 Notice；**启用后若凭据或 test API 缺失则部署失败**，不跳过校验，不回退到生产密钥。\n+**#171 更新**：非生产推送会实际尝试上传；取消 `OSS_WEB_NONPROD_ENABLED` 开关。缺少所属环境 OSS 凭据时，部署作业明确失败，不能用 CI 打包成功代替真实发布。仍使用不同环境的 OSS 身份，不借用生产密钥，不做对象删除。\n \n 首次执行自动部署前，在 GitHub Settings → Environments 创建：",
      "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/8d5457295b42772bd9d619cf66d4c4e2ba460661",
            "commitHash": "8d5457295b42772bd9d619cf66d4c4e2ba460661",
            "prHref": "https://github.com/dangjingtao/dr-card-ui/pull/184",
            "prTitle": "fix(test/oss): #171 执行测试环境 OSS 固定目录上传",
            "prBaseHash": "553fb4b7a7bf615b18f653cd2b86afafaad15a9a",
            "buildHref": "https://github.com/dangjingtao/dr-card-ui/actions/runs/38031854753"
          },
          "gitCommit": {
            "shortHash": "8d54572",
            "hash": "8d5457295b42772bd9d619cf66d4c4e2ba460661",
            "subject": "Merge 889e17d5751ef82a8263696b87551635a0370926 into 553fb4b7a7bf615b18f653cd2b86afafaad15a9a",
            "body": "Merge 889e17d5751ef82a8263696b87551635a0370926 into 553fb4b7a7bf615b18f653cd2b86afafaad15a9a\n",
            "author": {
              "name": "Tomz Dang",
              "email": "dangjingtao@163.com",
              "time": 1791614535000
            },
            "committer": {
              "name": "GitHub",
              "email": "noreply@github.com",
              "time": 1791614535000
            },
            "branch": "HEAD"
          },
          "gitDiff": "diff --git a/.github/workflows/oss-web-nonprod.yml b/.github/workflows/oss-web-nonprod.yml\nindex 53a803f..9429424 100644\n--- a/.github/workflows/oss-web-nonprod.yml\n+++ b/.github/workflows/oss-web-nonprod.yml\n@@ -71,16 +71,11 @@ jobs:\n             exit 1\n           fi\n \n-  rollout-status:\n-    name: Report nonprod activation state\n-    if: github.event_name == 'push' && vars.OSS_WEB_NONPROD_ENABLED != 'true'\n-    runs-on: ubuntu-latest\n-    steps:\n-      - run: echo \"::notice::OSS nonproduction publishing is disabled. Configure oss-ui/oss-dev/oss-test and set repository variable OSS_WEB_NONPROD_ENABLED=true to activate uploads; package checks still run.\"\n-\n   deploy:\n     name: Publish fixed nonprod OSS path\n-    if: github.event_name == 'push' && vars.OSS_WEB_NONPROD_ENABLED == 'true' && (github.ref_name == 'preview' || github.ref_name == 'dev' || github.ref_name == 'test')\n+    # Publish is attempted on branch push; a missing environment credential\n+    # is a visible failure, not a silently skipped deployment.\n+    if: github.event_name == 'push' && (github.ref_name == 'preview' || github.ref_name == 'dev' || github.ref_name == 'test')\n     needs: package-check\n     runs-on: ubuntu-latest\n     timeout-minutes: 25\ndiff --git a/docs/deploy/oss-web-fixed-nonprod.md b/docs/deploy/oss-web-fixed-nonprod.md\nindex 2fd454e..7748585 100644\n--- a/docs/deploy/oss-web-fixed-nonprod.md\n+++ b/docs/deploy/oss-web-fixed-nonprod.md\n@@ -21,7 +21,7 @@ Bucket `kbs-sdl`（`cn-guangzhou`）：\n \n ## GitHub 环境准备（必须由仓库/云账号管理员完成）\n \n-默认安全状态：新非生产部署**不立即启用**，PR/branch CI 仍会做无密钥构建验证。管理员在下面三个 Environment 和测试 API/HTTPS 配置全部就绪后，在仓库 **Settings → Secrets and variables → Actions → Variables** 新建 `OSS_WEB_NONPROD_ENABLED=true` 才允许自动上传。禁用时 push 工作流明确输出 Notice；**启用后若凭据或 test API 缺失则部署失败**，不跳过校验，不回退到生产密钥。\n+**#171 更新**：非生产推送会实际尝试上传；取消 `OSS_WEB_NONPROD_ENABLED` 开关。缺少所属环境 OSS 凭据时，部署作业明确失败，不能用 CI 打包成功代替真实发布。仍使用不同环境的 OSS 身份，不借用生产密钥，不做对象删除。\n \n 首次执行自动部署前，在 GitHub Settings → Environments 创建：",
          "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": 44,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T06:43:36.218Z",
                  "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": 1166,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T06:43:36.192Z",
                  "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": 1080,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T06:43:36.312Z",
                  "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": 1010,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T06:43:38.405Z",
                  "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": 1105,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T06:43:38.493Z",
                  "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": 0,
                  "parallelIndex": 0,
                  "status": "passed",
                  "duration": 982,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T06:43:39.435Z",
                  "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": 1,
                  "parallelIndex": 1,
                  "status": "passed",
                  "duration": 993,
                  "errors": [],
                  "stdout": [],
                  "stderr": [],
                  "retry": 0,
                  "startTime": "2026-10-10T06:43:39.621Z",
                  "annotations": [],
                  "attachments": []
                }
              ],
              "status": "expected"
            }
          ],
          "id": "37c772ca39f4c8e5dd7a-8caf237c4d42513fff2f",
          "file": "test-gate.spec.ts",
          "line": 80,
          "column": 1
        }
      ]
    }
  ],
  "errors": [],
  "stats": {
    "startTime": "2026-10-10T06:43:35.179Z",
    "duration": 5491.239,
    "expected": 7,
    "skipped": 0,
    "unexpected": 0,
    "flaky": 0
  }
}